*** CORE ***

This commit is contained in:
Aivars Zukovskis 2026-09-15 13:06:45 +03:00
parent 31632b20fe
commit 2c05cbec47
707 changed files with 362332 additions and 0 deletions

0
build/.gitkeep Normal file
View File

70
composer.json Normal file
View File

@ -0,0 +1,70 @@
{
"type": "project",
"name": "elixir/application",
"license": "proprietary",
"authors": [
{
"name": "Mareks Keiss",
"email": "mareks.keiss@brsystems.lv",
"homepage": "https://www.brsystems.lv",
"role": "Developer/Product Owner"
}
],
"require":{
"php": "7.4.*",
"twig/twig": "^3.0",
"twig/cache-extra": "^3.4",
"google/apiclient": "^2.0",
"google/recaptcha": "^1.2",
"matthiasmullie/minify": "^1.3",
"swiftmailer/swiftmailer": "^6.3",
"phpgangsta/googleauthenticator": "dev-master",
"benhall14/php-imap-reader": "^1.3",
"myclabs/php-enum": "^1.8",
"ext-mbstring": "*",
"dompdf/dompdf": "2.0",
"ext-mysqli": "*",
"ext-dom": "*",
"ext-apcu": "*",
"ext-json": "*",
"ext-zip": "*",
"ext-openssl": "*",
"ext-curl": "*",
"ext-gd": "*",
"ext-simplexml": "*",
"ext-bcmath": "*"
},
"require-dev": {
"php-webdriver/webdriver": "1.15.1",
"phpunit/phpunit": "^9.5",
"ottosmops/pdftotext": "^2.0",
"nyholm/psr7": "^1.4",
"php-http/curl-client": "^2.3",
"rpkamp/mailhog-client": "2.0",
"guzzlehttp/psr7": "^2.4",
"php-http/message": "^1.14",
"php-http/message-factory": "^1.1",
"php-http/discovery": "^1.19"
},
"autoload": {
"psr-4": {
"BRSystems\\Core\\Cms\\" : "www/system-brs-core/cms/",
"BRSystems\\Core\\App\\" : "www/system-brs-core/app/",
"BRSystems\\Core\\Sys\\" : "www/system-brs-core/sys/",
"BRSystems\\Core\\Config\\" : "www/system-brs-core/config/",
"BRSystems\\Core\\Library\\" : "www/system-brs-core/library/",
"BRSystems\\Core\\Helpers\\" : "www/system-brs-core/functions/"
}
},
"autoload-dev": {
"psr-4": {
"ElixirAudit\\Tests\\" : "tests/"
}
},
"config": {
"process-timeout":600,
"allow-plugins": {
"php-http/discovery": true
}
}
}

6161
composer.lock generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,23 @@
#!/usr/bin/env bash
Green='\033[0;32m'
Color_Off='\033[0m'
# Installing composer dependencies
echo -e "${Green}Installing composer dependencies${Color_Off}"
# Install composer dependencies
docker exec maisonalexandra_php bash -c "rm -rf /var/www/html/vendor"
docker exec maisonalexandra_php bash -c "php /usr/local/bin/composer install --working-dir /var/www/html"
# Install PDF font for file exports
echo -e "${Green}Copying DomPdf FONT family for PDF file export${Color_Off}"
docker exec maisonalexandra_php bash -c "cp /var/www/html/www/system-brs-core/library/cPdfFromHTML/load_font.php /var/www/html/vendor/dompdf/load_font.php"
docker exec maisonalexandra_php bash -c "cp -R /var/www/html/www/system-brs-core/library/cPdfFromHTML/FONTS /var/www/html/vendor/dompdf/FONTS"
echo -e "${Green}Inatalling DomPdf FONT ${Color_Off}"
docker exec maisonalexandra_php bash -c "cd /var/www/html/vendor/dompdf; php load_font.php 'Muli' ./FONTS/Muli/static/Muli-Regular.ttf ./FONTS/Muli/static/Muli-Bold.ttf ./FONTS/Muli/static/Muli-Italic.ttf ./FONTS/Muli/static/Muli-BoldItalic.ttf >/dev/null"
echo -e "${Green}DomPdf FONT Installation complete! ${Color_Off}"
echo

View File

@ -0,0 +1,12 @@
#!/usr/bin/env bash
Green='\033[0;32m'
Color_Off='\033[0m'
# Dumping database test data
echo -e "${Green}Dumping database test data${Color_Off}"
echo
docker exec -t maisonalexandra_mysql bash -c "./opt/bin/dump_data.sh $*"
exit 0

View File

@ -0,0 +1,12 @@
#!/usr/bin/env bash
Green='\033[0;32m'
Color_Off='\033[0m'
# Dumping database structure
echo -e "${Green}Dumping database structure${Color_Off}"
echo
docker exec -t maisonalexandra_mysql bash -c "./opt/bin/dump_structure.sh $*"
exit 0

View File

@ -0,0 +1,12 @@
#!/usr/bin/env bash
Green='\033[0;32m'
Color_Off='\033[0m'
# Loading database test data
echo -e "${Green}Loading database test data${Color_Off}"
echo
docker exec -t maisonalexandra_mysql bash -c './opt/bin/load_data.sh'
exit 0

View File

@ -0,0 +1,12 @@
#!/usr/bin/env bash
Green='\033[0;32m'
Color_Off='\033[0m'
# Loading database structure
echo -e "${Green}Loading database structure${Color_Off}"
echo
docker exec -t maisonalexandra_mysql bash -c "./opt/bin/load_structure.sh $*"
exit 0

19
development/bin/docker_down.sh Executable file
View File

@ -0,0 +1,19 @@
#!/usr/bin/env bash
Green='\033[0;32m'
Color_Off='\033[0m'
# Check if we are in the project's root directory by checking for this script's directory
if [ ! -d "./development/bin" ]
then
echo "This script must be run from the root of the project"
exit 1
fi
# Tear down the Docker containers
echo -e "${Green}Tearing down Docker containers${Color_Off}"
echo
docker-compose -f docker-compose.yaml down || exit 1
exit 0

100
development/bin/docker_up.sh Executable file
View File

@ -0,0 +1,100 @@
#!/usr/bin/env bash
# Configure mysql for further usage
credentialsFile="/opt/bin/mysql-credentials.cnf"
setup="false"
composer_install="false"
Green='\033[0;32m'
Color_Off='\033[0m'
function print_usage {
echo "use flag -s to setup db structure as well"
}
while getopts 'sc' flag; do
case "${flag}" in
s) setup="true" ;;
c) composer_install="true" ;;
*) print_usage
exit 1 ;;
esac
done
# Check if we are in the project's root directory by checking for this script's directory
if [ ! -d "./development/bin" ]; then
echo "This script must be run from the root of the project"
exit 1
fi
# Bring up the Docker containers
echo -e "${Green}Bringing up Docker containers${Color_Off}"
echo
docker-compose -f docker-compose.yaml up -d || exit 1
# Adding the execute permission for database scripts
docker exec -t maisonalexandra_mysql bash -c 'chmod +x /opt/bin/*.sh'
# Create folders & install composer packages if folder is missing
#if [[ ! -d "./vendor" || $composer_install -eq "true" ]]; then
# # Installing composer dependencies
# echo -e "${Green}Installing composer dependencies${Color_Off} ..."
# echo
#
# rm -rf ./vendor
# mkdir -p ./vendor
#
# sleep 3;
# docker exec secretvault_php bash -c "php /usr/local/bin/composer install --working-dir /var/www/html"
#else
# docker exec secretvault_php bash -c "cd /var/www/html; composer dumpautoload" > /dev/null 2>&1;
#fi
# Disable sendmail_path from php.webdevops.ini cfg file which overrider php.ini
#docker exec -t secretvault_php bash -c 'sed -i "s/^sendmail_path/;sendmail_path/" /opt/docker/etc/php/php.webdevops.ini'
# Check if db container is loaded, if not wait for it to load
printf 'Waiting for database connection ...' > /dev/tty
timeout=0
while ! docker exec -it maisonalexandra_mysql mysql --defaults-extra-file=$credentialsFile -e "SELECT 1" >/dev/null 2>&1; do
# Exit if exceed 60s
if [[ "$timeout" -gt 60 ]]; then
exit 1
fi
printf "." > /dev/tty
let timeout++
sleep 1
done
echo -e " ${Green}done${Color_Off}"
# Load DB & setup users and privileges
if [[ $setup == "true" ]]; then
# Load base working companies
echo
echo -e "${Green}Load database core structure${Color_Off}"
docker exec -t maisonalexandra_mysql bash -c "./opt/bin/load_structure.sh -db=maison_alexandra_lv -progress-title='Constructing maison_alexandra_lv'"
# Load base working companies
echo
echo -e "${Green}Load database core data${Color_Off}"
docker exec -t maisonalexandra_mysql bash -c "./opt/bin/load_data.sh -db=maison_alexandra_lv -progress-title='Loading data maison_alexandra_lv'"
# Create ct user & grant all permissions - some views depend on this user
docker exec -it maisonalexandra_mysql mysql --defaults-extra-file=$credentialsFile -e \
"DROP USER IF EXISTS 'dAccGlobal'@'%';"
docker exec -it maisonalexandra_mysql mysql --defaults-extra-file=$credentialsFile -e \
"CREATE USER 'dAccGlobal'@'%' IDENTIFIED BY 'dAccGlobal12!@'; GRANT ALL PRIVILEGES ON *.* TO dAccGlobal@'%';"
docker exec -it maisonalexandra_mysql mysql --defaults-extra-file=$credentialsFile -e \
"DROP USER IF EXISTS 'dElixirGlobalCr'@'%';"
docker exec -it maisonalexandra_mysql mysql --defaults-extra-file=$credentialsFile -e \
"CREATE USER 'dElixirGlobalCr'@'%' IDENTIFIED BY 'dElixirGlobalCr12\!@'; GRANT ALL PRIVILEGES ON *.* TO dElixirGlobalCr@'%';"
echo -e "Database structure & data setup load ... ${Green}done${Color_Off}"
fi
exit 0

View File

@ -0,0 +1,52 @@
#!/usr/bin/env bash
# Configure mysql for further usage
credentialsFile="/opt/bin/mysql-credentials.cnf"
default_db_name="maison_alexandra_lv"
# Set passed arguments
for i in "$@"; do
case $i in
-db=*|--db_name=*) default_db_name="${i#*=}" ;;
*) echo "Unknown parameter passed: $i"; exit 1 ;;
esac
done
# Show progress bar
function ProgressBar {
# Process data
let _progress=(${1}*100/${2}*100)/100
let _done=(${_progress}*4)/10
let _left=40-$_done
# Build progressbar string lengths
_fill=$(printf "%${_done}s")
_empty=$(printf "%${_left}s")
printf "\rProgress : ${_fill// /█}${_empty// / } | ${_progress}%%"
if [ $_progress -eq 100 ]; then
echo -e
fi
}
# Create folders
if [ ! -d "/opt/data/$default_db_name" ]; then
mkdir -p "/opt/data/$default_db_name";
fi
# Setup progressbar
dumped_tables=0
total_tables="$(mysql --defaults-extra-file=$credentialsFile $default_db_name -Bse \
"SELECT count(*) AS TOTALNUMBEROFTABLES FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '"$default_db_name"';")"
# Get all tables to dup
TABLE_NAMES="$(mysql --defaults-extra-file=$credentialsFile $default_db_name -Bse 'show tables;')"
# Dump each table
for TABLE_NAME in ${TABLE_NAMES[@]}; do
mysqldump --defaults-extra-file=$credentialsFile --no-create-info --tab="/opt/data/$default_db_name" $default_db_name $TABLE_NAME
let dumped_tables++
ProgressBar ${dumped_tables} ${total_tables}
done
# Delete empty files
find "/opt/data/$default_db_name" -maxdepth 1 -type f -empty -delete

View File

@ -0,0 +1,68 @@
#!/usr/bin/env bash
# Configure mysql for further usage
credentialsFile="/opt/bin/mysql-credentials.cnf"
default_db_name="maison_alexandra_lv"
# Set passed arguments
for i in "$@"; do
case $i in
-db=*|--db_name=*) default_db_name="${i#*=}" ;;
*) echo "Unknown parameter passed: $i"; exit 1 ;;
esac
done
# Show progress bar
function ProgressBar {
# Process data
let _progress=(${1}*100/${2}*100)/100
let _done=(${_progress}*4)/10
let _left=40-$_done
# Build progressbar string lengths
_fill=$(printf "%${_done}s")
_empty=$(printf "%${_left}s")
printf "\rProgress : ${_fill// /█}${_empty// / } | ${_progress}%%"
if [ $_progress -eq 100 ]; then
echo -e
fi
}
# Create folders
if [ ! -d "/opt/structure/$default_db_name/tables" ]; then
mkdir -p "/opt/structure/$default_db_name/tables";
fi
if [ ! -d "/opt/structure/$default_db_name/views" ]; then
mkdir -p "/opt/structure/$default_db_name/views";
fi
if [ ! -d "/opt/structure/$default_db_name/procedures" ]; then
mkdir -p "/opt/structure/$default_db_name/procedures";
fi
# Setup progressbar
dumped_tables=0
total_tables="$(mysql --defaults-extra-file=$credentialsFile $default_db_name -Bse \
"SELECT count(*) AS TOTAL_COUNT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '$default_db_name';")"
# Get all tables to dump
TABLE_NAMES="$(mysql --defaults-extra-file=$credentialsFile $default_db_name -Bse 'show tables;')"
# Dump each procedure
mysqldump --defaults-extra-file=$credentialsFile --routines --no-create-info --no-data --no-create-db --skip-opt $default_db_name > "/opt/structure/$default_db_name/procedures/routines.sql"
# Dump each table
for TABLE_NAME in ${TABLE_NAMES[@]}; do
mysqldump --defaults-extra-file=$credentialsFile --no-data --tab="/opt/structure/$default_db_name" $default_db_name $TABLE_NAME
let dumped_tables++
ProgressBar ${dumped_tables} ${total_tables}
file="/opt/structure/$default_db_name/$TABLE_NAME.sql"
# Separate views from tables
if [[ $(cat $file | grep -ci 'CREATE TABLE') -gt 0 ]]; then
mv $file "/opt/structure/$default_db_name/tables"
continue
fi
if [[ $(cat $file | grep -ci 'Final view structure for view') -gt 0 ]]; then
mv $file "/opt/structure/$default_db_name/views"
fi
done

View File

@ -0,0 +1,60 @@
#!/usr/bin/env bash
# Configure mysql for further usage
credentialsFile="/opt/bin/mysql-credentials.cnf"
dump_file=""
progress_msg=""
default_db_name="maison_alexandra_lv"
load_single_table_by_title=""
# Set passed arguments
for i in "$@"; do
case $i in
-db=*|--db_name=*) default_db_name="${i#*=}" ;;
-file=*|--dump_file=*) dump_file="${i#*=}" ;;
-progress-title=*) progress_msg="${i#*=}" ;;
-reload-table=*) load_single_table_by_title="${i#*=}" ;;
*) echo "Unknown parameter passed: $i"; exit 1 ;;
esac
done
# Show progress bar
function ProgressBar {
# Process data
let _progress=(${1}*100/${2}*100)/100
let _done=(${_progress}*4)/10
let _left=40-$_done
# Build progressbar string lengths
_fill=$(printf "%${_done}s")
_empty=$(printf "%${_left}s")
printf "\rProgress : ${_fill// /█}${_empty// / } | ${_progress}%% \t$progress_msg"
if [ $_progress -eq 100 ]; then
echo -e
fi
}
if [[ -e /opt/data/$default_db_name ]]; then
# Check if table specified & load it
if [[ "$load_single_table_by_title" ]]; then
if [[ -e "/opt/data/$default_db_name/$load_single_table_by_title.txt" ]]; then
mysqlimport --defaults-extra-file=$credentialsFile -d $default_db_name "/opt/data/$default_db_name/$load_single_table_by_title.txt" >/dev/null;
ProgressBar 1 1
exit 0
fi
else
# Setup progressbar
loaded_files=0
total_files=$(find /opt/data/$default_db_name -type f -name "*.txt" -printf x | wc -c)
# Load table data
for file in /opt/data/$default_db_name/*.txt;
do
if [[ -e $file ]]; then
mysqlimport --defaults-extra-file=$credentialsFile -d $default_db_name $file >/dev/null;
let loaded_files++
ProgressBar ${loaded_files} ${total_files}
fi
done
fi
fi

View File

@ -0,0 +1,113 @@
#!/usr/bin/env bash
# Configure mysql for further usage
credentialsFile="/opt/bin/mysql-credentials.cnf"
dump_file=""
progress_msg=""
default_db_name="maison_alexandra_lv"
# Set passed arguments
for i in "$@"; do
case $i in
-db=*|--db_name=*) default_db_name="${i#*=}" ;;
-file=*|--dump_file=*) dump_file="${i#*=}" ;;
-progress-title=*) progress_msg="${i#*=}" ;;
*) echo "Unknown parameter passed: $i"; exit 1 ;;
esac
done
# Show progress bar
function ProgressBar {
# Process data
let _progress=(${1}*100/${2}*100)/100
let _done=(${_progress}*4)/10
let _left=40-$_done
# Build progressbar string lengths
_fill=$(printf "%${_done}s")
_empty=$(printf "%${_left}s")
printf "\rProgress : ${_fill// /█}${_empty// / } | ${_progress}%% \t$progress_msg"
if [ $_progress -eq 100 ]; then
echo -e
fi
}
# Remove the existing schema if it exists and recreate it
mysql --defaults-extra-file=$credentialsFile -e "DROP SCHEMA IF EXISTS \`$default_db_name\`"
mysql --defaults-extra-file=$credentialsFile -e "CREATE SCHEMA \`$default_db_name\` COLLATE utf8_general_ci"
# Check if dump file specified & load it
if [[ "$dump_file" ]]; then
if [[ -e "/opt/db_dumps/$dump_file" ]]; then
mysql --defaults-extra-file=$credentialsFile $default_db_name < "/opt/db_dumps/$dump_file";
ProgressBar 1 1
exit 0
fi
else
# Loop over the sql files and import each one from the base dir
for file in "/opt/structure/$default_db_name/*.sql"; do
if [[ -e $file ]]; then
mysql --defaults-extra-file=$credentialsFile $default_db_name < $file;
fi
done
fi
# Setup progressbar
loaded_files=0
total_files=$(find "/opt/structure/$default_db_name" -type f -name "*.sql" -printf x | wc -c)
# Loop over the table schema files and import each one
if [ -d /opt/structure/$default_db_name/tables ]; then
for file in /opt/structure/$default_db_name/tables/*.sql; do
if [[ -e $file ]]; then
mysql --defaults-extra-file=$credentialsFile $default_db_name < $file;
let loaded_files++
ProgressBar ${loaded_files} ${total_files}
fi
done
fi
# Loop over the procedure schema files and import each one
if [ -d /opt/structure/$default_db_name/procedures ]; then
for file in /opt/structure/$default_db_name/procedures/*.sql; do
if [[ -e $file ]]; then
mysql --defaults-extra-file=$credentialsFile $default_db_name < $file;
let loaded_files++
ProgressBar ${loaded_files} ${total_files}
fi
done
fi
# Loop over the view schema files and import each one
declare -a WRONG_ORDER
if [ -d /opt/structure/$default_db_name/views ]; then
for file in /opt/structure/$default_db_name/views/*.sql; do
if [[ -e $file ]]; then
if [[ $(mysql --defaults-extra-file=$credentialsFile $default_db_name < $file 2>&1 >/dev/null | grep -ic "doesn't exist") -gt 0 ]]; then
WRONG_ORDER+=($file)
else
let loaded_files++
ProgressBar ${loaded_files} ${total_files}
fi
fi
done
fi
attempts=0
while [ ${#WRONG_ORDER[@]} -gt 0 ]; do
# Exit if exceed 5 attempts
if [[ "$attempts" -gt 4 ]]; then
exit 1
fi
index=0
for i in "${WRONG_ORDER[@]}"; do
if [[ $(mysql --defaults-extra-file=$credentialsFile $default_db_name < $i 2>&1 >/dev/null | grep -ic "doesn't exist") -eq 0 ]]; then
unset WRONG_ORDER[index]
let loaded_files++
ProgressBar ${loaded_files} ${total_files}
fi
let index++
done
let attempts++
done

View File

@ -0,0 +1,4 @@
[client]
user=root
password=root
host=localhost

View File

@ -0,0 +1,116 @@
#!/usr/bin/env bash
## -------------------------------------------------------------------
## RUNNING THE SCRIPT FILE FOR DOCKER CONTAINER - TEST / DEVELOP
## docker exec -it secretvault_mysql bash -c "cd /opt && ./bin/load_all_dbs.sh -folder=data/bulk_db_load_test"
## -------------------------------------------------------------------
# Configure mysql for further usage
credentialsFile="/opt/bin/mysql-credentials.cnf"
#credentialsFile="/opt/dbmigration/mysql-credentials.cnf"
load_file=""
progress_msg=""
default_db_name=""
# Set passed arguments
for i in "$@"; do
case $i in
-file=*|--load_file=*) load_file="${i#*=}" ;;
*) echo "Unknown parameter passed: $i"; exit 1 ;;
esac
done
# Show progress bar
function ProgressBar {
# Process data
let _progress=(${1}*100/${2}*100)/100
let _done=(${_progress}*4)/10
let _left=40-$_done
# Build progressbar string lengths
_fill=$(printf "%${_done}s")
_empty=$(printf "%${_left}s")
# Then, we come to the “magic” part: “\033[0K\r“. Now, let’s understand what it means step by step:
#
# \033 – It’s the escape sequence. In other words, it’s ESC.
# \033[ – Then this becomes “ESC [“, which is the control sequence introducer (CSI).
# \033[0k – So it’s “CSI 0 K“. Further, “CSI 0 K” erases the text from the cursor to the end of the line.
# \r – This is the carriage return. It brings the cursor to the beginning of the line.
# Therefore, the command echo -ne “Message\033[0K\r” performs the following steps:
#
# print “Message“
# erase everything after “Message“. In other words, it removes the text from the previous output. Now, the cursor is at the end of the line.
# finally, “\r” moves the cursor back to the beginning
# In this way, each echo command overwrites the previous message on the same line.
printf "\rProgress : ${_fill// /█}${_empty// / } | ${_progress} \t$progress_msg\033[0K\r"
if [ $_progress -eq 100 ]; then
echo -e
fi
}
echo "NOTHING TO DO"
exit 1
# Show progress bar
function LoadDatabaseTable {
_file=(${1})
_db_title=(${2})
if [[ -e $_file ]]; then
# Remove the existing schema if it exists and recreate it
mysql --defaults-extra-file=$credentialsFile -e "DROP SCHEMA IF EXISTS \`$_db_title\`"
mysql --defaults-extra-file=$credentialsFile -e "CREATE SCHEMA \`$_db_title\` COLLATE utf8mb4_general_ci"
# Load dump file
mysql --defaults-extra-file=$credentialsFile -D "$_db_title" < $_file;
fi
}
# Check if dir exists
if [ -d "$load_dir" ]; then
# Setup progressbar
loaded_files=0
total_files=$(find "$PWD/$load_dir" -depth -maxdepth 1 -type f -name "*.sql" | wc -l)
# Loop over each db import file
for file in $PWD/$load_dir/*.sql; do
if [[ -e $file ]]; then
base_file=${file##*/}
current_db_name="${base_file%.*}"
# Check if base db exists & if not load maison_alexandra_lv db
if [ $loaded_files -eq 0 ]; then
progress_msg="LOADING BASE STRUCTURE 'maison_alexandra_lv' DB STRUCTURE"
ProgressBar ${loaded_files} ${total_files}
# Needs to load base structure for linked view not to throw errors
LoadDatabaseTable "$(dirname "${file}")/maison_alexandra_lv.sql" "maison_alexandra_lv"
fi
# Continue with the rest of db dump load
progress_msg="LOADING '$current_db_name' DB STRUCTURE"
ProgressBar ${loaded_files} ${total_files}
LoadDatabaseTable ${file} ${current_db_name}
let loaded_files++
ProgressBar ${loaded_files} ${total_files}
fi
done
echo -e "DONE;"
exit 0
fi
echo "NOTHING TO DO"
exit 1

View File

@ -0,0 +1,72 @@
1 1 0 1442 0 0 1777292571 1784197613 0
2 2 0 1443 0 1 1777292581 1782812826 0
3 1 0 1456 0 0 1781255008 1785245975 0
4 3 0 1456 0 0 1781255659 1785246019 0
12 1 0 1457 0 0 1781259704 1783693529 0
13 2 0 1457 0 0 1781259726 1783693518 0
14 3 0 1457 0 0 1781259740 1783693501 0
15 1 0 1458 0 0 1781260451 1781260451 0
16 2 0 1458 0 0 1781260463 1781260463 0
17 3 0 1458 0 0 1781260475 1781260475 0
18 4 0 1458 0 0 1781260486 1781260486 0
19 5 0 1458 0 0 1781260499 1781260499 0
20 1 0 1459 0 0 1781261491 1781261654 0
21 2 0 1459 0 0 1781261955 1781261955 0
22 3 0 1459 0 0 1781261987 1781261987 0
23 1 0 1460 0 0 1781262077 1785332503 0
24 1 0 1461 0 0 1781546508 1781546508 0
25 2 0 1461 0 0 1781546549 1781546577 1
26 1 0 1462 0 0 1781696897 1785146309 0
27 1 0 1463 0 0 1781697559 1785146121 0
28 1 0 1464 0 0 1781769542 1781769735 0
29 2 0 1464 0 0 1781769642 1781769642 0
30 3 0 1464 0 0 1781769727 1781769727 0
64 1 0 1442 0 0 1782993582 1784271438 0
65 1 0 1443 0 64 1782993624 1783675913 0
66 2 0 1443 0 64 1782993624 1783675970 0
67 3 0 1443 0 64 1782993624 1783675987 0
68 4 0 1443 0 64 1782993624 1782996622 0
69 5 0 1443 0 64 1782993624 1782996622 0
70 6 0 1443 0 64 1782993624 1782996622 0
71 7 0 1443 0 64 1782993624 1782996622 0
72 8 0 1443 0 64 1782993624 1782996622 0
73 9 0 1443 0 64 1782993624 1782996622 0
74 10 0 1443 0 64 1782993624 1782996622 0
75 11 0 1443 0 64 1782993624 1782996622 0
76 12 0 1443 0 64 1782993624 1782996622 0
77 13 0 1443 0 64 1782993624 1782996622 0
78 14 0 1443 0 64 1782993624 1782996622 0
79 2 0 1442 0 0 1782993582 1784271431 0
80 1 0 1443 0 79 1782993624 1782996622 0
81 2 0 1443 0 79 1782993624 1782996622 0
82 3 0 1443 0 79 1782993624 1782996622 0
83 4 0 1443 0 79 1782993624 1782996622 0
84 5 0 1443 0 79 1782993624 1782996622 0
85 6 0 1443 0 79 1782993624 1782996622 0
86 7 0 1443 0 79 1782993624 1782996622 0
87 3 0 1442 0 0 1782993582 1784271423 0
88 1 0 1443 0 87 1782993624 1782996622 0
89 2 0 1443 0 87 1782993624 1782996622 0
90 4 0 1442 0 0 1782993582 1784626578 0
91 1 0 1443 0 90 1782993624 1782996622 0
92 2 0 1443 0 90 1782993624 1782996622 0
93 3 0 1443 0 90 1782993624 1782996622 0
94 4 0 1443 0 90 1782993624 1782996622 0
95 5 0 1443 0 90 1782993624 1782996622 0
96 6 0 1443 0 90 1782993624 1782997303 0
97 4 0 1456 0 0 1783673837 1785246116 0
98 4 0 1456 0 0 1783939212 1783939280 1
99 1 0 1467 0 0 1784012779 1784196406 0
100 1 0 1470 0 0 1784625387 1784625387 0
101 1 0 1469 0 0 1784625527 1784625583 0
102 1 0 1472 0 0 1784759183 1785146557 1
103 1 0 1473 0 0 1784759613 1785145189 1
104 104 0 1474 0 0 1784760259 1784901307 0
106 2 0 1473 0 0 1784898846 1785145190 1
107 1 0 1479 0 0 1784899136 1785145418 1
108 1 0 1478 0 0 1785144354 1785145917 0
109 1 0 1473 0 0 1785145261 1785145261 0
110 1 0 1479 0 0 1785145444 1785146383 0
111 1 0 1477 0 0 1785145543 1785145831 0
112 1 0 1476 0 0 1785146424 1785146453 0
113 1 0 1472 0 0 1785146570 1785147170 0

View File

@ -0,0 +1,26 @@
2 3 Gemini_Generated_Image_iof0yriof0yriof0 /files/article/2026-07/67c19cddb603ad048e39a6302c952fb0a640508e.png 1 1 2
4 4 Gemini_Generated_Image_k9hjsck9hjsck9hj /files/article/2026-07/62762b40f70f8a04082c1382d21251fb15b7bd81.png 1 1 2
5 97 Gemini_Generated_Image_dkh0nndkh0nndkh0 /files/article/2026-07/efc56d7fdbb4a72ef600b61db573d5bb0dbfc694.png 1 1 2
6 65 Gemini_Generated_Image_bw729sbw729sbw72 (2) /files/article/2026-07/5842f514ad65f632b5bc038d092436cab91bd28a.png 0 0 2
7 66 Gemini_Generated_Image_bw729sbw729sbw72 /files/article/2026-07/88d521eda6e42eeb707e8bcb606e054ef8c1512c.png 0 0 2
8 67 Gemini_Generated_Image_bw729sbw729sbw72 (1) /files/article/2026-07/3ded2366811eb6dfcbb2520289096b719d52cf4e.png 0 0 2
9 79 aroma /files/article/2026-07/8624af178b22244bbab08c491d160aa4771b87ef.png 0 0 2
10 64 man /files/article/2026-07/6d6227a5c8417495bdc988c3d2dc8efce209b085.png 0 0 2
11 87 jewelry /files/article/2026-07/bc57fb52e8a91f64e8ec5e3cc401903eaa39112e.png 0 0 2
12 90 women /files/article/2026-07/856c345401ac1212d4c5e273af7ff0b57aa5c6c8.png 0 0 2
14 14 Screenshot 2026-07-10 at 17.24.32 /files/article/2026-07/29c5db8bd71ce623ae114b7cd595898cb6118708.png 0 0 2
15 13 Screenshot 2026-07-10 at 17.24.28 /files/article/2026-07/ef3b675086a8b7df1460df37e7df947a02aeeea0.png 0 0 2
16 12 Screenshot 2026-07-10 at 17.24.24 /files/article/2026-07/7cdc9e8fc3be4c93f1e360d38ac46846c009ec65.png 0 0 2
18 23 Gemini_Generated_Image_hkbs9jhkbs9jhkbs /files/article/2026-07/2b4444038f60f78c58a6ba044c5b004563f2e74f.png 1 0 2
21 98 Gemini_Generated_Image_kzpt83kzpt83kzpt /files/article/2026-07/d8524a6badd19a170cec1ecc7ba904d43e20dbef.png 0 0 2
26 99 Gemini_Generated_Image_x4ca0fx4ca0fx4ca (1) /files/article/2026-07/f5dde82d8e5f37773f4c50761c46758756e3b4d2.png 0 0 2
28 1 Gemini_Generated_Image_ytn6osytn6osytn6 (1) /files/article/2026-07/67699c480d2adaaa0fa8e24d262e9c10a74985eb.png 0 0 2
29 100 Gemini_Generated_Image_f22b9mf22b9mf22b (1) /files/article/2026-07/232f5104e640f9bfd950dc1a1f9dddf995b46798.png 0 0 2
31 101 Gemini_Generated_Image_vqv0qfvqv0qfvqv0 (1) /files/article/2026-07/19c6a340f8a65e1a13fda95fca5313c1b24e4ffd.png 0 0 2
37 102 about-banner1 /files/article/2026-07/19c1fe89165436a0f293b444d126c3be5566f874.jpg 0 0 3
39 102 about-team1 /files/article/2026-07/f816f373d0847572941471765a70a0652f47f6cd.jpg 0 1 3
42 113 about-banner1 /files/article/2026-07/19c1fe89165436a0f293b444d126c3be5566f874.jpg 0 0 3
43 113 about-team1 /files/article/2026-07/f816f373d0847572941471765a70a0652f47f6cd.jpg 0 1 3
45 3 Gemini_Generated_Image_e8htsde8htsde8ht (3) /files/article/2026-07/6378ccfc399a0f1bf84746593506fdfc84fdcee5.png 0 0 2
46 4 Gemini_Generated_Image_e8htsde8htsde8ht (4) /files/article/2026-07/217ad188ff552c76082b174480d06e9186fdfad2.png 0 0 2
47 97 Gemini_Generated_Image_e8htsde8htsde8ht (5) /files/article/2026-07/e1c01f58582e1287c65cacb4f4d76a21dafbf3a7.png 0 0 2

View File

@ -0,0 +1,804 @@
15 Direct delivery to your door 0 Order your products from the comfort of your home \N \N 7
15 0 \N \N 9
15 0 \N \N 10
16 Leaping bunny certified 0 All products are plant besed and cruelty free \N \N 7
16 0 \N \N 9
16 0 \N \N 10
17 Safe for all skin + makeup types 0 PH balanced and small batch tested \N \N 7
17 0 \N \N 9
17 0 \N \N 10
18 High quality ingredients 0 Natural essential oils and herbal extracts nourish skin and hair \N \N 7
18 0 \N \N 9
18 0 \N \N 10
19 Made for women 0 Everyone can enjoy the product line \N \N 7
19 0 \N \N 9
19 0 \N \N 10
20 Wesley bates 0 Beauty blogger <pre>This store transformed my routine! Products are premium, packaging is elegant, and delivery is always fast. Highly recommended.</pre> \N \N 7
20 0 \N \N 9
20 0 \N \N 10
21 Paul smith 0 Salon owner <div>\
<pre>I trust this site for my clients. Lipsticks and brushes are superb, shades are versatile, and tools blend perfectly every time.</pre>\
</div> \N \N 7
21 0 \N \N 9
21 0 \N \N 10
22 Ashley rosa 0 Skincare expert <div>\
<pre>Serums and creams are effective yet gentle. I noticed visible glow in weeks. Safe ingredients make this my go-to beauty destination.</pre>\
</div> \N \N 7
22 0 \N \N 9
22 0 \N \N 10
24 Try our service / Start my diagnosis 0 Your skin diagnosis in 3 minutes <div>\
<pre>Skin tests can help to diagnose allergies, infections, and other problems affecting the skin.</pre>\
</div> \N \N 7
24 0 \N \N 9
24 0 \N \N 10
25 Try another our service / Start my diagnosis 0 Your skin diagnosis in 3 minutes <div>\
<pre>Skin tests can help to diagnose allergies, infections, and other problems affecting the skin.</pre>\
</div> \N \N 7
25 0 \N \N 9
25 0 \N \N 10
29 Store funds 0 <div>\
<pre>Secure and manage your finances effortlessly, ensuring your transactions are both protected and easily accessible.</pre>\
</div> \N \N 7
29 0 \N \N 9
29 0 \N \N 10
30 Round help 0 <div>\
<pre>Always available to assist, our team ensures constant, reliable assistance whenever you need it, day or night.</pre>\
</div> \N \N 7
30 0 \N \N 9
30 0 \N \N 10
28 Outlet locale 0 <div>\
<pre>"Branch site" represents the physical location of a business, where customers can visit and make purchases or inquiries.</pre>\
</div> \N \N 7
28 0 \N \N 9
28 0 \N \N 10
2 Base sub cat / 0 \N \N 7
2 0 \N \N 9
2 0 \N \N 10
68 Džemperi dzemperi 123 \N \N 7
68 0 \N \N 9
68 0 \N \N 10
69 Hūdiji hudiji 124 \N \N 7
69 0 \N \N 9
69 0 \N \N 10
70 Jakas jakas 125 \N \N 7
70 0 \N \N 9
70 0 \N \N 10
71 Bikses bikses 126 \N \N 7
71 0 \N \N 9
71 0 \N \N 10
72 Džinsi dzinsi 127 \N \N 7
72 0 \N \N 9
72 0 \N \N 10
73 Šorti sorti 128 \N \N 7
73 0 \N \N 9
73 0 \N \N 10
74 Apakšveļa apaksvela 129 \N \N 7
74 0 \N \N 9
74 0 \N \N 10
75 Somas somas 130 \N \N 7
75 0 \N \N 9
75 0 \N \N 10
76 Maki maki 131 \N \N 7
76 0 \N \N 9
76 0 \N \N 10
77 Jostas jostas 132 \N \N 7
77 0 \N \N 9
77 0 \N \N 10
78 Aksesuāri aksesuari 133 \N \N 7
78 0 \N \N 9
78 0 \N \N 10
80 Kristāli kristali 135 \N \N 7
80 0 \N \N 9
80 0 \N \N 10
81 Palo Santo palo-santo 136 \N \N 7
81 0 \N \N 9
81 0 \N \N 10
82 Sandalkoka kociņi sandalkoka-kocini 137 \N \N 7
82 0 \N \N 9
82 0 \N \N 10
83 Vīraki viraki 138 \N \N 7
83 0 \N \N 9
83 0 \N \N 10
84 Vīraku turētāji viraku-turetaji 139 \N \N 7
84 0 \N \N 9
84 0 \N \N 10
85 Aromātiskie sveķi aromatiskie-sveki 140 \N \N 7
85 0 \N \N 9
85 0 \N \N 10
86 Sveķu difuzori sveku-difuzori 141 \N \N 7
86 0 \N \N 9
86 0 \N \N 10
88 Kristālu rotas kristalu-rotas 143 \N \N 7
88 0 \N \N 9
88 0 \N \N 10
89 Apzeltītas rotas apzeltitas-rotas 144 \N \N 7
89 0 \N \N 9
89 0 \N \N 10
91 Žaketes zaketes 146 \N \N 7
91 0 \N \N 9
91 0 \N \N 10
92 Kleitas kleitas 147 \N \N 7
92 0 \N \N 9
92 0 \N \N 10
93 Somas somas 148 \N \N 7
93 0 \N \N 9
93 0 \N \N 10
94 Topi topi 149 \N \N 7
94 0 \N \N 9
94 0 \N \N 10
95 Bikses bikses 150 \N \N 7
95 0 \N \N 9
95 0 \N \N 10
96 Svārki svarki 151 \N \N 7
96 0 \N \N 9
96 0 \N \N 10
65 T-krekli t-krekli 120 \N \N 7
65 0 \N \N 9
65 0 \N \N 10
66 Krekli krekli 121 \N \N 7
66 0 \N \N 9
66 0 \N \N 10
67 Polo krekli polo-krekli 122 \N \N 7
67 0 \N \N 9
67 0 \N \N 10
14 Easy to use 0 Packed with a unique design as well as usefull that can help you perform routine skin care. \N \N 7
14 0 \N \N 9
14 0 \N \N 10
13 Fits your skin 0 It's all natural and processed based on traditional knowledge with modern technology. \N \N 7
13 0 \N \N 9
13 0 \N \N 10
12 100% Organic 0 We craft skincare using the most exquisite ingredients from the plant, earth and mineral realms. \N \N 7
12 0 \N \N 9
12 0 \N \N 10
98 Izplūsti sajūtu terapijā un atslābinies veikals Ieskaties 0 Izbaudi \N \N 7
98 0 \N \N 9
98 0 \N \N 10
99 Background 1 0 \N \N 7
99 0 \N \N 9
99 0 \N \N 10
1 Base kategorija 0 \N \N 7
1 0 \N \N 9
1 0 \N \N 10
87 Rotaslietas rotaslietas 0 \N \N 7
87 0 \N \N 9
87 0 \N \N 10
79 Aromterapija un garīgā labsajūta aromterapija-un-gariga-labsajuta 0 \N \N 7
79 0 \N \N 9
79 0 \N \N 10
64 Vīriešiem viriesiem 0 \N \N 7
64 0 \N \N 9
64 0 \N \N 10
100 Collection banner 001 0 \N \N 7
100 0 \N \N 9
100 0 \N \N 10
101 Banner 1 veikalsviriesiemt-krekli 0 \N \N 7
101 0 \N \N 9
101 0 \N \N 10
90 Sievietēm sievietem 0 \N \N 7
90 0 \N \N 9
90 0 \N \N 10
102 About story 0 <p><img src="../../files/article/2026-07/19c1fe89165436a0f293b444d126c3be5566f874.jpg" />&nbsp;</p>\
<p>&nbsp;</p>\
<p></p>\
<div class="about-service section-pt text-center" data-animate="animate__fadeIn">\
<div class="row row-mtm justify-content-md-center">\
<div class="col-12 col-lg-4">\
<h6><span>5000+ Happy customer</span></h6>\
<p class="mst-8"><span>Absolutely delighted with the service! The team was professional and delivered beyond my expectations. Highly recommend!</span></p>\
</div>\
<div class="col-12 col-lg-4">\
<h6><span>29+ Awards won</span></h6>\
<p class="mst-8"><span>Our company has been honored with the Outstanding Achievement Award and Best Industry Leader accolades in recent years.</span></p>\
</div>\
<div class="col-12 col-lg-4">\
<h6><span>40+ years of experiences</span></h6>\
<p class="mst-8"><span>With over all years of combined experience in the industry, our team excels in delivering top-notch solutions and services.</span></p>\
<p class="mst-8"></p>\
</div>\
</div>\
</div>\
<div class="row row-mtm text-center" data-animate="animate__fadeIn">\
<div class="col-12 col-md-6">\
<div class="col-lg-10 col-xl-9 col-xxl-7 mx-lg-auto">\
<div class="col-6 col-lg-3" data-animate="animate__fadeIn">\
<div class="about-team-content banner-hover">\
<div class="about-team-img"><img src="../../files/article/2026-07/f816f373d0847572941471765a70a0652f47f6cd.jpg" alt="Johnny walker" /></div>\
<div class="about-team-info pst-25">\
<h6>Johnny walker</h6>\
<span>Web Designer</span></div>\
</div>\
</div>\
</div>\
</div>\
</div> \N \N 7
102 0 \N \N 9
102 0 \N \N 10
106 Common queries 0 <p></p>\
<div class="section-capture text-center section-pt">\
<div class="section-title animate__fadeIn animate__animated" data-animate="animate__fadeIn">\
<h2 class="section-heading">Common queries</h2>\
<p></p>\
</div>\
</div>\
<div class="tabs-section">\
<div class="container">\
<div class="tabs-block border-full border-radius" id="collapse-tab-mrz04g8vxv3lr" data-animate="animate__fadeIn">\
<div class="collapse-tab ptb-30 plr-15 plr-md-30" data-animate="animate__fadeIn"><button type="button" class="w-100 d-flex align-items-center justify-content-between" data-bs-toggle="collapse" data-bs-target="#tab-1-mrz04g8vwb9hb" aria-expanded="false"><span class="heading-weight">Tab 1</span><span class="tab-icon icon-16"><i class="ri-add-line"></i></span></button>\
<div class="collapse" id="tab-1-mrz04g8vwb9hb" data-bs-parent="#collapse-tab-mrz04g8vxv3lr">\
<div class="pst-15">\
<p>Tab 1 content goes here...</p>\
</div>\
</div>\
</div>\
<div class="collapse-tab ptb-30 plr-15 plr-md-30 bst" data-animate="animate__fadeIn"><button type="button" class="w-100 d-flex align-items-center justify-content-between" data-bs-toggle="collapse" data-bs-target="#tab-2-mrz04g8v8o4nk" aria-expanded="false"><span class="heading-weight">Tab 2</span><span class="tab-icon icon-16"><i class="ri-add-line"></i></span></button>\
<div class="collapse" id="tab-2-mrz04g8v8o4nk" data-bs-parent="#collapse-tab-mrz04g8vxv3lr">\
<div class="pst-15">\
<p>Tab 2 content goes here...</p>\
</div>\
</div>\
</div>\
<div class="collapse-tab ptb-30 plr-15 plr-md-30 bst" data-animate="animate__fadeIn"><button type="button" class="w-100 d-flex align-items-center justify-content-between" data-bs-toggle="collapse" data-bs-target="#tab-3-mrz04g8v3gwsc" aria-expanded="false"><span class="heading-weight">Tab 3</span><span class="tab-icon icon-16"><i class="ri-add-line"></i></span></button>\
<div class="collapse" id="tab-3-mrz04g8v3gwsc" data-bs-parent="#collapse-tab-mrz04g8vxv3lr">\
<div class="pst-15">\
<p>Tab 3 content goes here...</p>\
</div>\
</div>\
</div>\
<div class="collapse-tab ptb-30 plr-15 plr-md-30 bst" data-animate="animate__fadeIn"><button type="button" class="w-100 d-flex align-items-center justify-content-between" data-bs-toggle="collapse" data-bs-target="#tab-4-mrz04g8vzr60a" aria-expanded="false"><span class="heading-weight">Tab 4</span><span class="tab-icon icon-16"><i class="ri-add-line"></i></span></button>\
<div class="collapse" id="tab-4-mrz04g8vzr60a" data-bs-parent="#collapse-tab-mrz04g8vxv3lr">\
<div class="pst-15">\
<p>Tab 4 content goes here...</p>\
</div>\
</div>\
</div>\
<div class="collapse-tab ptb-30 plr-15 plr-md-30 bst" data-animate="animate__fadeIn"><button type="button" class="w-100 d-flex align-items-center justify-content-between" data-bs-toggle="collapse" data-bs-target="#tab-5-mrz04g8v2u0r4" aria-expanded="false"><span class="heading-weight">Tab 5</span><span class="tab-icon icon-16"><i class="ri-add-line"></i></span></button>\
<div class="collapse" id="tab-5-mrz04g8v2u0r4" data-bs-parent="#collapse-tab-mrz04g8vxv3lr">\
<div class="pst-15">\
<p>Tab 5 content goes here...</p>\
</div>\
</div>\
</div>\
<div class="collapse-tab ptb-30 plr-15 plr-md-30 bst" data-animate="animate__fadeIn"><button type="button" class="w-100 d-flex align-items-center justify-content-between" data-bs-toggle="collapse" data-bs-target="#tab-6-mrz04g8v2xoq3" aria-expanded="false"><span class="heading-weight">Tab 6</span><span class="tab-icon icon-16"><i class="ri-add-line"></i></span></button>\
<div class="collapse" id="tab-6-mrz04g8v2xoq3" data-bs-parent="#collapse-tab-mrz04g8vxv3lr">\
<div class="pst-15">\
<p>Tab 6 content goes here...</p>\
</div>\
</div>\
</div>\
</div>\
</div>\
</div> \N \N 7
106 0 <div class="tabs-section section-pt">\
<div class="container">\
<div class="tabs-block border-full border-radius" id="collapse-tab-mryzgy75559p7" data-animate="animate__fadeIn">\
<div class="collapse-tab ptb-30 plr-15 plr-md-30" data-animate="animate__fadeIn"><button type="button" class="w-100 d-flex align-items-center justify-content-between" data-bs-toggle="collapse" data-bs-target="#tab-1-mryzgy750j8ij" aria-expanded="true"><span class="heading-weight">How do i place an order?</span><span class="tab-icon icon-16"><i class="ri-add-line"></i></span></button>\
<div class="collapse show" id="tab-1-mryzgy750j8ij" data-bs-parent="#collapse-tab-mryzgy75559p7">\
<div class="pst-15">\
<p>To place an order, browse our products, select the desired item, choose your size and color if applicable, and click "add to cart." Once you're ready to purchase, click on the cart icon and proceed to checkout. You'll need to enter your shipping and payment details to complete the order.</p>\
</div>\
</div>\
</div>\
<div class="collapse-tab ptb-30 plr-15 plr-md-30 bst" data-animate="animate__fadeIn"><button type="button" class="w-100 d-flex align-items-center justify-content-between" data-bs-toggle="collapse" data-bs-target="#tab-2-mryzgy75w79p5" aria-expanded="false"><span class="heading-weight">How can i track my order status?</span><span class="tab-icon icon-16"><i class="ri-add-line"></i></span></button>\
<div class="collapse" id="tab-2-mryzgy75w79p5" data-bs-parent="#collapse-tab-mryzgy75559p7">\
<div class="pst-15">\
<p>After placing your order, you'll receive a confirmation email with a tracking number once your order has shipped. You can use this number on our "order tracking" page to see the status of your delivery. You can also track your order in the "My Account" section if you have an account with us.</p>\
</div>\
</div>\
</div>\
<div class="collapse-tab ptb-30 plr-15 plr-md-30 bst" data-animate="animate__fadeIn"><button type="button" class="w-100 d-flex align-items-center justify-content-between" data-bs-toggle="collapse" data-bs-target="#tab-3-mryzgy75tr2vi" aria-expanded="false"><span class="heading-weight">What are the shipping options available?</span><span class="tab-icon icon-16"><i class="ri-add-line"></i></span></button>\
<div class="collapse" id="tab-3-mryzgy75tr2vi" data-bs-parent="#collapse-tab-mryzgy75559p7">\
<div class="pst-15">\
<p>We offer several shipping options, including Standard Shipping (5-7 business days), Express Shipping (2-3 business days), and Next Day Delivery (1 business day). Shipping costs are calculated at checkout based on your location and the selected shipping method.</p>\
</div>\
</div>\
</div>\
<div class="collapse-tab ptb-30 plr-15 plr-md-30 bst" data-animate="animate__fadeIn"><button type="button" class="w-100 d-flex align-items-center justify-content-between" data-bs-toggle="collapse" data-bs-target="#tab-4-mryzgy75zsh9h" aria-expanded="false"><span class="heading-weight">Can i change or cancel my order?</span><span class="tab-icon icon-16"><i class="ri-add-line"></i></span></button>\
<div class="collapse" id="tab-4-mryzgy75zsh9h" data-bs-parent="#collapse-tab-mryzgy75559p7">\
<div class="pst-15">\
<p>If you need to change or cancel your order, please contact us within 1 hour of placing the order. Once your order has been processed, we may not be able to make changes, but we'll do our best to assist you.</p>\
</div>\
</div>\
</div>\
<div class="collapse-tab ptb-30 plr-15 plr-md-30 bst" data-animate="animate__fadeIn"><button type="button" class="w-100 d-flex align-items-center justify-content-between" data-bs-toggle="collapse" data-bs-target="#tab-5-mryzgy75rlt3v" aria-expanded="false"><span class="heading-weight">What is your return and exchange policy?</span><span class="tab-icon icon-16"><i class="ri-add-line"></i></span></button>\
<div class="collapse" id="tab-5-mryzgy75rlt3v" data-bs-parent="#collapse-tab-mryzgy75559p7">\
<div class="pst-15">\
<p>We accept returns and exchanges within 30 days of the delivery date. Items must be unworn, unwashed, and in their original packaging with tags attached. To initiate a return, please visit our "returns &amp; exchanges" page and follow the instructions.</p>\
</div>\
</div>\
</div>\
<div class="collapse-tab ptb-30 plr-15 plr-md-30 bst" data-animate="animate__fadeIn"><button type="button" class="w-100 d-flex align-items-center justify-content-between" data-bs-toggle="collapse" data-bs-target="#tab-6-mryzgy75d473s" aria-expanded="false"><span class="heading-weight">How long does it take to process a return?</span><span class="tab-icon icon-16"><i class="ri-add-line"></i></span></button>\
<div class="collapse" id="tab-6-mryzgy75d473s" data-bs-parent="#collapse-tab-mryzgy75559p7">\
<div class="pst-15">\
<p>Once we receive your returned item, it typically takes 5-7 business days to process your return. You will receive a refund to your original payment method within 10 business days of processing.</p>\
</div>\
</div>\
</div>\
</div>\
</div>\
</div> \N \N 9
106 0 \N \N 10
104 Page disclaimers 0 <p></p>\
<section class="section-ptb">\
<div class="container">\
<div class="section-content" data-animate="animate__fadeIn">\
<p>Disclaimers</p>\
</div>\
</div>\
</section> \N \N 7
104 0 \N \N 9
104 0 \N \N 10
107 Shipping policy 0 <h6 class="number-sub-index font-18 animate__fadeIn animate__animated" data-animate="animate__fadeIn">Delivery</h6>\
<p class="mst-18 animate__fadeIn animate__animated" data-animate="animate__fadeIn">We strive to ensure prompt and reliable delivery of your orders. Orders are typically processed within 1-2 business days, and shipping times vary based on your location. Standard shipping usually takes 5-7 business days, while expedited options are available for faster delivery. You will receive a tracking number once your order has shipped so you can monitor its progress. Please note that delivery times may be affected by factors such as weather conditions or high order volumes. If you have any questions or need assistance, contact our support team.</p>\
<p class="p-bullets mst-16 animate__fadeIn animate__animated" data-animate="animate__fadeIn">Orders are processed within 1-2 business days.</p>\
<p class="p-bullets mst-1 animate__fadeIn animate__animated" data-animate="animate__fadeIn">Standard shipping takes 5-7 business days.</p>\
<p class="p-bullets mst-1 animate__fadeIn animate__animated" data-animate="animate__fadeIn">Expedited shipping options are available.</p>\
<p class="p-bullets mst-1 animate__fadeIn animate__animated" data-animate="animate__fadeIn">Track your order with the provided tracking number.</p>\
<h6 class="number-sub-index font-18 mst-18 animate__fadeIn animate__animated" data-animate="animate__fadeIn">Freight</h6>\
<p class="mst-18 animate__fadeIn animate__animated" data-animate="animate__fadeIn">Shipping costs vary based on your location and the weight of your order.</p>\
<p class="mst-6 animate__fadeIn animate__animated" data-animate="animate__fadeIn">We offer a range of shipping options to meet your needs, including standard, expedited, and overnight services. Shipping costs are calculated based on the weight, dimensions, and destination of your order. You will see the total shipping charge at checkout before you complete your purchase. We strive to provide the most cost-effective shipping methods while ensuring timely delivery. During checkout, you can choose the shipping option that best suits your needs. For large or heavy items, additional shipping fees may apply.</p>\
<p class="p-bullets mst-16 animate__fadeIn animate__animated" data-animate="animate__fadeIn">Shipping charges are shown at checkout before completing your purchase.</p>\
<p class="p-bullets mst-1 animate__fadeIn animate__animated" data-animate="animate__fadeIn">Choose from standard, expedited, or overnight shipping options.</p>\
<h6 class="number-sub-index font-18 mst-18 animate__fadeIn animate__animated" data-animate="animate__fadeIn">Dispatch</h6>\
<p class="mst-18 animate__fadeIn animate__animated" data-animate="animate__fadeIn">Orders are dispatched within 1-2 business days after being placed. We carefully prepare and package each order to ensure it arrives in perfect condition. Once your order is on its way, you will receive a confirmation email with a tracking number. This allows you to monitor the progress of your shipment. Please allow additional time during peak seasons or for custom orders. If there are any issues or delays with your shipment, our customer service team is here to help. For any questions or concerns, don't hesitate to reach out.</p>\
<p class="p-bullets mst-16 animate__fadeIn animate__animated" data-animate="animate__fadeIn">Orders are sent out within 1-2 business days.</p>\
<p class="p-bullets mst-1 animate__fadeIn animate__animated" data-animate="animate__fadeIn">Receive a tracking number once your order ships.</p>\
<p class="p-bullets mst-1 animate__fadeIn animate__animated" data-animate="animate__fadeIn">Allow extra time during busy periods.</p>\
<p class="p-bullets mst-1 animate__fadeIn animate__animated" data-animate="animate__fadeIn">Contact customer service for shipping issues.</p>\
<h6 class="number-sub-index font-18 mst-18 animate__fadeIn animate__animated" data-animate="animate__fadeIn">Postage</h6>\
<p class="mst-18 animate__fadeIn animate__animated" data-animate="animate__fadeIn">We cover the cost of standard postage for all domestic orders.</p>\
<p class="mst-6 animate__fadeIn animate__animated" data-animate="animate__fadeIn">For international shipments, postage costs are calculated based on the destination, weight, and dimensions of your package. You will be notified of the postage fees during checkout, and they will be added to your order total. We use reliable carriers to ensure your package reaches you safely and in a timely manner. Please be aware that customs fees or import taxes may apply, and these are the responsibility of the recipient. If you have any questions about international postage or need assistance, please contact our support team for help.</p>\
<p class="p-bullets mst-16 animate__fadeIn animate__animated" data-animate="animate__fadeIn">International postage fees are calculated during checkout.</p>\
<p class="p-bullets mst-1 animate__fadeIn animate__animated" data-animate="animate__fadeIn">Customs fees or import taxes are the recipient's responsibility.</p> \N \N 7
107 0 \N \N 9
107 0 \N \N 10
103 Frequently asked questions 0 <p></p>\
<section class="faqs section-pt">\
<div class="container">\
<div class="section-capture text-center">\
<div class="section-title" data-animate="animate__fadeIn">\
<h2 class="section-heading">Frequently asked questions</h2>\
</div>\
</div>\
<div class="faqs-collapse-group border-full border-radius" id="faqs-collapse-ms31c4orpvcus">\
<div class="other-tab ptb-15 plr-15" data-animate="animate__fadeIn"><a class="d-flex flex-wrap align-items-baseline" href="#faqs-collapse1-ms31c4orvb2h1" data-bs-toggle="collapse" aria-expanded="true"><span class="width-calc-16 heading-weight">How do I track my order?</span><span class="other-tab-icon width-16 icon-16"><i class="ri-add-line d-block lh-1"></i></span></a>\
<div class="collapse show" id="faqs-collapse1-ms31c4orvb2h1" data-bs-parent="#faqs-collapse-ms31c4orpvcus">\
<div class="pst-9">\
<p>You can track your order in your account.</p>\
</div>\
</div>\
</div>\
<div class="other-tab ptb-15 plr-15" data-animate="animate__fadeIn"><a class="d-flex flex-wrap align-items-baseline" href="#faqs-collapse2-ms31c4or4elpu" data-bs-toggle="collapse" aria-expanded="false"><span class="width-calc-16 heading-weight">What is your return policy?</span><span class="other-tab-icon width-16 icon-16"><i class="ri-add-line d-block lh-1"></i></span></a>\
<div class="collapse" id="faqs-collapse2-ms31c4or4elpu" data-bs-parent="#faqs-collapse-ms31c4orpvcus">\
<div class="pst-9">\
<p>We accept returns within policy terms.</p>\
</div>\
</div>\
</div>\
<div class="other-tab ptb-15 plr-15" data-animate="animate__fadeIn"><a class="d-flex flex-wrap align-items-baseline" href="#faqs-collapse3-ms31c4orbk0rg" data-bs-toggle="collapse" aria-expanded="false"><span class="width-calc-16 heading-weight">Do you offer international shipping?</span><span class="other-tab-icon width-16 icon-16"><i class="ri-add-line d-block lh-1"></i></span></a>\
<div class="collapse" id="faqs-collapse3-ms31c4orbk0rg" data-bs-parent="#faqs-collapse-ms31c4orpvcus">\
<div class="pst-9">\
<p>Yes, shipping options vary by country.</p>\
</div>\
</div>\
</div>\
<div class="other-tab ptb-15 plr-15" data-animate="animate__fadeIn"><a class="d-flex flex-wrap align-items-baseline" href="#faqs-collapse4-ms31c4or15adk" data-bs-toggle="collapse" aria-expanded="false"><span class="width-calc-16 heading-weight">Can I change my order after placing it?</span><span class="other-tab-icon width-16 icon-16"><i class="ri-add-line d-block lh-1"></i></span></a>\
<div class="collapse" id="faqs-collapse4-ms31c4or15adk" data-bs-parent="#faqs-collapse-ms31c4orpvcus">\
<div class="pst-9">\
<p>Contact support quickly after placing the order.</p>\
</div>\
</div>\
</div>\
</div>\
</div>\
</section>\
<section class="faqs-service section-pt text-center">\
<div class="container">\
<div class="row row-mtm">\
<div class="col-12 col-md-6" data-animate="animate__fadeIn">\
<div class="col-lg-10 col-xl-9 col-xxl-7 d-flex flex-column align-items-center mx-lg-auto"><span class="primary-color icon-24 width-80 height-80 d-flex align-items-center justify-content-center extra-bg meb-25 rounded-circle"><i class="ri-phone-line d-block lh-1"></i></span>\
<h6 class="font-18">Call the team</h6>\
<p class="mst-8">Get in touch with our support crew anytime for assistance.</p>\
</div>\
</div>\
<div class="col-12 col-md-6" data-animate="animate__fadeIn">\
<div class="col-lg-10 col-xl-9 col-xxl-7 d-flex flex-column align-items-center mx-lg-auto"><span class="primary-color icon-24 width-80 height-80 d-flex align-items-center justify-content-center extra-bg meb-25 rounded-circle"><i class="ri-user-line d-block lh-1"></i></span>\
<h6 class="font-18">Help team crew</h6>\
<p class="mst-8">Support squad dedicated to assisting with any issue.</p>\
</div>\
</div>\
</div>\
</div>\
</section>\
<section class="faqs section-ptb">\
<div class="container">\
<div class="section-capture text-center">\
<div class="section-title" data-animate="animate__fadeIn">\
<h2 class="section-heading">Common queries</h2>\
</div>\
</div>\
<div class="row row-mtm15" id="faqs-collapse-group-ms31c4orwuf68">\
<div class="other-tab" data-animate="animate__fadeIn">\
<div class="border-full border-radius"><a class="d-flex flex-wrap align-items-baseline ptb-15 plr-15" href="#faqs-collapse-group1-ms31c4or12hab" data-bs-toggle="collapse" aria-expanded="true"><span class="width-calc-16 heading-weight">How do I place an order?</span><span class="other-tab-icon width-16 icon-16"><i class="ri-add-line d-block lh-1"></i></span></a>\
<div class="collapse show" id="faqs-collapse-group1-ms31c4or12hab" data-bs-parent="#faqs-collapse-group-ms31c4orwuf68">\
<div class="ptb-15 plr-15 bst">\
<p>Browse products, add to cart and proceed to checkout.</p>\
</div>\
</div>\
</div>\
</div>\
<div class="other-tab" data-animate="animate__fadeIn">\
<div class="border-full border-radius"><a class="d-flex flex-wrap align-items-baseline ptb-15 plr-15" href="#faqs-collapse-group2-ms31c4oru9ylv" data-bs-toggle="collapse" aria-expanded="false"><span class="width-calc-16 heading-weight">How can I track my order status?</span><span class="other-tab-icon width-16 icon-16"><i class="ri-add-line d-block lh-1"></i></span></a>\
<div class="collapse" id="faqs-collapse-group2-ms31c4oru9ylv" data-bs-parent="#faqs-collapse-group-ms31c4orwuf68">\
<div class="ptb-15 plr-15 bst">\
<p>Use your tracking number in account or email link.</p>\
</div>\
</div>\
</div>\
</div>\
<div class="other-tab" data-animate="animate__fadeIn">\
<div class="border-full border-radius"><a class="d-flex flex-wrap align-items-baseline ptb-15 plr-15" href="#faqs-collapse-group3-ms31c4or5pwlx" data-bs-toggle="collapse" aria-expanded="false"><span class="width-calc-16 heading-weight">What shipping options are available?</span><span class="other-tab-icon width-16 icon-16"><i class="ri-add-line d-block lh-1"></i></span></a>\
<div class="collapse" id="faqs-collapse-group3-ms31c4or5pwlx" data-bs-parent="#faqs-collapse-group-ms31c4orwuf68">\
<div class="ptb-15 plr-15 bst">\
<p>Standard, express and next-day options are available.</p>\
</div>\
</div>\
</div>\
</div>\
</div>\
</div>\
</section> \N \N 7
103 0 \N \N 9
103 0 \N \N 10
109 Frequently asked questions 0 <p></p>\
<section class="faqs section-pt">\
<div class="container">\
<div class="section-capture text-center">\
<div class="section-title" data-animate="animate__fadeIn">\
<h2 class="section-heading">Frequently asked questions</h2>\
</div>\
</div>\
<div class="faqs-collapse-group border-full border-radius" id="faqs-collapse-ms31eajcsmw04">\
<div class="other-tab ptb-15 plr-15" data-animate="animate__fadeIn"><a class="d-flex flex-wrap align-items-baseline" href="#faqs-collapse1-ms31eajcrl44b" data-bs-toggle="collapse" aria-expanded="true"><span class="width-calc-16 heading-weight">How do I track my order?</span><span class="other-tab-icon width-16 icon-16"><i class="ri-add-line d-block lh-1"></i></span></a>\
<div class="collapse show" id="faqs-collapse1-ms31eajcrl44b" data-bs-parent="#faqs-collapse-ms31eajcsmw04">\
<div class="pst-9">\
<p>You can track your order in your account.</p>\
</div>\
</div>\
</div>\
<div class="other-tab ptb-15 plr-15" data-animate="animate__fadeIn"><a class="d-flex flex-wrap align-items-baseline" href="#faqs-collapse2-ms31eajct98vy" data-bs-toggle="collapse" aria-expanded="false"><span class="width-calc-16 heading-weight">What is your return policy?</span><span class="other-tab-icon width-16 icon-16"><i class="ri-add-line d-block lh-1"></i></span></a>\
<div class="collapse" id="faqs-collapse2-ms31eajct98vy" data-bs-parent="#faqs-collapse-ms31eajcsmw04">\
<div class="pst-9">\
<p>We accept returns within policy terms.</p>\
</div>\
</div>\
</div>\
<div class="other-tab ptb-15 plr-15" data-animate="animate__fadeIn"><a class="d-flex flex-wrap align-items-baseline" href="#faqs-collapse3-ms31eajc9dtaa" data-bs-toggle="collapse" aria-expanded="false"><span class="width-calc-16 heading-weight">Do you offer international shipping?</span><span class="other-tab-icon width-16 icon-16"><i class="ri-add-line d-block lh-1"></i></span></a>\
<div class="collapse" id="faqs-collapse3-ms31eajc9dtaa" data-bs-parent="#faqs-collapse-ms31eajcsmw04">\
<div class="pst-9">\
<p>Yes, shipping options vary by country.</p>\
</div>\
</div>\
</div>\
<div class="other-tab ptb-15 plr-15" data-animate="animate__fadeIn"><a class="d-flex flex-wrap align-items-baseline" href="#faqs-collapse4-ms31eajconybz" data-bs-toggle="collapse" aria-expanded="false"><span class="width-calc-16 heading-weight">Can I change my order after placing it?</span><span class="other-tab-icon width-16 icon-16"><i class="ri-add-line d-block lh-1"></i></span></a>\
<div class="collapse" id="faqs-collapse4-ms31eajconybz" data-bs-parent="#faqs-collapse-ms31eajcsmw04">\
<div class="pst-9">\
<p>Contact support quickly after placing the order.</p>\
</div>\
</div>\
</div>\
</div>\
</div>\
</section>\
<section class="faqs-service section-pt text-center">\
<div class="container">\
<div class="row row-mtm">\
<div class="col-12 col-md-6" data-animate="animate__fadeIn">\
<div class="col-lg-10 col-xl-9 col-xxl-7 d-flex flex-column align-items-center mx-lg-auto"><span class="primary-color icon-24 width-80 height-80 d-flex align-items-center justify-content-center extra-bg meb-25 rounded-circle"><i class="ri-phone-line d-block lh-1"></i></span>\
<h6 class="font-18">Call the team</h6>\
<p class="mst-8">Get in touch with our support crew anytime for assistance.</p>\
</div>\
</div>\
<div class="col-12 col-md-6" data-animate="animate__fadeIn">\
<div class="col-lg-10 col-xl-9 col-xxl-7 d-flex flex-column align-items-center mx-lg-auto"><span class="primary-color icon-24 width-80 height-80 d-flex align-items-center justify-content-center extra-bg meb-25 rounded-circle"><i class="ri-user-line d-block lh-1"></i></span>\
<h6 class="font-18">Help team crew</h6>\
<p class="mst-8">Support squad dedicated to assisting with any issue.</p>\
</div>\
</div>\
</div>\
</div>\
</section>\
<section class="faqs section-ptb">\
<div class="container">\
<div class="section-capture text-center">\
<div class="section-title" data-animate="animate__fadeIn">\
<h2 class="section-heading">Common queries</h2>\
</div>\
</div>\
<div class="row row-mtm15" id="faqs-collapse-group-ms31eajczfuws">\
<div class="other-tab" data-animate="animate__fadeIn">\
<div class="border-full border-radius"><a class="d-flex flex-wrap align-items-baseline ptb-15 plr-15" href="#faqs-collapse-group1-ms31eajcich6l" data-bs-toggle="collapse" aria-expanded="true"><span class="width-calc-16 heading-weight">How do I place an order?</span><span class="other-tab-icon width-16 icon-16"><i class="ri-add-line d-block lh-1"></i></span></a>\
<div class="collapse show" id="faqs-collapse-group1-ms31eajcich6l" data-bs-parent="#faqs-collapse-group-ms31eajczfuws">\
<div class="ptb-15 plr-15 bst">\
<p>Browse products, add to cart and proceed to checkout.</p>\
</div>\
</div>\
</div>\
</div>\
<div class="other-tab" data-animate="animate__fadeIn">\
<div class="border-full border-radius"><a class="d-flex flex-wrap align-items-baseline ptb-15 plr-15" href="#faqs-collapse-group2-ms31eajcdrfoz" data-bs-toggle="collapse" aria-expanded="false"><span class="width-calc-16 heading-weight">How can I track my order status?</span><span class="other-tab-icon width-16 icon-16"><i class="ri-add-line d-block lh-1"></i></span></a>\
<div class="collapse" id="faqs-collapse-group2-ms31eajcdrfoz" data-bs-parent="#faqs-collapse-group-ms31eajczfuws">\
<div class="ptb-15 plr-15 bst">\
<p>Use your tracking number in account or email link.</p>\
</div>\
</div>\
</div>\
</div>\
<div class="other-tab" data-animate="animate__fadeIn">\
<div class="border-full border-radius"><a class="d-flex flex-wrap align-items-baseline ptb-15 plr-15" href="#faqs-collapse-group3-ms31eajcbnz1r" data-bs-toggle="collapse" aria-expanded="false"><span class="width-calc-16 heading-weight">What shipping options are available?</span><span class="other-tab-icon width-16 icon-16"><i class="ri-add-line d-block lh-1"></i></span></a>\
<div class="collapse" id="faqs-collapse-group3-ms31eajcbnz1r" data-bs-parent="#faqs-collapse-group-ms31eajczfuws">\
<div class="ptb-15 plr-15 bst">\
<p>Standard, express and next-day options are available.</p>\
</div>\
</div>\
</div>\
</div>\
</div>\
</div>\
</section> \N \N 7
109 0 \N \N 9
109 0 \N \N 10
111 Payment Policy 0 <p></p>\
<section class="payment-policy">\
<div class="container">\
<div class="question-index">\
<h6 class="font-18" data-animate="animate__fadeIn">Secure transaction rules and payment process</h6>\
<p class="mst-18" data-animate="animate__fadeIn">Discover the steps to ensure safe and seamless payments on our platform.</p>\
<p class="p-bullets mst-16">Ensure easy and secure transactions.</p>\
<p class="p-bullets mst-1">Follow steps for seamless payments.</p>\
<h6 class="font-18 mst-18" data-animate="animate__fadeIn">Top payment options</h6>\
<p class="p-bullets mst-18" data-animate="animate__fadeIn"><span class="heading-color heading-weight mer-4">Visa:</span> Secure Visa card payments processed quickly and easily.</p>\
<p class="p-bullets mst-1" data-animate="animate__fadeIn"><span class="heading-color heading-weight mer-4">Paypal:</span> Handling payments through paypal for secure transactions.</p>\
<a class="btn-style secondary-btn mst-23" href="../../sazinies-ar-mums" data-animate="animate__fadeIn">Know more</a>\
<div class="pst-30 mst-30 bst" data-animate="animate__fadeIn"></div>\
<h6 class="question-sub-index font-18" data-animate="animate__fadeIn">What payment methods can I use?</h6>\
<p class="p-bullets mst-18">We accept major cards, digital wallets and bank transfers.</p>\
<h6 class="question-sub-index font-18 mst-18">What should I do if my payment fails?</h6>\
<p class="p-bullets mst-18">Retry the payment and check your details. Contact support if needed.</p>\
</div>\
</div>\
</section> \N \N 7
111 0 \N \N 9
111 0 \N \N 10
108 Return Policy 0 <p></p>\
<section class="return-policy section-ptb">\
<div class="container">\
<div class="number-index" id="faqs-collapse-group-ms30yf9ddm166">\
<h6 class="font-18" data-animate="animate__fadeIn">Streamlined returns for easy solutions</h6>\
<p class="mst-18" data-animate="animate__fadeIn">Our return policy simplifies the process, ensuring fast and easy returns. Follow our clear steps for refunds, exchanges, or store credits.</p>\
<a class="btn-style secondary-btn mst-23" href="../../veikals" data-animate="animate__fadeIn">Shop now</a>\
<div class="pst-30 mst-30 bst" data-animate="animate__fadeIn"></div>\
<div class="other-tab" data-animate="animate__fadeIn"><a class="d-flex flex-wrap align-items-baseline" href="#faqs-collapse-group1-ms30yf9d6oopz" data-bs-toggle="collapse" aria-expanded="true"><span class="width-calc-16 font-18 heading-weight">Refund process steps?</span><span class="other-tab-icon width-16 icon-16"><i class="ri-add-line d-block lh-1"></i></span></a>\
<div class="collapse show" id="faqs-collapse-group1-ms30yf9d6oopz" data-bs-parent="#faqs-collapse-group-ms30yf9ddm166">\
<div class="pst-18">\
<p>Start your refund by logging into your account and following the return steps.</p>\
</div>\
</div>\
</div>\
<div class="pst-30 mst-30 bst" data-animate="animate__fadeIn"></div>\
<div class="other-tab" data-animate="animate__fadeIn"><a class="d-flex flex-wrap align-items-baseline" href="#faqs-collapse-group2-ms30yf9d932hq" data-bs-toggle="collapse" aria-expanded="false"><span class="width-calc-16 font-18 heading-weight">How to exchange?</span><span class="other-tab-icon width-16 icon-16"><i class="ri-add-line d-block lh-1"></i></span></a>\
<div class="collapse" id="faqs-collapse-group2-ms30yf9d932hq" data-bs-parent="#faqs-collapse-group-ms30yf9ddm166">\
<div class="pst-18">\
<p>Choose exchange during your return request and select the replacement product.</p>\
</div>\
</div>\
</div>\
<div class="pst-30 mst-30 bst" data-animate="animate__fadeIn"></div>\
<div class="other-tab" data-animate="animate__fadeIn"><a class="d-flex flex-wrap align-items-baseline" href="#faqs-collapse-group3-ms30yf9d9qm48" data-bs-toggle="collapse" aria-expanded="false"><span class="width-calc-16 font-18 heading-weight">How to cancel?</span><span class="other-tab-icon width-16 icon-16"><i class="ri-add-line d-block lh-1"></i></span></a>\
<div class="collapse" id="faqs-collapse-group3-ms30yf9d9qm48" data-bs-parent="#faqs-collapse-group-ms30yf9ddm166">\
<div class="pst-18">\
<p>Cancel orders before shipping, or create a return request after delivery.</p>\
</div>\
</div>\
</div>\
<div class="pst-30 mst-30 bst" data-animate="animate__fadeIn"></div>\
<h6 class="font-18" data-animate="animate__fadeIn"><i class="ri-double-quotes-l icon-32 mer-4"></i>Quality service shapes how we value returns</h6>\
<p class="mst-18" data-animate="animate__fadeIn">We focus on clear instructions and timely support so every return stays simple and stress-free.</p>\
</div>\
</div>\
</section> \N \N 7
108 0 \N \N 9
108 0 \N \N 10
27 0 <p></p>\
<section class="terms-rules">\
<div class="container">\
<div class="number-index">\
<h6 class="number-sub-index font-18" data-animate="animate__fadeIn">Restriction</h6>\
<p class="mst-18" data-animate="animate__fadeIn">Access to our site is granted for personal use only.</p>\
<p class="mst-6" data-animate="animate__fadeIn">Unauthorized use may result in account restrictions.</p>\
<div class="pst-30 mst-30 bst" data-animate="animate__fadeIn"></div>\
<h6 class="number-sub-index font-18" data-animate="animate__fadeIn">Usage rights</h6>\
<p class="mst-18" data-animate="animate__fadeIn">Access and use of services are granted under specific conditions.</p>\
<div class="pst-30 mst-30 bst" data-animate="animate__fadeIn"></div>\
<h6 class="number-sub-index font-18" data-animate="animate__fadeIn">Liability limits</h6>\
<p class="mst-18" data-animate="animate__fadeIn">We are not liable for indirect damages to the extent permitted by law.</p>\
</div>\
</div>\
</section> \N \N 7
27 0 \N \N 9
27 0 \N \N 10
26 0 <p></p>\
<section class="cookie">\
<div class="container">\
<div class="number-index">\
<p data-animate="animate__fadeIn">We use cookies to improve your browsing experience and personalize content.</p>\
<p class="mst-6" data-animate="animate__fadeIn">You can adjust cookie settings in your browser.</p>\
<div class="pst-30 mst-30 bst" data-animate="animate__fadeIn"></div>\
<h6 class="number-sub-index font-18" data-animate="animate__fadeIn">What is a cookie?</h6>\
<p class="mst-18" data-animate="animate__fadeIn">A cookie is a small data file stored on your device by a website.</p>\
<div class="pst-30 mst-30 bst" data-animate="animate__fadeIn"></div>\
<h6 class="number-sub-index font-18" data-animate="animate__fadeIn">Types of cookies on this site</h6>\
<h6 class="p-number font-18 mst-20" data-animate="animate__fadeIn">Essential function cookies</h6>\
<p class="mst-18" data-animate="animate__fadeIn">Required for core website functionality and security.</p>\
<h6 class="p-number font-18 mst-18" data-animate="animate__fadeIn">Analytics tracking cookies</h6>\
<p class="mst-18" data-animate="animate__fadeIn">Used to analyze behavior and improve site performance.</p>\
</div>\
</div>\
</section> \N \N 7
26 0 \N \N 9
26 0 \N \N 10
110 Shipping Policy 0 <p></p>\
<section class="shipping-policy">\
<div class="container">\
<div class="number-index">\
<h6 class="number-sub-index font-18" data-animate="animate__fadeIn">Delivery</h6>\
<p class="mst-18" data-animate="animate__fadeIn">Orders are processed within 1-2 business days and shipped with tracking.</p>\
<p class="p-bullets mst-16" data-animate="animate__fadeIn">Standard shipping takes 5-7 business days.</p>\
<p class="p-bullets mst-1" data-animate="animate__fadeIn">Expedited shipping options are available.</p>\
<h6 class="number-sub-index font-18 mst-18" data-animate="animate__fadeIn">Freight</h6>\
<p class="mst-18" data-animate="animate__fadeIn">Shipping costs vary by location and order weight.</p>\
<p class="p-bullets mst-16" data-animate="animate__fadeIn">Charges are shown during checkout.</p>\
<h6 class="number-sub-index font-18 mst-18" data-animate="animate__fadeIn">Dispatch</h6>\
<p class="mst-18" data-animate="animate__fadeIn">You will receive a tracking number after dispatch.</p>\
</div>\
</div>\
</section> \N \N 7
110 0 \N \N 9
110 0 \N \N 10
112 Privacy Policy 0 <p></p>\
<section class="privacy-policy">\
<div class="container">\
<div class="number-index">\
<p class="p-bullets" data-animate="animate__fadeIn">We use secure methods to store and manage your sensitive information.</p>\
<p class="p-bullets mst-1" data-animate="animate__fadeIn">Your data is used only to improve your experience.</p>\
<p class="p-bullets mst-1" data-animate="animate__fadeIn">We do not share your details without your consent.</p>\
<h6 class="number-sub-index font-18 mst-18" data-animate="animate__fadeIn">Liability</h6>\
<p class="mst-18" data-animate="animate__fadeIn">We protect your data with industry best practices.</p>\
<div class="pst-30 mst-30 bst" data-animate="animate__fadeIn"></div>\
<h6 class="number-sub-index font-18" data-animate="animate__fadeIn">Trusted ways</h6>\
<p class="p-number mst-18" data-animate="animate__fadeIn">Visa: Secure Visa card payments processed quickly and easily.</p>\
<p class="p-number mst-6" data-animate="animate__fadeIn">Paypal: Secure digital wallet payments.</p>\
<div class="pst-30 mst-30 bst" data-animate="animate__fadeIn"></div>\
<h6 class="number-sub-index font-18" data-animate="animate__fadeIn">How do we handle your data?</h6>\
<p class="mst-18" data-animate="animate__fadeIn">Learn how we collect, secure and process your personal data.</p>\
<a class="btn-style secondary-btn mst-23" href="../../sazinies-ar-mums" data-animate="animate__fadeIn">Know more</a></div>\
</div>\
</section> \N \N 7
112 0 \N \N 9
112 0 \N \N 10
113 About us 0 <p></p>\
<section class="about-us">\
<div class="container">\
<div class="section-capture text-center">\
<div class="section-title" data-animate="animate__fadeIn">\
<h2 class="section-heading">About story</h2>\
</div>\
</div>\
<div class="about-banner" data-animate="animate__fadeIn">\
<div class="banner-hover"><span class="d-block banner-img br-hidden"><img src="../../files/article/2026-07/19c1fe89165436a0f293b444d126c3be5566f874.jpg" class="w-100 img-fluid" alt="about-banner1" /></span></div>\
</div>\
<div class="about-service section-pt text-center">\
<div class="row row-mtm justify-content-md-center">\
<div class="col-12 col-lg-4" data-animate="animate__fadeIn">\
<div class="col-xxl-10 mx-xxl-auto">\
<h6 class="font-18">5000+ Happy customer</h6>\
<p class="mst-18">Absolutely delighted with the service and support.</p>\
</div>\
</div>\
<div class="col-12 col-lg-4" data-animate="animate__fadeIn">\
<div class="col-xxl-10 mx-xxl-auto">\
<h6 class="font-18">29+ Awards won</h6>\
<p class="mst-18">Recognized for quality, innovation and customer care.</p>\
</div>\
</div>\
<div class="col-12 col-lg-4" data-animate="animate__fadeIn">\
<div class="col-xxl-10 mx-xxl-auto">\
<h6 class="font-18">40+ years of experiences</h6>\
<p class="mst-18">Long-term expertise with a modern approach to growth.</p>\
</div>\
</div>\
</div>\
</div>\
</div>\
</section>\
<div class="about-us-banner section-ptb">\
<div class="container">\
<div class="about-banner" data-animate="animate__fadeIn">\
<div class="banner-hover"><span class="d-block banner-img br-hidden"><img src="../../files/article/2026-07/19c1fe89165436a0f293b444d126c3be5566f874.jpg" class="w-100 img-fluid" alt="about-banner2" /></span></div>\
</div>\
</div>\
</div>\
<section class="about-service section-pt text-center">\
<div class="container">\
<div class="row row-mtm justify-content-md-center">\
<div class="col-12 col-lg-6" data-animate="animate__fadeIn">\
<div class="col-lg-10 col-xl-9 col-xxl-7 mx-lg-auto">\
<h6 class="font-18">Leading with innovation since 1982</h6>\
<p class="mst-18">We blend experience with modern solutions to deliver strong results.</p>\
</div>\
</div>\
<div class="col-12 col-lg-6" data-animate="animate__fadeIn">\
<div class="col-lg-10 col-xl-9 col-xxl-7 mx-lg-auto">\
<h6 class="font-18">Transforming ideas into success</h6>\
<p class="mst-18">We turn clear vision and integrity into meaningful outcomes.</p>\
</div>\
</div>\
</div>\
</div>\
</section>\
<section class="about-team section-ptb">\
<div class="container">\
<div class="section-capture text-center">\
<div class="section-title" data-animate="animate__fadeIn">\
<h2 class="section-heading">Our team</h2>\
</div>\
</div>\
<div class="row row-mtm text-center">\
<div class="col-6 col-lg-3" data-animate="animate__fadeIn">\
<div class="about-team-content banner-hover">\
<div class="about-team-img"><span class="d-block banner-img br-hidden"><img src="../../files/article/2026-07/f816f373d0847572941471765a70a0652f47f6cd.jpg" class="w-100 img-fluid" alt="about-team1" /></span></div>\
<div class="about-team-info pst-25">\
<h6 class="font-18">Team member 1</h6>\
<span class="d-block mst-6">Web designer</span></div>\
</div>\
</div>\
<div class="col-6 col-lg-3" data-animate="animate__fadeIn">\
<div class="about-team-content banner-hover">\
<div class="about-team-img"><span class="d-block banner-img br-hidden"><img src="../../files/article/2026-07/f816f373d0847572941471765a70a0652f47f6cd.jpg" class="w-100 img-fluid" alt="about-team2" /></span></div>\
<div class="about-team-info pst-25">\
<h6 class="font-18">Team member 2</h6>\
<span class="d-block mst-6">Support staff</span></div>\
</div>\
</div>\
<div class="col-6 col-lg-3" data-animate="animate__fadeIn">\
<div class="about-team-content banner-hover">\
<div class="about-team-img"><span class="d-block banner-img br-hidden"><img src="../../files/article/2026-07/f816f373d0847572941471765a70a0652f47f6cd.jpg" class="w-100 img-fluid" alt="about-team3" /></span></div>\
<div class="about-team-info pst-25">\
<h6 class="font-18">Team member 3</h6>\
<span class="d-block mst-6">Deputy sale</span></div>\
</div>\
</div>\
<div class="col-6 col-lg-3" data-animate="animate__fadeIn">\
<div class="about-team-content banner-hover">\
<div class="about-team-img"><span class="d-block banner-img br-hidden"><img src="../../files/article/2026-07/f816f373d0847572941471765a70a0652f47f6cd.jpg" class="w-100 img-fluid" alt="about-team4" /></span></div>\
<div class="about-team-info pst-25">\
<h6 class="font-18">Team member 4</h6>\
<span class="d-block mst-6">Policy member</span></div>\
</div>\
</div>\
</div>\
</div>\
</section> \N \N 7
113 0 \N \N 9
113 0 \N \N 10
3 Let nature take care of your body veikals Shop now 0 Natural cosmetic \N \N 7
3 0 \N \N 9
3 0 \N \N 10
4 Where every glow look feels right veikals Shop now 0 Crafted radiance \N \N 7
4 0 \N \N 9
4 0 \N \N 10
97 Natural brilliance veikals Iepērcies! 0 Beauty essentials made personal \N \N 7
97 0 \N \N 9
97 0 \N \N 10
23 Testimonial BG 0 \N \N 7
23 0 \N \N 9
23 0 \N \N 10

View File

@ -0,0 +1,56 @@
1 1 Clasificators Type for defining aditional classificator groups 0 0 0 0 0 0
2 1 MailTypes Classificator group for mail constructor 0 0 1349393007 1349393007 0 0
3 2 Mail 2 Password recovery 2 0 1493484355 1784727435 0 0
264 1 type for Text manager 0 0 1442260988 1442260988 0 0
395 2 Mail 1 New user registration 1 0 1560190614 1784727447 0 0
398 1 PHP_CONST Php constantes 0 0 1579170870 1579170870 0 0
407 2 Mail 3 Newsletter mail 3 0 1586689894 1784727789 0 0
408 2 Mail 4 System notices mails 4 0 1586689915 1784727799 0 0
409 2 Mail 5 Order confirmation 5 0 1588323119 1784728370 0 0
417 2 Mail 16 System news 16 0 1595239448 1784728602 0 0
423 1 SVG Icons 0 0 1603401042 1603401113 0 0
1417 423 ICO_BELL <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-bell"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"></path><path d="M13.73 21a2 2 0 0 1-3.46 0"></path></svg> 1 0 1605892768 1605892768 0 0
1418 423 ICO_GEAR_SETTINGS <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-settings text-white"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg> 2 0 1605892797 1605892797 0 0
1419 423 ICO_BOX <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-box text-white"><path d="M12.89 1.45l8 4A2 2 0 0 1 22 7.24v9.53a2 2 0 0 1-1.11 1.79l-8 4a2 2 0 0 1-1.79 0l-8-4a2 2 0 0 1-1.1-1.8V7.24a2 2 0 0 1 1.11-1.79l8-4a2 2 0 0 1 1.78 0z"></path><polyline points="2.32 6.16 12 11 21.68 6.16"></polyline><line x1="12" y1="22.76" x2="12" y2="11"></line></svg> 3 0 1605892815 1605892815 0 0
1420 423 ICO_PLAY <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-airplay text-white"><path d="M5 17H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-1"></path><polygon points="12 15 17 21 7 21 12 15"></polygon></svg> 4 0 1605892828 1605892828 0 0
1421 423 ICO_MSG <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-message-square"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg> 5 0 1605892841 1605892841 0 0
1422 423 ICO_CALENDAR <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar text-white"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg> 6 0 1605892856 1605892856 0 0
1423 423 ICO_CART <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-shopping-cart"><circle cx="9" cy="21" r="1"></circle><circle cx="20" cy="21" r="1"></circle><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"></path></svg> 7 0 1605892868 1605892868 0 0
1442 264 Base Categories Type for text manager base categories 1 0 1777292392 1783670965 0 0
1443 264 Sub Categories Type for text manager sub categories under "Base Categories" 2 0 1777292505 1783670968 0 0
1444 1 Payment Methods 0 0 1777293701 1777293701 0 0
1445 1 Shipping method 0 0 1777293757 1777293757 0 0
1446 1 Payment cards 0 0 1777293769 1777293769 0 0
1447 1446 aexpress bank card 3 0 1777293810 1777293810 0 0
1448 1446 master bank card 2 0 1777293859 1777293859 0 0
1449 1446 Visa Bank 1 0 1777293874 1777293874 0 0
1450 1444 Credit Card You will be redirect to ... to complete the payment 2 0 1777293897 1777293897 0 0
1451 1444 Bank Transfer After completing your order we will get to you through email with ... 1 0 1777293914 1783330859 0 0
1452 1445 Omniva ... 3 0 1777293940 1777293940 0 0
1453 1445 Pasta stacija 2 0 1777293947 1777293947 0 0
1454 1445 International Shipping 1 0 1777293954 1777293954 0 0
1455 1 Omniva Latvija 0 0 1777293981 1777293981 0 0
1456 264 Index Hero slider Hero slider section 5 0 1781253743 1783670981 0 0
1457 264 Index service area Service area section 6 0 1781259467 1783691500 0 0
1458 264 Index About product About product section 7 0 1781260357 1783691539 0 0
1459 264 Index Testimonial Testimonial section data 8 0 1781261003 1783691559 0 0
1460 264 Index Testimonial BG Testimonial section background 9 0 1781261032 1783691572 0 0
1461 264 Index About text section About text section data 10 0 1781538491 1783691576 0 0
1462 264 Page - Cookies Page content 17 0 1781696705 1784897901 0 0
1463 264 Page - Terms & conditions Page content 16 0 1781697457 1784761321 0 0
1464 264 Page - Contact us Page content / Contact service 15 0 1781769311 1784897884 0 0
1465 1 Country Countries 0 0 1783330309 1783330325 0 0
1466 1 Product size 0 0 1783330347 1783330347 0 0
1467 264 Subscribe popup bg Subscribe popup background image. 20 0 1784012344 1784012344 0 0
1468 264 Global breadcrumbs bg Global breadcrumbs background image. 25 0 1784271982 1784271989 0 0
1469 264 Shop side banner Shop side banner 30 0 1784272009 1784272009 0 0
1470 264 COLLECTION_BANNER Shop collection banner image 1420x330 35 0 1784625101 1784625101 0 0
1471 2 Mail 6 Order receipt 6 0 1784728598 1784728598 0 0
1472 264 Page - About us Page content 36 0 1784759081 1784759081 0 0
1473 264 Page - FAQ Page content 37 0 1784759095 1784759095 0 0
1474 264 Page - Disclaimers Page content 38 0 1784760222 1784760570 0 0
1476 264 Page - Privacy Policy Page content 39 0 1784893086 1784893086 0 0
1477 264 Page - Payment Terms Page content 40 0 1784893107 1784893107 0 0
1478 264 Page - Return Policy Page content 41 0 1784893126 1784893126 0 0
1479 264 Page - Shipping Policy Page content 42 0 1784893148 1784893148 0 0
1480 264 Page - Copyrights Page content 47 0 1784897819 1784897819 0 0

View File

@ -0,0 +1,3 @@
1 asdasd asd 2 1 asd 0 0 1777291051
2 delivery 2 delivery 2 3 24 delivery 2 descirption 1 0 1783022299
3 asd asd 1 1 asd 0 0 1783327361

View File

@ -0,0 +1,215 @@
1 1 0 1 1777291512 1783341083
3 100 0 0 1777291633 1784536421
100 1 0 0 1772889600 1783341076
101 100 0 0 1772889600 1772889600
102 100 0 0 1772889600 1772889600
103 100 0 0 1772889600 1772889600
104 100 0 0 1772889600 1772889600
105 100 0 0 1772889600 1772889600
106 100 0 0 1772889600 1772889600
107 100 0 0 1772889600 1772889600
108 100 0 0 1772889600 1772889600
109 100 0 0 1772889600 1772889600
110 100 0 0 1772889600 1772889600
111 100 0 0 1772889600 1772889600
112 100 0 0 1772889600 1772889600
113 100 0 0 1772889600 1772889600
114 100 0 0 1772889600 1772889600
115 100 0 0 1772889600 1772889600
116 100 0 0 1772889600 1772889600
117 100 0 0 1772889600 1772889600
200 1 0 0 1772889600 1783341076
201 200 0 0 1772889600 1772889600
202 200 0 0 1772889600 1772889600
203 200 0 0 1772889600 1772889600
204 200 0 0 1772889600 1772889600
205 200 0 0 1772889600 1772889600
206 200 0 0 1772889600 1772889600
207 200 0 0 1772889600 1772889600
208 200 0 0 1772889600 1772889600
209 200 0 0 1772889600 1772889600
210 200 0 0 1772889600 1772889600
211 200 0 0 1772889600 1772889600
212 200 0 0 1772889600 1772889600
213 200 0 0 1772889600 1772889600
300 1 0 0 1772889600 1783341076
301 300 0 0 1772889600 1772889600
302 300 0 0 1772889600 1772889600
303 300 0 0 1772889600 1772889600
400 1 0 0 1772889600 1783341076
401 400 0 0 1772889600 1772889600
402 400 0 0 1772889600 1772889600
403 400 0 0 1772889600 1772889600
404 400 0 0 1772889600 1772889600
405 400 0 0 1772889600 1772889600
406 400 0 0 1772889600 1772889600
407 400 0 0 1772889600 1772889600
408 400 0 0 1772889600 1772889600
500 1 0 0 1772889600 1783341076
501 500 0 0 1772889600 1772889600
502 500 0 0 1772889600 1772889600
503 500 0 0 1772889600 1772889600
504 500 0 0 1772889600 1772889600
505 500 0 0 1772889600 1772889600
506 500 0 0 1772889600 1772889600
507 500 0 0 1772889600 1772889600
508 500 0 0 1772889600 1772889600
509 500 0 0 1772889600 1772889600
600 1 0 0 1772889600 1783341076
601 600 0 0 1772889600 1772889600
602 600 0 0 1772889600 1772889600
603 600 0 0 1772889600 1772889600
604 600 0 0 1772889600 1772889600
700 1 0 0 1772889600 1783341076
701 700 0 0 1772889600 1772889600
702 700 0 0 1772889600 1772889600
703 700 0 0 1772889600 1772889600
704 700 0 0 1772889600 1772889600
800 1 0 0 1772889600 1783341076
801 800 0 0 1772889600 1772889600
802 800 0 0 1772889600 1772889600
803 800 0 0 1772889600 1772889600
900 1 0 0 1772889600 1783341076
901 900 0 0 1772889600 1772889600
902 900 0 0 1772889600 1772889600
903 900 0 0 1772889600 1772889600
904 900 0 0 1772889600 1772889600
905 900 0 0 1772889600 1772889600
906 900 0 0 1772889600 1772889600
1000 1 0 0 1772889600 1783341076
1001 1000 0 0 1772889600 1772889600
1002 1000 0 0 1772889600 1772889600
1003 1000 0 0 1772889600 1772889600
1004 1000 0 0 1772889600 1772889600
1005 1000 0 0 1772889600 1772889600
1100 1 0 0 1772889600 1783341076
1101 1100 0 0 1772889600 1772889600
1102 1100 0 0 1772889600 1772889600
1103 1100 0 0 1772889600 1772889600
1104 1100 0 0 1772889600 1772889600
1105 1100 0 0 1772889600 1772889600
1106 1100 0 0 1772889600 1772889600
1200 1 0 0 1772889600 1783341076
1201 1200 0 0 1772889600 1772889600
1202 1200 0 0 1772889600 1772889600
1203 1200 0 0 1772889600 1772889600
1300 1 0 0 1772889600 1783341076
1301 1300 0 0 1772889600 1772889600
1302 1300 0 0 1772889600 1772889600
1303 1300 0 0 1772889600 1772889600
1400 1 0 0 1772889600 1783341076
1401 1400 0 0 1772889600 1772889600
1402 1400 0 0 1772889600 1772889600
1403 1400 0 0 1772889600 1772889600
1404 1400 0 0 1772889600 1772889600
1405 1400 0 0 1772889600 1772889600
1406 1400 0 0 1772889600 1772889600
1407 1400 0 0 1772889600 1772889600
1408 1400 0 0 1772889600 1772889600
1500 1 0 0 1772889600 1783341076
1501 1500 0 0 1772889600 1772889600
1502 1500 0 0 1772889600 1772889600
1503 1500 0 0 1772889600 1772889600
1504 1500 0 0 1772889600 1772889600
1505 1500 0 0 1772889600 1772889600
1506 1500 0 0 1772889600 1772889600
1507 1500 0 0 1772889600 1772889600
1600 1 0 0 1772889600 1783341076
1601 1600 0 0 1772889600 1772889600
1602 1600 0 0 1772889600 1772889600
1603 1600 0 0 1772889600 1772889600
1604 1600 0 0 1772889600 1772889600
1700 1 0 0 1772889600 1783341076
1701 1700 0 0 1772889600 1772889600
1702 1700 0 0 1772889600 1772889600
1703 1700 0 0 1772889600 1772889600
1704 1700 0 0 1772889600 1772889600
1705 1700 0 0 1772889600 1772889600
1706 1700 0 0 1772889600 1772889600
1707 1700 0 0 1772889600 1772889600
1800 1 0 0 1772889600 1783341076
1801 1800 0 0 1772889600 1772889600
1802 1800 0 0 1772889600 1772889600
1803 1800 0 0 1772889600 1772889600
1804 1800 0 0 1772889600 1772889600
1805 1800 0 0 1772889600 1772889600
1806 1800 0 0 1772889600 1772889600
1807 1800 0 0 1772889600 1772889600
1808 1800 0 0 1772889600 1772889600
1809 1800 0 0 1772889600 1772889600
1810 1800 0 0 1772889600 1772889600
1811 1800 0 0 1772889600 1772889600
1900 1 0 0 1772889600 1783341076
1901 1900 0 0 1772889600 1772889600
1902 1900 0 0 1772889600 1772889600
1903 1900 0 0 1772889600 1772889600
1904 1900 0 0 1772889600 1772889600
1905 1900 0 0 1772889600 1772889600
1906 1900 0 0 1772889600 1772889600
1907 1900 0 0 1772889600 1772889600
2000 1 0 0 1772889600 1783341076
2001 2000 0 0 1772889600 1772889600
2002 2000 0 0 1772889600 1772889600
2003 2000 0 0 1772889600 1772889600
2004 2000 0 0 1772889600 1772889600
2005 2000 0 0 1772889600 1772889600
2006 2000 0 0 1772889600 1772889600
2007 2000 0 0 1772889600 1772889600
2100 1 0 0 1772889600 1783341076
2101 2100 0 0 1772889600 1772889600
2102 2100 0 0 1772889600 1772889600
2103 2100 0 0 1772889600 1772889600
2104 2100 0 0 1772889600 1772889600
2105 2100 0 0 1772889600 1772889600
2106 2100 0 0 1772889600 1772889600
2200 1 0 0 1772889600 1783341076
2201 2200 0 0 1772889600 1772889600
2202 2200 0 0 1772889600 1772889600
2203 2200 0 0 1772889600 1772889600
2204 2200 0 0 1772889600 1772889600
2205 2200 0 0 1772889600 1772889600
2206 2200 0 0 1772889600 1772889600
2300 1 0 0 1772889600 1783341076
2301 2300 0 0 1772889600 1772889600
2302 2300 0 0 1772889600 1772889600
2303 2300 0 0 1772889600 1772889600
2304 2300 0 0 1772889600 1772889600
2400 1 0 0 1772889600 1783341076
2401 2400 0 0 1772889600 1772889600
2402 2400 0 0 1772889600 1772889600
2403 2400 0 0 1772889600 1772889600
2404 2400 0 0 1772889600 1772889600
2405 2400 0 0 1772889600 1772889600
2500 1 0 0 1772889600 1783341076
2501 2500 0 0 1772889600 1772889600
2502 2500 0 0 1772889600 1772889600
2503 2500 0 0 1772889600 1772889600
2504 2500 0 0 1772889600 1772889600
2505 2500 0 0 1772889600 1772889600
2506 2500 0 0 1772889600 1772889600
2507 2500 0 0 1772889600 1772889600
2508 2500 0 0 1772889600 1772889600
2509 2500 0 0 1772889600 1772889600
2510 2500 0 0 1772889600 1772889600
2511 2500 0 0 1772889600 1772889600
2512 2500 0 0 1772889600 1772889600
2600 1 0 0 1772889600 1783341076
2601 2600 0 0 1772889600 1772889600
2602 2600 0 0 1772889600 1772889600
2603 2600 0 0 1772889600 1772889600
2604 2600 0 0 1772889600 1772889600
2605 2600 0 0 1772889600 1772889600
2606 2600 0 0 1772889600 1772889600
2607 2600 0 0 1772889600 1772889600
2608 2600 0 0 1772889600 1772889600
2609 2600 0 0 1772889600 1772889600
2610 2600 0 0 1772889600 1772889600
2700 1 0 0 1772889600 1783341076
2701 2700 0 0 1772889600 1772889600
2702 2700 0 0 1772889600 1772889600
2703 2700 0 0 1772889600 1772889600
2704 2700 0 0 1772889600 1772889600
2705 2700 0 0 1772889600 1772889600
2706 2700 0 0 1772889600 1772889600
2707 2700 0 0 1772889600 1772889600
2708 2700 0 0 1772889600 1772889600

View File

@ -0,0 +1,648 @@
1 Attribūta tips 7
1 Attribute Type 9
1 Attribute Type 10
2 Krāsa 7
2 Color 9
2 10
100 Krāsa 7
100 Color 9
100 Цвет 10
101 Melns 7
101 Black 9
101 Черный 10
102 Balts 7
102 White 9
102 Белый 10
103 Pelēks 7
103 Grey 9
103 Серый 10
104 Tumši zils 7
104 Navy blue 9
104 Темно-синий 10
105 Gaiši zils 7
105 Light blue 9
105 Голубой 10
106 Sarkans 7
106 Red 9
106 Красный 10
107 Zaļš 7
107 Green 9
107 Зеленый 10
108 Haki 7
108 Khaki 9
108 Хаки 10
109 Bēšs 7
109 Beige 9
109 Бежевый 10
110 Brūns 7
110 Brown 9
110 Коричневый 10
111 Dzeltens 7
111 Yellow 9
111 Желтый 10
112 Rozā 7
112 Pink 9
112 Розовый 10
113 Violets 7
113 Purple 9
113 Фиолетовый 10
114 Oranžs 7
114 Orange 9
114 Оранжевый 10
115 Zelta 7
115 Gold 9
115 Золотой 10
116 Sudraba 7
116 Silver 9
116 Серебряный 10
117 Daudzkrāsains 7
117 Multicolor 9
117 Разноцветный 10
200 Materiāls 7
200 Material 9
200 Материал 10
201 100% Kokvilna 7
201 100% Cotton 9
201 100% Хлопок 10
202 Kokvilna / Elastāns 7
202 Cotton / Elastane 9
202 Хлопок / Эластан 10
203 Lins 7
203 Linen 9
203 Лен 10
204 Vilna 7
204 Wool 9
204 Шерсть 10
205 Kašmirs 7
205 Cashmere 9
205 Кашемир 10
206 Viskoze 7
206 Viscose 9
206 Вискоза 10
207 Poliesters 7
207 Polyester 9
207 Полиэстер 10
208 Neilons 7
208 Nylon 9
208 Нейлон 10
209 Džinss 7
209 Denim 9
209 Деним 10
210 Dabīgā āda 7
210 Genuine leather 9
210 Натуральная кожа 10
211 Mākslīgā āda 7
211 Faux leather 9
211 Искусственная кожа 10
212 Zamšāda 7
212 Suede 9
212 Замша 10
213 Audekls 7
213 Canvas 9
213 Канвас 10
300 Sezona / Kolekcija 7
300 Season / Collection 9
300 Сезон / Коллекция 10
301 Vissezonas 7
301 All-season 9
301 Всесезонный 10
302 Pavasaris / Vasara 7
302 Spring / Summer 9
302 Весна / Лето 10
303 Rudens / Ziema 7
303 Autumn / Winter 9
303 Осень / Зима 10
400 Apģērbu izmērs 7
400 Clothing Size 9
400 Размер одежды 10
401 XS 7
401 XS 9
401 XS 10
402 S 7
402 S 9
402 S 10
403 M 7
403 M 9
403 M 10
404 L 7
404 L 9
404 L 10
405 XL 7
405 XL 9
405 XL 10
406 XXL 7
406 XXL 9
406 XXL 10
407 3XL 7
407 3XL 9
407 3XL 10
408 Universāls 7
408 Universal (One Size) 9
408 Универсальный 10
500 Bikšu viduklis 7
500 Pants Waist 9
500 Объем талии брюк 10
501 W28 7
501 W28 9
501 W28 10
502 W29 7
502 W29 9
502 W29 10
503 W30 7
503 W30 9
503 W30 10
504 W31 7
504 W31 9
504 W31 10
505 W32 7
505 W32 9
505 W32 10
506 W33 7
506 W33 9
506 W33 10
507 W34 7
507 W34 9
507 W34 10
508 W36 7
508 W36 9
508 W36 10
509 W38 7
509 W38 9
509 W38 10
600 Bikšu garums 7
600 Pants Length 9
600 Длина брюк 10
601 L30 7
601 L30 9
601 L30 10
602 L32 7
602 L32 9
602 L32 10
603 L34 7
603 L34 9
603 L34 10
604 L36 7
604 L36 9
604 L36 10
700 Piegriezums 7
700 Fit 9
700 Покрой 10
701 Slim Fit 7
701 Slim Fit 9
701 Slim Fit 10
702 Regular Fit 7
702 Regular Fit 9
702 Regular Fit 10
703 Relaxed Fit 7
703 Relaxed Fit 9
703 Relaxed Fit 10
704 Oversized 7
704 Oversized 9
704 Oversized 10
800 Piedurkņu garums 7
800 Sleeve Length 9
800 Длина рукава 10
801 Bez piedurknēm 7
801 Sleeveless 9
801 Без рукавов 10
802 Īsas piedurknes 7
802 Short sleeves 9
802 Короткие рукава 10
803 Garas piedurknes 7
803 Long sleeves 9
803 Длинные рукава 10
900 Apkakles veids 7
900 Neckline Type 9
900 Тип воротника 10
901 Apaļš izgriezums 7
901 Crewneck 9
901 Круглый вырез 10
902 V-veida izgriezums 7
902 V-neck 9
902 V-образный вырез 10
903 Polo apkale 7
903 Polo collar 9
903 Воротник поло 10
904 Klasiskā krekla apkale 7
904 Classic shirt collar 9
904 Классический воротник рубашки 10
905 Stāvapkale 7
905 Mandarin collar 9
905 Воротник-стойка 10
906 Bītlene 7
906 Turtleneck 9
906 Воротник гольф 10
1000 Aizdare 7
1000 Closure 9
1000 Застежка 10
1001 Bez aizdares 7
1001 No closure 9
1001 Без застежки 10
1002 Ar rāvējslēdzēju 7
1002 Zipper 9
1002 На молнии 10
1003 Ar pogām 7
1003 Buttons 9
1003 На пуговицах 10
1004 Ar spiedpogām 7
1004 Snap buttons 9
1004 На кнопках 10
1005 Sasienams 7
1005 Tie closure 9
1005 На завязках 10
1100 Apdruka / Raksts 7
1100 Pattern / Print 9
1100 Принт / Рисунок 10
1101 Vienkrāsains 7
1101 Solid color 9
1101 Однотонный 10
1102 Ar grafisku apdruku 7
1102 Graphic print 9
1102 С графическим принтом 10
1103 Svītrains 7
1103 Striped 9
1103 В полоску 10
1104 Rūtots 7
1104 Checked 9
1104 В клетку 10
1105 Ziedu / Augu motīvi 7
1105 Floral 9
1105 Цветочный принт 10
1106 Dzīvnieku raksts 7
1106 Animal print 9
1106 Животный принт 10
1200 Vidukļa augstums 7
1200 Rise / Waist Height 9
1200 Посадка талии 10
1201 Augstais viduklis 7
1201 High Rise 9
1201 Высокая посадка 10
1202 Standarta viduklis 7
1202 Mid Rise 9
1202 Средняя посадка 10
1203 Zemais viduklis 7
1203 Low Rise 9
1203 Низкая посадка 10
1300 Apģērba garums 7
1300 Clothing Length 9
1300 Длина изделия 10
1301 Mini 7
1301 Mini 9
1301 Мини 10
1302 Midi 7
1302 Midi 9
1302 Миди 10
1303 Maxi 7
1303 Maxi 9
1303 Макси 10
1400 Jostas garums 7
1400 Belt Length 9
1400 Длина ремня 10
1401 80 cm 7
1401 80 cm 9
1401 80 см 10
1402 85 cm 7
1402 85 cm 9
1402 85 см 10
1403 90 cm 7
1403 90 cm 9
1403 90 см 10
1404 95 cm 7
1404 95 cm 9
1404 95 см 10
1405 100 cm 7
1405 100 cm 9
1405 100 см 10
1406 105 cm 7
1406 105 cm 9
1406 105 см 10
1407 110 cm 7
1407 110 cm 9
1407 110 см 10
1408 115 cm 7
1408 115 cm 9
1408 115 см 10
1500 Somas veids 7
1500 Bag Type 9
1500 Тип сумки 10
1501 Mugursoma 7
1501 Backpack 9
1501 Рюкзак 10
1502 Pleca soma 7
1502 Tote bag 9
1502 Сумка тоут 10
1503 Rokas soma 7
1503 Handbag 9
1503 Сумка в руку 10
1504 Šķērsām pār plecu 7
1504 Crossbody bag 9
1504 Сумка через плечо 10
1505 Mugursoma datoram 7
1505 Laptop backpack 9
1505 Рюкзак для ноутбука 10
1506 Jostas soma 7
1506 Waist bag 9
1506 Поясная сумка 10
1507 Ceļojumu soma 7
1507 Travel bag 9
1507 Дорожная сумка 10
1600 Maka veids 7
1600 Wallet Type 9
1600 Тип кошелька 10
1601 Klasiskais maks 7
1601 Classic wallet 9
1601 Классический кошелек 10
1602 Karšu maciņš 7
1602 Cardholder 9
1602 Картхолдер 10
1603 Maks ar rāvējslēdzēju 7
1603 Zip-around wallet 9
1603 Кошелек на молнии 10
1604 Monētu maks 7
1604 Coin purse 9
1604 Монетница 10
1700 Aromāts 7
1700 Scent Profile 9
1700 Аромат 10
1701 Koksnes 7
1701 Woody 9
1701 Древесный 10
1702 Salds / Eksotisks 7
1702 Sweet / Exotic 9
1702 Сладкий / Экзотический 10
1703 Ziedu 7
1703 Floral 9
1703 Цветочный 10
1704 Svaigs / Zāles 7
1704 Fresh / Herbal 9
1704 Свежий / Травяной 10
1705 Citrusaugļu 7
1705 Citrus 9
1705 Цитрусовый 10
1706 Rūgts / Sārs 7
1706 Bitter / Tart 9
1706 Горький / Терпкий 10
1707 Bez aromāta 7
1707 Unscented 9
1707 Без аромата 10
1800 Galvenā sastāvdaļa 7
1800 Main Ingredient 9
1800 Основной компонент 10
1801 Palo Santo 7
1801 Palo Santo 9
1801 Пало Санто 10
1802 Sandalkoks 7
1802 Sandalwood 9
1802 Сандаловое дерево 10
1803 Baltā salvija 7
1803 White Sage 9
1803 Белый шалфей 10
1804 Lavanda 7
1804 Lavender 9
1804 Лаванда 10
1805 Jasmīns 7
1805 Jasmine 9
1805 Жасмин 10
1806 Roze 7
1806 Rose 9
1806 Роза 10
1807 Frankincense (Olibāns) 7
1807 Frankincense 9
1807 Ладан 10
1808 Mirra 7
1808 Myrrh 9
1808 Мирра 10
1809 Kanēlis 7
1809 Cinnamon 9
1809 Корица 10
1810 Pačūlija 7
1810 Patchouli 9
1810 Пачули 10
1811 Ciedrs 7
1811 Cedar 9
1811 Кедр 10
1900 Nolūks / Efekts 7
1900 Intent / Benefit 9
1900 Энергетика / Назначение 10
1901 Telpas attīrīšana 7
1901 Space cleansing 9
1901 Очищение пространства 10
1902 Meditācija & Joga 7
1902 Meditation & Yoga 9
1902 Медитация и йога 10
1903 Miers & Stresa mazināšana 7
1903 Peace & Stress relief 9
1903 Успокоение и антистресс 10
1904 Enerģija & Fokuss 7
1904 Energy & Focus 9
1904 Энергия и фокус 10
1905 Aizsardzība 7
1905 Protection 9
1905 Защита 10
1906 Mīlestība & Harmonija 7
1906 Love & Harmony 9
1906 Любовь и гармония 10
1907 Miegs & Relaksācija 7
1907 Sleep & Relaxation 9
1907 Сон и релаксация 10
2000 Svars / Iepakojums 7
2000 Weight / Package 9
2000 Вес / Количество 10
2001 1 gab. 7
2001 1 pc. 9
2001 1 шт. 10
2002 3-5 gab. (komplekts) 7
2002 3-5 pcs. (set) 9
2002 3-5 шт. (комплект) 10
2003 10-12 gab. (paciņa) 7
2003 10-12 pcs. (pack) 9
2003 10-12 шт. (пачка) 10
2004 20 gab. (paciņa) 7
2004 20 pcs. (pack) 9
2004 20 шт. (пачка) 10
2005 50g 7
2005 50g 9
2005 50г 10
2006 100g 7
2006 100g 9
2006 100г 10
2007 250g 7
2007 250g 9
2007 250г 10
2100 Trauka materiāls 7
2100 Burner Material 9
2100 Материал подставки 10
2101 Keramika 7
2101 Ceramics 9
2101 Керамика 10
2102 Koks 7
2102 Wood 9
2102 Дерево 10
2103 Akmens 7
2103 Stone 9
2103 Камень 10
2104 Misiņš 7
2104 Brass 9
2104 Латунь 10
2105 Metāls 7
2105 Metal 9
2105 Металл 10
2106 Karstumizturīgs stikls 7
2106 Heat-resistant glass 9
2106 Термостойкое стекло 10
2200 Rotaslietas tips 7
2200 Jewelry Type 9
2200 Тип украшения 10
2201 Kaklarota 7
2201 Necklace 9
2201 Ожерелье 10
2202 Rokassprādze 7
2202 Bracelet 9
2202 Браслет 10
2203 Auskari 7
2203 Earnings 9
2203 Серьги 10
2204 Gredzens 7
2204 Ring 9
2204 Кольцо 10
2205 Kulons 7
2205 Pendant 9
2205 Кулон 10
2206 Dāvanu komplekts 7
2206 Gift set 9
2206 Подарочный набор 10
2300 Bāzes metāls 7
2300 Base Metal 9
2300 Основной металл 10
2301 Sudrabs 925 7
2301 Sterling Silver 925 9
2301 Серебро 925 10
2302 Medicīniskais tērauds 7
2302 Stainless Steel 9
2302 Медицинская сталь 10
2303 Misiņš 7
2303 Brass 9
2303 Латунь 10
2304 Varš 7
2304 Copper 9
2304 Медь 10
2400 Pārklājums 7
2400 Plating Type 9
2400 Покрытие 10
2401 18k Dzeltens zelts 7
2401 18k Yellow Gold 9
2401 18к Желтое золото 10
2402 24k Dzeltens zelts 7
2402 24k Yellow Gold 9
2402 24к Желтое золото 10
2403 Rozā zelts 7
2403 Rose Gold 9
2403 Розовое золото 10
2404 Rodijs 7
2404 Rhodium 9
2404 Родий 10
2405 Bez pārklājuma 7
2405 Unplated 9
2405 Без покрытия 10
2500 Kristāls / Akmens 7
2500 Gemstone / Crystal 9
2500 Камень / Кристалл 10
2501 Bez akmens 7
2501 No stone 9
2501 Без камня 10
2502 Ametists 7
2502 Amethyst 9
2502 Аметист 10
2503 Rozā kvarcs 7
2503 Rose Quartz 9
2503 Розовый кварц 10
2504 Kalnu kristāls 7
2504 Clear Quartz 9
2504 Горный хрусталь 10
2505 Melnais turmalīns 7
2505 Black Tourmaline 9
2505 Черный турмалин 10
2506 Citrīns 7
2506 Citrine 9
2506 Цитрин 10
2507 Nefrīts 7
2507 Jade 9
2507 Нефрит 10
2508 Lapis Lazuli 7
2508 Lapis Lazuli 9
2508 Лазурит 10
2509 Tīģeracs 7
2509 Tiger Eye 9
2509 Тигровый глаз 10
2510 Mēnessakmens 7
2510 Moonstone 9
2510 Лунный камень 10
2511 Labradorīts 7
2511 Labradorite 9
2511 Лабрадорит 10
2512 Obsidiāns 7
2512 Obsidian 9
2512 Обсидиан 10
2600 Gredzena izmērs 7
2600 Ring Size 9
2600 Размер кольца 10
2601 Regulējams 7
2601 Adjustable 9
2601 Регулируемый 10
2602 15 7
2602 15 9
2602 15 10
2603 16 7
2603 16 9
2603 16 10
2604 16.5 7
2604 16.5 9
2604 16.5 10
2605 17 7
2605 17 9
2605 17 10
2606 17.5 7
2606 17.5 9
2606 17.5 10
2607 18 7
2607 18 9
2607 18 10
2608 18.5 7
2608 18.5 9
2608 18.5 10
2609 19 7
2609 19 9
2609 19 10
2610 20 7
2610 20 9
2610 20 10
2700 Rotas garums 7
2700 Jewelry Length 9
2700 Длина украшения 10
2701 Regulējams 7
2701 Adjustable 9
2701 Регулируемый 10
2702 16 cm 7
2702 16 cm 9
2702 16 см 10
2703 18 cm 7
2703 18 cm 9
2703 18 см 10
2704 20 cm 7
2704 20 cm 9
2704 20 см 10
2705 40 cm 7
2705 40 cm 9
2705 40 см 10
2706 45 cm 7
2706 45 cm 9
2706 45 см 10
2707 50 cm 7
2707 50 cm 9
2707 50 см 10
2708 60 cm 7
2708 60 cm 9
2708 60 см 10
3 Zils 7
3 blue 9
3 10

View File

@ -0,0 +1,2 @@
1 Full name asd@asd.lv +371 23423423424 SOme randome message including html tags like &lt;div&gt; and &lt;span&gt; and broken elements like &lt; diiv&gt; 172.20.0.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 1781771700 1781771700
2 Aivars Žukovskis aivars7.zukovskis@gmail.com +37126572346 asd 172.20.0.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1784133673 1784133673

View File

@ -0,0 +1,6 @@
1 26070001 1784290837 aivars7.zukovskis@gmail.com 1450 1454 {"sh_and_py":{"shipping_method":1454,"payment_method":1450},"confirmation":{"agree_to_terms":"1"},"customer_info":{"checkout_email":"aivars7.zukovskis@gmail.com"},"shipping_address":{"checkout_first_name":"Aivars \\u017dukovskis","checkout_last_name":"\\u017dukovskis","checkout_email":"aivars7.zukovskis@gmail.com","checkout_phone":"+37126572346","checkout_address1":"P.leji\\u0146a 20","checkout_address2":"","checkout_country":"LV","checkout_city":"R\\u012bga","checkout_zip":"1028"},"delivery_info":{"checkout_first_name":"Aivars \\u017dukovskis","checkout_last_name":"\\u017dukovskis","checkout_email":"aivars7.zukovskis@gmail.com","checkout_phone":"+37126572346","checkout_address1":"P.leji\\u0146a 20","checkout_address2":"","checkout_country":"LV","checkout_city":"R\\u012bga","checkout_zip":"1028"},"delivery_same_as_bill":true} 0 0 \N 0 0 0 1784290837
2 26070002 1784293140 aivars7.zukovskis@gmail.com 1450 1454 {"sh_and_py":{"shipping_method":1454,"payment_method":1450},"confirmation":{"subscribe":"0","agree_to_terms":"1"},"customer_info":{"checkout_email":"aivars7.zukovskis@gmail.com"},"shipping_address":{"checkout_first_name":"Aivars \\u017dukovskis","checkout_last_name":"\\u017dukovskis","checkout_email":"aivars7.zukovskis@gmail.com","checkout_phone":"+37126572346","checkout_address1":"P.leji\\u0146a 20","checkout_address2":"address 2","checkout_country":"LV","checkout_city":"R\\u012bga","checkout_zip":"1029"},"delivery_info":{"checkout_first_name":"Aivars \\u017dukovskis","checkout_last_name":"\\u017dukovskis","checkout_email":"aivars7.zukovskis@gmail.com","checkout_phone":"+37126572346","checkout_address1":"P.leji\\u0146a 20","checkout_address2":"address 2","checkout_country":"LV","checkout_city":"R\\u012bga","checkout_zip":"1029"},"delivery_same_as_bill":true,"check-note":"Gribu t\\u016bl\\u012bt un tagad"} 0 0 \N 0 0 0 1784293140
3 26070003 1784293375 aivars7.zukovskis@gmail.com 1450 1454 {"sh_and_py":{"shipping_method":1454,"payment_method":1450},"confirmation":{"subscribe":"0","agree_to_terms":"1"},"customer_info":{"checkout_email":"aivars7.zukovskis@gmail.com"},"shipping_address":{"checkout_first_name":"Aivars \\u017dukovskis","checkout_last_name":"\\u017dukovskis","checkout_email":"aivars7.zukovskis@gmail.com","checkout_phone":"+37126572346","checkout_address1":"P.leji\\u0146a 20","checkout_address2":"address 2","checkout_country":"LV","checkout_city":"R\\u012bga","checkout_zip":"1029"},"delivery_info":{"checkout_first_name":"Aivars \\u017dukovskis","checkout_last_name":"\\u017dukovskis","checkout_email":"aivars7.zukovskis@gmail.com","checkout_phone":"+37126572346","checkout_address1":"P.leji\\u0146a 20","checkout_address2":"address 2","checkout_country":"LV","checkout_city":"R\\u012bga","checkout_zip":"1029"},"delivery_same_as_bill":true,"check-note":"Please arrange the delivery as soon as possible, please leave the box on the porch behind the planter."} 0 0 \N 0 0 0 1784293375
4 26070004 1784293429 aivars7.zukovskis@gmail.com 1450 1453 {"sh_and_py":{"shipping_method":1453,"payment_method":1450},"confirmation":{"subscribe":"0","agree_to_terms":"1"},"customer_info":{"checkout_email":"aivars7.zukovskis@gmail.com"},"shipping_address":{"checkout_first_name":"Aivars \\u017dukovskis","checkout_last_name":"\\u017dukovskis","checkout_email":"aivars7.zukovskis@gmail.com","checkout_phone":"+37126572346","checkout_address1":"P.leji\\u0146a 20","checkout_address2":"address 2","checkout_country":"LV","checkout_city":"R\\u012bga","checkout_zip":"1029"},"delivery_info":{"checkout_first_name":"Aivars \\u017dukovskis","checkout_last_name":"\\u017dukovskis","checkout_email":"aivars7.zukovskis@gmail.com","checkout_phone":"+37126572346","checkout_address1":"P.leji\\u0146a 20","checkout_address2":"address 2","checkout_country":"LV","checkout_city":"R\\u012bga","checkout_zip":"1029"},"delivery_same_as_bill":true,"check-note":"Strange..."} 0 0 \N 1 0 0 1784293429
10 26070016 1785438860 aivars7.zukovskis@gmail.com 1450 1453 {"sh_and_py":{"shipping_method":1453,"payment_method":1450},"confirmation":{"subscribe":"0","agree_to_terms":"1"},"customer_info":{"checkout_email":"aivars7.zukovskis@gmail.com"},"shipping_address":{"checkout_first_name":"Aivars \\u017dukovskis","checkout_last_name":"\\u017dukovskis","checkout_email":"aivars7.zukovskis@gmail.com","checkout_phone":"+37126572346","checkout_address1":"P.leji\\u0146a 20","checkout_address2":"adrese 2","checkout_country":"LV","checkout_city":"R\\u012bga","checkout_zip":"1029"},"delivery_info":{"checkout_first_name":"Aivars \\u017dukovskis","checkout_last_name":"\\u017dukovskis","checkout_email":"aivars7.zukovskis@gmail.com","checkout_phone":"+37126572346","checkout_address1":"P.leji\\u0146a 20","checkout_address2":"adrese 2","checkout_country":"LV","checkout_city":"R\\u012bga","checkout_zip":"1029"},"delivery_same_as_bill":true,"check-note":"L\\u016bdzu iesai\\u0146ot d\\u0101vanai."} 0 0 2 0 0 0 1785438860
11 26070005 1785479835 aivars7.zukovskis@gmail.com 1450 1453 {"sh_and_py":{"shipping_method":1453,"payment_method":1450},"confirmation":{"subscribe":"0","agree_to_terms":"1"},"customer_info":{"checkout_email":"aivars7.zukovskis@gmail.com"},"shipping_address":{"checkout_first_name":"Aivars \\u017dukovskis","checkout_last_name":"\\u017dukovskis","checkout_email":"aivars7.zukovskis@gmail.com","checkout_phone":"+37126572346","checkout_address1":"P.leji\\u0146a 20","checkout_address2":"adrese 2","checkout_country":"LV","checkout_city":"R\\u012bga","checkout_zip":"1029"},"delivery_info":{"checkout_first_name":"Aivars \\u017dukovskis","checkout_last_name":"\\u017dukovskis","checkout_email":"aivars7.zukovskis@gmail.com","checkout_phone":"+37126572346","checkout_address1":"P.leji\\u0146a 20","checkout_address2":"adrese 2","checkout_country":"LV","checkout_city":"R\\u012bga","checkout_zip":"1029"},"delivery_same_as_bill":true,"check-note":"Please arrange the delivery as soon as possible, please leave the box on the porch behind the planter."} 0 0 0 0 0 0 1785479835

View File

@ -0,0 +1,8 @@
3 0 Aivars Žukovskis Žukovskis +37126572346 P.lejiņa 20 address 2 Rīga LV 1029
3 1 Aivars Žukovskis Žukovskis +37126572346 P.lejiņa 20 address 2 Rīga LV 1029
4 0 Aivars Žukovskis Žukovskis +37126572346 P.lejiņa 20 address 2 Rīga LV 1029
4 1 Aivars Žukovskis Žukovskis +37126572346 P.lejiņa 20 address 2 Rīga LV 1029
10 0 Aivars Žukovskis Žukovskis +37126572346 P.lejiņa 20 adrese 2 Rīga LV 1029
10 1 Aivars Žukovskis Žukovskis +37126572346 P.lejiņa 20 adrese 2 Rīga LV 1029
11 0 Aivars Žukovskis Žukovskis +37126572346 P.lejiņa 20 adrese 2 Rīga LV 1029
11 1 Aivars Žukovskis Žukovskis +37126572346 P.lejiņa 20 adrese 2 Rīga LV 1029

View File

@ -0,0 +1,6 @@
3 8 14 69.99 1 102 0
4 5 4 234 1 201 0
10 6 6 89.1 1 3 401
11 1 11 79.78 1 102 405
11 5 4 234 1 201 0
11 6 20 2.7 2 115 405

View File

@ -0,0 +1,9 @@
1 1232704260001 0 0 0 100 10000 0 0 0 0 1777291888 1 1783945052 1 0 0 0 1
2 1232704260002 0 0 0 100 10000 23 0 0 0 1777292750 1 1783945140 1 0 0 0 1
3 1012506260003 0 0 0 100 10000 3 0 0 0 1782391552 1 1785479737 1 0 10 0 1
4 1230107260004 0 0 0 100 10000 0 0 0 0 1782899481 1 1783946168 1 0 0 0 1
5 3430107260005 0 0 0 100 10000 0 0 0 0 1782916269 1 1783945737 1 0 0 0 1
6 1230207260006 0 0 0 100 10000 1 0 0 0 1783019298 1 1784551225 1 0 10 1 1
7 1240307260007 0 0 0 100 10000 1 0 0 0 1783684345 1 1784534079 1 0 0 0 1
8 1231307260008 0 0 0 100 10000 10 0 0 0 1783946246 1 1785479736 1 0 123 0 1
9 1232007260009 0 0 0 100 10000 1 0 0 0 1784535337 1 1784535337 1 0 1 0 1

View File

@ -0,0 +1,10 @@
1 /files/products/2026-07/9145cb06f972578618b10dcda081163046665423.png Gemini_Generated_Image_sawrzpsawrzpsawr 1 0
2 /files/products/2026-07/f8ea33a8eedb25a3dad9db377483ef00c70a9c76.png Gemini_Generated_Image_hitq8phitq8phitq 1 0
3 /files/products/2026-07/dcd57bd37b3a8393bb3ba840edc72e0ce80e659c.png Gemini_Generated_Image_7r3j9f7r3j9f7r3j 1 0
5 /files/products/2026-07/acfefa90b8bdfc24568a4bf3384e9c29acafbf8a.png Gemini_Generated_Image_x6yexrx6yexrx6ye 1 0
4 /files/products/2026-07/00807fe3c27c48611bd12eefe31f844b8f81bf48.png 1 0
8 /files/products/2026-07/9fa006b48ad35531699cfc26d14a4134188aef4a.png 1 0
7 /files/products/2026-07/97df724ee0a248cb7dd625b353cb9a0a5e87c7c8.png 1 0
6 /files/products/2026-07/9fa006b48ad35531699cfc26d14a4134188aef4a.png 1 0
6 /files/products/2026-07/adb73127ecd3f07603a648d132ec70b1dcd22e44.png 2 0
6 /files/products/2026-07/ac9f6eab99c772b3b1aaf2c53824f0d0facc06d3.png 3 0

View File

@ -0,0 +1,123 @@
1 7 balts-t-krekls-ar-apdruku-kakis Balts T-krekls ar apdruku: kaķis <p>asdasda</p> balts-t-krekls-ar-apdruku-kakis
1 9 asdasd asd asd
1 10 asdasd asd asd
2 7 product1 Vīriešu t-krekls <div class="product-detail-video section-pt">\
<div class="container">\
<div class="product-video" data-animate="animate__fadeIn">\
<div class="video position-relative">\
<div class="video-loader position-absolute w-100 h-100 z-1"></div>\
<div class="video-img banner-img position-relative br-hidden"><button type="button" class="video-btn position-absolute top-50 start-50 translate-middle z-1" data-video-id="pOT1T2qSd2M" aria-label="Video button"><span class="banner-video-icon heading-color icon-16 width-80 height-80 d-flex align-items-center justify-content-center body-bg rounded-circle"><i class="ri-play-large-fill d-block lh-1"></i></span></button><img src="../../../../files/products/2026-07/adb73127ecd3f07603a648d132ec70b1dcd22e44.png" class="w-100 img-fluid" alt="video" /></div>\
<div class="video-frame position-absolute top-0 start-0 w-100 h-100 br-hidden"></div>\
</div>\
</div>\
</div>\
</div> dasd
2 9 asdasd asd asd
2 10 asdasd asd asd
3 7 asd Vīriešu T-krekls zils asd
3 9 asd asd asd
3 10 asd asd asd
5 7 dream-big-viriesu-krekls Dream big vīriešu krekls Dream big vīriešu krekls
5 9 asdx asdx asdx
5 10 asdx asdx asdx
4 7 wondeful-long-sleve-t-shirt Wondeful long Sleve t-shirt asd
4 9 asd asd asd
4 10 asd asd asd
8 7 balts-krekls Balts krekls Balts krekls
8 9 balts-krekls Balts krekls Balts krekls
8 10 balts-krekls Balts krekls Balts krekls
7 7 product-2 Product 2 Product 2
7 9 product-2 Product 2 Product 2
7 10 product-2 Product 2 Product 2
9 7 smarzas-1 Smaržas 1 Smaržas 1
9 9 smarzas-1 Smaržas 1 Smaržas 1
9 10 smarzas-1 Smaržas 1 Smaržas 1
6 7 viriesu-klasiskais-baltais-t-krekls Vīriešu klasiskais baltais kokvilnas t-krekls ar apaļu apkakli <div class="product-detail-tab section-pt">\
<div class="container">\
<div class="product-tab border-full border-radius" id="collapse-tab-mr4qwd32vxtxy" data-animate="animate__fadeIn">\
<div class="collapse-tab ptb-30 plr-15 plr-md-30" data-animate="animate__fadeIn"><button type="button" class="w-100 d-flex align-items-center justify-content-between" data-bs-toggle="collapse" data-bs-target="#pro-details-desc-tab-mr4qwd32ghc62" aria-expanded="true"><span class="heading-weight">Papla&scaron;inātais apraksts</span><span class="tab-icon icon-16"><i class="ri-add-line"></i></span></button>\
<div class="collapse show" id="pro-details-desc-tab-mr4qwd32ghc62" data-bs-parent="#collapse-tab-mr4qwd32vxtxy">\
<div class="pst-15">\
<div class="product-details-desc-info">\
<div class="p-mtm20">\
<p>&Scaron;is klasiskais vīrie&scaron;u t-krekls ir radīts, apvienojot pārlaicīgu stilu ar ikdienas komfortu. Griezums ir rūpīgi izstrādāts, lai lieliski piegulētu augumam, izceltu plecu līniju un nodro&scaron;inātu pilnīgu kustību brīvību. Pateicoties blīvajam, bet elpojo&scaron;ajam audumam, krekls nesagriežas pēc mazgā&scaron;anas un ilgsto&scaron;i saglabā savu sākotnējo sniegbalto toni. Tas ir ideāls pamats jebkurai garderobei &ndash; valkā to vienu pa&scaron;u ar džinsiem vai kā bāzes slāni zem žaketes.</p>\
</div>\
</div>\
</div>\
</div>\
</div>\
<div class="collapse-tab ptb-30 plr-15 plr-md-30 bst" data-animate="animate__fadeIn"><button type="button" class="w-100 d-flex align-items-center justify-content-between" data-bs-toggle="collapse" data-bs-target="#pro-how-to-use-tab-mr4qwd32u3nkq" aria-expanded="false"><span class="heading-weight">Kop&scaron;anas un valkā&scaron;anas ceļvedis</span></button>\
<div class="collapse" id="pro-how-to-use-tab-mr4qwd32u3nkq" data-bs-parent="#collapse-tab-mr4qwd32vxtxy">\
<div class="pst-15">\
<div class="product-how-to-use-info">\
<ul class="ul-mtm-15">\
<li><strong data-path-to-node="6,0,0,0" data-index-in-node="0">Mazgā&scaron;ana:</strong> Mazgāt veļas ma&scaron;īnā saudzīgā režīmā līdz 40&deg;C temperatūrā kopā ar līdzīgas (baltas) krāsas apģērbiem.</li>\
<li><strong data-path-to-node="6,0,1,0" data-index-in-node="0">Gludinā&scaron;ana:</strong> Gludināt vidējā temperatūrā no kreisās puses, lai saglabātu auduma gludumu un struktūru.</li>\
<li><strong data-path-to-node="6,0,2,0" data-index-in-node="0">Stilē&scaron;ana:</strong> Kombinē ar klasiskām čino biksēm viedi ikdieni&scaron;ķam (<i data-path-to-node="6,0,2,0" data-index-in-node="63">smart-casual</i>) tēlam vai ar sporta biksēm brīvdienu komfortam.</li>\
</ul>\
</div>\
</div>\
</div>\
</div>\
<div class="collapse-tab ptb-30 plr-15 plr-md-30 bst" data-animate="animate__fadeIn"><button type="button" class="w-100 d-flex align-items-center justify-content-between" data-bs-toggle="collapse" data-bs-target="#pro-key-ingredients-tab-mr4qwd32oxwvf" aria-expanded="false"><span class="heading-weight">Materiāls un īpa&scaron;ības</span></button>\
<div class="collapse" id="pro-key-ingredients-tab-mr4qwd32oxwvf" data-bs-parent="#collapse-tab-mr4qwd32vxtxy">\
<div class="pst-15">\
<div class="product-key-ingredients-info">\
<ul class="ul-mtm-15">\
<li class="col-12"><strong data-path-to-node="8,0,0,0" data-index-in-node="0">100% Premium ķemmēta kokvilna:</strong> Īpa&scaron;i mīksta pieskārienam, hipoalerģiska un nodro&scaron;ina izcilu gaisa cirkulāciju visas dienas garumā.</li>\
<li class="col-12"><span class="heading-color heading-weight"><strong data-path-to-node="8,0,1,0" data-index-in-node="0">Pastiprinātas vīles:</strong> Dubultās &scaron;uves apkakles un plecu zonā garantē apģērba ilgmūžību un struktūras noturību.</span></li>\
<li class="col-12"><span class="heading-color heading-weight"><strong data-path-to-node="8,0,2,0" data-index-in-node="0">Oeko-Tex&reg; sertifikāts:</strong> Apliecina, ka auduma ražo&scaron;anā nav izmantotas kaitīgas ķīmiskas vielas.</span></li>\
</ul>\
<div class="product-detail-video section-pt">\
<div class="container">\
<div class="product-video" data-animate="animate__fadeIn"></div>\
</div>\
</div>\
</div>\
</div>\
</div>\
</div>\
</div>\
</div>\
</div>\
<div class="product-detail-video section-pt">\
<div class="container">\
<div class="product-video" data-animate="animate__fadeIn">\
<div class="video position-relative">\
<div class="video-img banner-img position-relative br-hidden"></div>\
</div>\
</div>\
</div>\
</div>\
<div class="product-detail-video section-pt">\
<div class="container">\
<div class="product-video" data-animate="animate__fadeIn">\
<div class="video position-relative">\
<div class="video-img banner-img position-relative br-hidden"><span>Kāpēc &scaron;im kreklam jābūt katra vīrie&scaron;a garderobē?</span></div>\
</div>\
</div>\
</div>\
</div>\
<section class="product-detail section-pt">\
<div class="container">\
<div class="product-description" data-animate="animate__fadeIn">\
<p><span>Ne visi baltie t-krekli ir radīti vienādi. &Scaron;is demo modelis parāda, kā pareizais piegriezums un kvalitatīvs materiāls var acumirklī uzlabot kopējo tēlu.</span></p>\
<ul data-path-to-node="16,1">\
<li>\
<p data-path-to-node="16,1,0,0"><strong data-path-to-node="16,1,0,0" data-index-in-node="0">Uzreiz gatavs tēls:</strong> Nav jātērē laiks domājot &ndash; tas piestāv burtiski visam.</p>\
</li>\
<li>\
<p data-path-to-node="16,1,1,0"><strong data-path-to-node="16,1,1,0" data-index-in-node="0">Pārliecība un komforts:</strong> Audums ir pietiekami biezs, lai neizskatītos caurspīdīgs, nodro&scaron;inot solīdu un pārliecinātu koptēlu jebkurā situācijā.</p>\
</li>\
<li>\
<p data-path-to-node="16,1,2,0"><strong data-path-to-node="16,1,2,0" data-index-in-node="0">Ilgtermiņa investīcija:</strong> Tas nav vienas sezonas krekliņ&scaron;. &Scaron;is ir apģērbs, kas kalpos un izskatīsies labi arī pēc neskaitāmām mazgā&scaron;anas reizēm.</p>\
</li>\
</ul>\
<p data-path-to-node="17"><img src="../../files/products/2026-07/09031e2a265f542fbc4d7b66310a33371cbb0ef2.png" />&nbsp;</p>\
</div>\
</div>\
</section> Šis ir klasisks un daudzpusīgs vīriešu bāzes t-krekls sniegbaltā krāsā. Izgatavots no augstas kvalitātes, mīkstas kokvilnas auduma, tas nodrošina maksimālu komfortu un elpojamību visas dienas garumā. Kreklam ir taisns, nedaudz pieguļošs griezums un klasiska apaļa apkakle.\
\
Lieliska izvēle gan ikdienas valkāšanai, gan kā apakškrekls zem džempera vai krekla. Pateicoties vienkāršajam dizainam, to ir viegli kombinēt ar jebkuru apģērbu – sākot no džinsiem un beidzot ar šortiem. Modeļa fit dizains nodrošina glītu izskatu un ērtu kustību brīvību. Nepieciešams elements ikviena vīrieša garderobē. balts t-krekls, vīriešu t-krekls, kokvilnas t-krekls, klasisks krekls, vīriešu apģērbs, krekliņš ar īsām piedurknēm, balts apģērbs, bāzes krekls
6 9 asd asd
6 10 asd asd

View File

@ -0,0 +1,13 @@
1 65
2 65
3 86
5 65
5 67
4 65
4 66
8 65
8 66
7 66
9 83
6 65
6 66

View File

@ -0,0 +1,24 @@
1 2 1 3 404 1 0 3 1777292909 1 1777237200 1777292909 1 1777292909 1
2 3 2 3 0 10 0 3 1782391552 1 1782334800 1782391552 1 1782391552 1
3 3 3 3 0 1 0 3 1782391570 1 1782334800 1782391570 1 1782391570 1
4 5 4 201 0 123 0 3 1782916269 1 1782853200 1782916269 1 1782916269 1
5 2 5 107 403 1 0 3 1783019096 1 1782939600 1783019096 1 1783019096 1
6 6 6 3 401 1 0 3 1783019298 1 1782939600 1783019298 1 1783019298 1
7 2 7 3 0 1 0 3 1783019664 1 1782939600 1783019664 1 1783019664 1
8 2 8 3 405 1 0 3 1783020025 1 1782939600 1783020025 1 1783020025 1
9 2 9 3 0 1 0 3 1783021095 1 1782939600 1783021095 1 1783021095 1
10 2 1 3 404 3 0 3 1783022067 1 1782939600 1783022067 1 1783022067 1
11 2 7 3 0 1 0 3 1783022067 1 1782939600 1783022067 1 1783022067 1
12 7 10 3 405 1 0 3 1783080856 1 1783026000 1783080856 1 1783080856 1
13 1 11 102 405 1 0 3 1783328401 1 1783285200 1783328401 1 1783328401 1
14 6 6 3 401 3 0 3 1783418112 1 1783371600 1783418112 1 1783418112 1
15 6 12 3 402 2 0 3 1783418112 1 1783371600 1783418112 1 1783418112 1
16 2 5 107 403 3 0 3 1783945140 1 1783890000 1783945140 1 1783945140 1
17 4 13 116 0 1 0 3 1783945455 1 1783890000 1783945455 1 1783945455 1
18 8 14 102 402 1 0 3 1783946246 1 1783890000 1783946246 1 1783946246 1
19 8 15 101 403 3 0 3 1784533873 1 1784494800 1784533873 1 1784533873 1
20 8 17 101 404 3 0 3 1784533934 1 1784494800 1784533934 1 1784533934 1
21 8 16 102 403 2 0 3 1784533934 1 1784494800 1784533934 1 1784533934 1
22 7 18 201 403 3 0 3 1784534079 1 1784494800 1784534079 1 1784534079 1
23 9 19 1702 0 3 0 3 1784535337 1 1784494800 1784535337 1 1784535337 1
24 6 20 115 405 3 0 3 1784537098 1 1784494800 1784537098 1 1784537098 1

View File

@ -0,0 +1,20 @@
1 2 3 404 0 1 1 1
2 3 3 0 0 12.99 7.99 0
3 3 3 0 0 3 1.99 1
4 5 201 0 0 123 234 0
5 2 107 403 3 123 123 0
6 6 3 401 0 1 99 0
7 2 3 0 0 2 2 1
8 2 3 405 0 1 50 0
9 2 3 0 0 1 3 1
10 7 3 405 0 17 19 0
11 1 102 405 0 29.99 79.78 0
12 6 3 402 0 3 33 0
13 4 116 0 0 17 39.79 0
14 8 102 402 0 29.99 69.99 0
15 8 101 403 0 30 78.88 0
16 8 102 403 2 29.99 66.73 0
17 8 101 404 3 29.99 65.55 0
18 7 201 403 3 1 12 0
19 9 1702 0 3 3 13 0
20 6 115 405 0 3 3 0

View File

@ -0,0 +1,17 @@
1 1454
1 1453
2 1454
2 1453
2 1452
3 1454
3 1453
3 1452
5 1454
5 1453
4 1454
4 1453
8 1454
7 1454
9 1454
6 1454
6 1453

View File

@ -0,0 +1,17 @@
1 1451
1 1450
2 1451
2 1450
3 1451
3 1450
5 1451
5 1450
4 1451
4 1450
8 1451
8 1450
7 1451
9 1451
9 1450
6 1451
6 1450

View File

@ -0,0 +1,3 @@
1 SEQ_PARTNER_CODE 2191
2 SEQ_PRODUCT_NUMBER 10
3 SEQ_BILL_NUMBER 17

View File

@ -0,0 +1,2 @@
1 asdasdasdas asdasdasdasd asd@asd.lv asd@asd.lv 234 $2y$11$LJgMB7A2Mud4fwtl0ZfZYeI9cWTjjKSd1Ngt48K8cgOUI6VD4hfF2 7 172.20.0.1 1785481498 /lietotaja-profils a:5:{s:5:"bools";a:3:{s:11:"bFullScreen";i:1;s:12:"bUseDarkMode";i:0;s:14:"bShowBtnLabels";i:1;}s:6:"tables";a:21:{s:17:"pubLursoftDataReq";a:0:{}s:14:"pubUserManager";a:0:{}s:14:"pubTransaction";a:0:{}s:11:"pubPartners";a:0:{}s:10:"pubObjects";a:0:{}s:10:"pubBalance";a:0:{}s:7:"pubBugs";a:0:{}s:13:"pubRoutePages";a:0:{}s:15:"pubIncDocuments";a:0:{}s:12:"pubDocuments";a:0:{}s:17:"pubTimeAccounting";a:0:{}s:17:"pubClassificators";a:0:{}s:15:"pubAccountingCl";a:0:{}s:13:"pubAccounting";a:0:{}s:19:"pubVisitorsRegister";a:0:{}s:31:"pubApartmentsMetersMeasurements";a:0:{}s:19:"pubApartmentsMeters";a:0:{}s:22:"pubClassificatorsTypes";a:0:{}s:25:"pubClassificatorsProjects";a:0:{}s:26:"pubClassificatorsContracts";a:0:{}s:27:"pubClassificatorsTransports";a:0:{}}s:7:"plugins";a:0:{}s:6:"values";a:3:{s:15:"iRecordsPerPage";i:20;s:11:"iActiveYear";a:0:{}s:20:"vFavoriteCompanyList";a:0:{}}s:10:"values_adv";a:4:{s:13:"vDashboardCFG";a:0:{}s:20:"vAdditionalTableData";a:0:{}s:12:"vProfileData";a:2:{s:10:"birth_date";s:10:"2009-01-02";s:6:"gender";s:0:"";}s:12:"vAddressBook";a:3:{i:0;a:17:{s:2:"id";s:16:"f28d3a0463e8bab1";s:5:"label";s:6:"mājaa";s:10:"first_name";s:6:"Aivars";s:9:"last_name";s:10:"Žukovskis";s:7:"company";s:8:"SIA Shio";s:5:"phone";s:8:"26572346";s:8:"address1";s:12:"P.lejiņa 20";s:8:"address2";s:8:"adrese 2";s:4:"city";s:5:"Rīga";s:5:"state";s:0:"";s:7:"country";s:6:"Latvia";s:3:"zip";s:4:"1029";s:4:"type";s:4:"both";s:19:"is_default_shipping";i:1;s:18:"is_default_billing";i:0;s:10:"created_at";i:1784719331;s:10:"updated_at";i:1784737071;}i:1;a:17:{s:2:"id";s:16:"3614234d9cdd7b1a";s:5:"label";s:4:"test";s:10:"first_name";s:3:"asd";s:9:"last_name";s:3:"asd";s:7:"company";s:3:"asd";s:5:"phone";s:10:"2343242342";s:8:"address1";s:3:"asd";s:8:"address2";s:3:"asd";s:4:"city";s:3:"asd";s:5:"state";s:3:"asd";s:7:"country";s:3:"asd";s:3:"zip";s:3:"asd";s:4:"type";s:7:"billing";s:19:"is_default_shipping";i:0;s:18:"is_default_billing";i:1;s:10:"created_at";i:1784737104;s:10:"updated_at";i:1785362823;}i:2;a:17:{s:2:"id";s:16:"fa00d1d4d887c644";s:5:"label";s:3:"xxx";s:10:"first_name";s:4:"aaaa";s:9:"last_name";s:4:"aaaa";s:7:"company";s:8:"SIA Shio";s:5:"phone";s:8:"26572346";s:8:"address1";s:12:"P.lejiņa 20";s:8:"address2";s:8:"adrese 2";s:4:"city";s:5:"Rīga";s:5:"state";s:4:"aaaa";s:7:"country";s:6:"Latvia";s:3:"zip";s:4:"1029";s:4:"type";s:4:"both";s:19:"is_default_shipping";i:0;s:18:"is_default_billing";i:0;s:10:"created_at";i:1784889927;s:10:"updated_at";i:1784889927;}}}} 0 1784069345 1785225256 1 0 0 0 1785370699 $2y$11$bL2j/eQy32gday2vERU6p.yNTB2DgSQ1X76kq2XWM4ulbCLBbxCRW -1 0
9 Aivars Žukovskis test@tt.lv test@tt.lv $2y$11$zDmBkeU5T1ecx6iN0NUwFeZpxopDepWgRR0ngSPGzRgKVoCeMYVQy 7 172.20.0.1 1785445990 /lietotaja-profils 0 1785441553 1785441553 1 0 0 0 0 0 0

View File

@ -0,0 +1,9 @@
1 asd@asd.lv 1 172.20.0.1 7 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 1781615275 1785479685
2 asd@xxx.lv 1 172.20.0.1 7 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 1781615586 1781690485
3 xxx@asd.lc 1 172.20.0.1 7 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 1781694045 1781694045
4 xx@asd.lv 1 172.20.0.1 7 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 1781694055 1781694055
5 asd@ax.lv 1 172.20.0.1 7 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 1781694721 1781694721
6 aivars7.zukovskis@gmail.com 1 172.20.0.1 7 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 1782460841 1784109698
7 asd@E.xasd 1 172.20.0.1 7 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 1783411311 1783411311
8 sdfs@asd.lv 1 172.20.0.1 7 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 1783411319 1783411319
9 asd@sd.lv 1 172.20.0.1 7 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1784760655 1784760655

View File

@ -0,0 +1,4 @@
25 9 7 1785446205
29 1 3 1785482260
30 1 2 1785482833
32 1 1 1785483025

View File

@ -0,0 +1,620 @@
3986 No result data found, please check your filter and try again!
3987 Menus
3988
3989 Yes
3990 No
3991 Delete menus?
3992 Selected menus will be permanently deleted and cannot be recovered. Confirm delete?
3993 Delete selected menus
3994 Cancel operation
3995 Please fill in the field!
3996 MSG_LOGO_TITLE
3997 Logout
3998 My profile ...
3999 Session will expire in:
4000 Session has expired! Time left:
4001 APP
4002 GOOGLE_ANALYTICS_CODE
4003 System menus
4004 Select
4005 Active
4006 Inactive
4007 ID
4008 Menu title
4009 Description
4010 Blocked
4011 Actions
4012 Edit
4013 Delete
4014 Add new
4015 Change item status
4016 Delete selected
4017 + Add new
4018 records from
4019 Table search
4020 Search
4021 Clear search
4022 Languages
4023 Delete languages?
4024 Selected languages will be permanently deleted and cannot be recovered. Confirm delete?
4025 Delete selected languages
4026 System Languages
4027 Language
4028 Country
4029 Code
4030 Order
4031 Type
4032 Default
4033 CMS Enabled
4034 User Management
4035 Min password length is 6 symbols!
4036 Passwords must match!
4037 Delete system user?
4038 Selected users will be permanently deleted and cannot be recovered. Confirm delete?
4039 Delete selected users
4040 Create QR code
4041 Create code
4042 Not a valid email address specified!
4043 Fields do not match!
4044 Qr code
4045 Secret key
4046 Issue
4047 User
4048 User name
4049 User surname
4050 User login
4051 Last login
4052 User email
4053 2FA
4054 User IP
4055 Users last location
4056 Clone user
4057 Login
4058 Passed site map doesn't exist!
4059 Save
4060 LORETTA SECRET
4061 BRSystems IT Solutions
4062 Username
4063 Password
4064 Sign in
4065 Two-factor authentication
4066 Enter the two-factor authentication code provided by the Google Authenticator app
4067 Back to login
4068 Welcome
4069 Site Map
4070 Module content
4071 APP Users
4072 Manage
4073 Cms users
4074 Site base
4075 Apc overview
4076 Cms messages
4077 App messages
4078 Action Log
4079 Permission groups
4080 Permissions
4081 IP Filter
4082 Classificators
4083 Pub Messages
4084 Pub email subscribtions
4085 Mail Constructor
4086 Text manager
4087 Outgoing mails
4088 Sent mails
4089 User Managament
4090 User Permissions
4091 User Permissions Group
4092 System site map
4093 App site map
4094 Site modules
4095 Total APP users
4096 Total Accounts
4097 Inquiries received
4098 Subscriptions
4099 Users online
4100 January
4101 February
4102 March
4103 April
4104 May
4105 June
4106 July
4107 August
4108 September
4109 October
4110 November
4111 December
4112 Dashboard
4113 Date / Time
4114 Refresh rate
4115 Read more...
4116 WEB Users ONLINE by day
4117 WEB Users ONLINE by month
4118 APP System Users ONLINE by day
4119 APP System Users ONLINE by month
4120 CMS System Users ONLINE by day
4121 CMS System Users ONLINE by month
4122 Recent activity
4123 Time
4124 Message
4125 Delete classificators?
4126 Selected classificators will be permanently deleted and cannot be recovered. Confirm delete?
4127 Delete selected classificators
4128 Delete All C_ADDRESS classificators?
4129 All C_ADDRESS classificators will be permanently deleted and cannot be recovered. Confirm delete?
4130 Delete classificators
4131 CMS Classificators
4132 -- Select --
4133 Classificator title
4134 Delete article?
4135 Selected article will be permanently deleted and cannot be recovered. Confirm delete?
4136 Delete selected article
4137 Click to add
4138 NPK
4139 Article Title
4140 Article created
4141 Disabled
4142 Add new entry
4143 Delete apc cache?
4144 Selected keys will be permanently deleted and cannot be recovered. Confirm delete?
4145 Delete selected keys
4146 Clear whole APC cache table
4147 Whole APC cache table will be permanently cleared and cannot be recovered. Confirm clear?
4148 Clear all
4149 Cancel
4150 Enabled
4151 APC key
4152 Inserted
4153 Expires
4154 Delete whole cache table
4155 Disable APC
4156 Enable APC
4157 Delete Entry?
4158 Selected entries will be permanently deleted and cannot be recovered. Confirm delete?
4159 Delete selected entries
4160 Generate site map xml
4161 Site map xml generation done!
4162 APP New Site Map
4163 Site
4164 Title
4165 Full url
4166 /code
4167 Parent
4168 Ref Id
4169 Modified by
4170 Created
4171 Modified
4172 Enable
4173 Visible
4174 Invisible
4175 SiteMap
4176 Autocache
4177 Clone selected row as new
4178 Gen. insert sql
4179 Gen. XML's - sitemap | Kurpirkt | Salidzini
4180 Minify css
4181 Minify js
4182 Clear cache
4183 Show unused modules
4184 Change Administration folder
4185 Delete temporary table records from DB
4186 SYS New Site Map
4187 Created:
4188 Modified:
4189 Modified by:
4190 Copy To All Languages (*Everything*)
4191 Add new Page
4192 Copy data to all languages
4193 Order nr
4194 Page title
4195 Page url
4196 Redirect url
4197 Link Options
4198 Page enabled
4199 Indicates whether page has been enabled
4200 Page is visible
4201 Page visible
4202 Auto cache
4203 Automatically create page cache
4204 Static Content
4205 Create page with text manager
4206 Default page
4207 Languages base fallback page
4208 Request login
4209 Request 2FA
4210 Two factor authentication
4211 404 Page
4212 Page is 404 page not found
4213 Page is included in siyte map
4214 Simple settings
4215 Smarty container template
4216 Page description
4217 Page keywords
4218 Enable system Template
4219 Edit page content using Text Manager
4220 Module settings
4221 Load Application modules
4222 Module
4223 Call Action
4224 Load Javascript modules
4225 Load Cascade style sheet modules
4226 Permissions settings
4227 Link in interface permission CMS
4228 Menus settings
4229 MENUS to load with site map
4230 Link site Map to MENUS
4231 Edit Page
4232 Search for permissions
4233 eCommerce
4234 e-Commerce
4235 Edit menu data
4236 Menu name
4237 Menu description
4238 Menu settings
4239 Menu blocked
4240 Indicates whether menu is disabled or not
4241 Load subchildren
4242 Indicates whether to load subchildren or not
4243 Menu pub side
4244 Indicates whether menu is pub side or not
4245 Children to be loaded
4246 Search in loadable menus:
4247 Check all:
4248 No results found, please change the search and try again
4249 Add menu filter
4250 Search for menus
4251 Delete permissions?
4252 Selected permissions will be permanently deleted and cannot be recovered. Confirm delete?
4253 Delete selected permission
4254 CMS permissions
4255 Permission title
4256 Quick add
4257 Gen. sql
4258 Edit permission data
4259 Permission name
4260 Permission description
4261 Permission type
4262 Permission settings
4263 Permission blocked
4264 Indicates whether permission has been disabled or not
4265 Search in groups:
4266 Show selected:
4267 Add new permission
4268 Delete permission group?
4269 Selected groups will be permanently deleted and cannot be recovered. Confirm delete?
4270 Delete selected groups
4271 CMS permission groups
4272 Group title
4273 Edit group data
4274 Group name
4275 Group description
4276 Group settings
4277 Group blocked
4278 Indicates whether group has been disabled or not
4279 Linked permissions
4280 Search in permissions:
4281 Add new permissions
4282 Permission name start
4283 ex: 'PUB_START' => PUB_START_XXX / will create NEW/DELETE/ADD/SHOW by default. Will go to group permission title too
4284 Permission desc. phrase
4285 ex: 'new project' => Permission to XXX in new project / xxx => new/delete etc
4286 Additional permissions
4287 Can be separated with ',' for more and everything will get to 'uppercase', SINGLE words only, for space use '_'. ex: 'export' => NAME_START_EXPORT
4288 PUB permissions
4289 Add new group
4290 Search for parents
4291 Search in Modules:
4292 Reload
4293 Products
4294 Edit user profile
4295 Last IP
4296 Last location
4297 Login name
4298 Email
4299 CMS Language
4300 2FA Security
4301 Install the Google Authenticator application on your device for <a target='_blank' href='https://itunes.apple.com/app/google-authenticator/id388497605'>iOS</a> or <a target='_blank' href='https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2'>Android</a>. Scan barcode with Google Authenticator, if your device has a camera. If your device has no camera, enter account and key manually.
4302 Two Factor Authentication for Login
4303 Option Enabled
4304 Option Disabled
4305 User settings
4306 User blocked
4307 Indicates whether user has acces to system or not
4308 Reset 2FA
4309 Drop user linked 2fa
4310 leftmenu
4311 leftmenu_description paragraph...
4312 fullTable
4313 fullTable_description paragraph...
4314 Auto password gen
4315 Generates new password for change
4316 Password change
4317 Request user password change
4318 Change user password
4319 Auto generated user password - automatically sets password change upon first login!
4320 Copy password
4321 Copied!
4322 New password
4323 New password again
4324 Manage table fields
4325 Manage welcome portlets
4326 User permission groups
4327 Selected entry will be permanently deleted and cannot be recovered. Confirm delete?
4328 Delete selected entry
4329 Sender
4330 Phone
4331 subject
4332 Delete products?
4333 Selected products will be permanently deleted and cannot be recovered. Confirm delete?
4334 Delete selected products
4335 Delete users?
4336 Min password lenght is 6 symbols!
4337 Name
4338 IP
4339 Companies
4340 Delete mails?
4341 Selected mails will be permanently deleted and cannot be recovered. Confirm delete?
4342 Delete selected mails
4343 Outgoing mail overview
4344 Read
4345 Unread
4346 Z18
4347 maisonalexandra.lv
4348 Mail owner
4349 CC owner
4350 Date from
4351 Date till
4352 Sent
4353 Att.
4354 Priority
4355 Attempts
4356 Server
4357 Send now
4358 View
4359 Add new mail
4360 Disable all
4361 Enable all
4362 Change item delivery status
4363 Template not found!
4364 Pub Products
4365 Product Nr
4366 Product title
4367 Disc. enabled
4368 Disc. value
4369 Linked categories
4370 Add discount
4371 Disable discounts
4372 PUB
4373 CMS
4374 SYS
4375 Module title
4376 Module class name
4377 Module db name
4378 Module type
4379 Created by
4380 Product Attributes
4381 Delete Item?
4382 Selected items will be permanently deleted and cannot be recovered. Confirm delete?
4383 Delete selected items
4384 Delete All items?
4385 All items will be permanently deleted and cannot be recovered. Confirm delete?
4386 Delete items
4387 CMS Product Attributes
4388 Item code/name
4389 Item type
4390 Global Discount (%)
4391 Include blocked products
4392 Include discount products
4393 Apply only to selected Products
4394 Add new product
4395 Item created
4396 By
4397 Item Modified
4398 Product nr.
4399 Price
4400 New Price
4401 Discount value
4402 Units available
4403 Max buy per person
4404 Company
4405 Count classification
4406 Date
4407 Delivery settings
4408 Description data
4409 Edit description with WYSIWYG
4410 Content Files
4411 Image data
4412 Link categories
4413 Settings
4414 Product is disabled in pub shop
4415 Discount enabled
4416 Product discount enabled or not
4417 Available categories
4418 Filter
4419 Add all
4420 Add
4421 Remove
4422 Choosen categories
4423 Remove all
4424 Search in deliveries:
4425 Product full title
4426 Product url
4427 Keywords
4428 Product long description
4429 Content File url
4430 Show checked module
4431 Clone mod. from other pages
4432 Js
4433 Css
4434 Count
4435 Inc. Price
4436 Size/picture
4437 Size/picture II
4438 Disable
4439 Check all
4440 Add new row
4441 Create articles with WYSIWYG
4442 SVG Icon
4443 Categories
4444 Short desc.
4445 Url
4446 Button text
4447 Article long description
4448 Image settings
4449 Item Disabled
4450 Indicates whether item is Disabled or not
4451 Deliveries
4452 Delete deliver?
4453 Selected deliveries will be permanently deleted and cannot be recovered. Confirm delete?
4454 Delete selected deliveries
4455 Delivery classificators
4456 Dev. cost
4457 Change delivery status
4458 Orders
4459 Products sold
4460 Inventory Management
4461 Add new delivery
4462 Delivery cost
4463 cms Title
4464 Delivery enabled
4465 Indicates whether Deliver is enabled or not
4466 Delivery default
4467 Indicates whether Delivery is default or not
4468 Count to classificators
4469 Delete record?
4470 Selected records will be permanently deleted and cannot be recovered. Confirm delete?
4471 Delete selected record
4472 Product Count 2 Classificators / Orders / Storage
4473 Order send
4474 Buys module
4475 Order deleted
4476 Storage module
4477 Product partner
4478 Clear filter
4479 Delivery
4480 No data found!
4481 CMS Orders
4482 Pending
4483 Order number
4484 Order mail
4485 Order date
4486 Export .xls
4487 Export .pdf
4488 Edited
4489 Create a new copy
4490 Sales
4491 Inventory
4492 Shipping
4493 No data
4494 Error when saving data
4495 Edit Deliver data
4496 Add new Item
4497 Item settings
4498 Default opened
4499 Indicates whether item is opened by default
4500 Add new classificator
4501 Classificator name
4502 Classificator data
4503 Classificator type
4504 Classificator settings
4505 Classificator blocked
4506 Indicates whether Classificator is disabled or not
4507 Available in filter
4508 Edit Item data
4509 Edit classificator data
4510 Edit product data
4511 Link in interface permission PUB
4512 Manage your article with WYSIWYG
4513 Url segment
4514 My profile
4515 Edit my profile
4516 Activate
4517 Deactivate
4518 My settings
4519 CMS form theme
4520 User system variables
4521 msg_prop_val_iRecordsPerPage
4522 Change my password
4523 Old password
4524 My permission groups
4525 My permissions
4526 Edit message data
4527 First name
4528 Last name
4529 Product Count to Classificators / Orders / Storage
4530 Url already in use!
4531 No active product items
4532 No delivery methods selected
4533 No payment methods selected
4534 Product is disabled
4535 Row errors
4536 Product error
4537 Row error
4538 Prod. error
4539 Error
4540 Error(s)
4541 Errors
4542 Not a valid number specified!
4543 Payment methods
4544 Product short description
4545 Featured
4546 Product is featured or not
4547 2FA Login input code error!
4548 The username or password is incorrect!
4549 Delete translations?
4550 Selected translations will be permanently deleted and cannot be recovered. Confirm delete?
4551 Delete selected translations
4552 Clear all public translations?
4553 All public translations will be permanently deleted and cannot be recovered. Confirm delete?
4554 Delete all
4555 Cleanup public translations?
4556 Will perform cleanup procedure by deleting unused/untranslated messages.
4557 Perform cleanup
4558 System Public translations
4559 Linked pages
4560 Records
4561 Delete whole translation table
4562 Export translation data
4563 Import translation data
4564 Cleanup unused messages
4565 lorettasecret.lv
4566 Sent mail overview
4567 Page not found
4568 Page access error...
4569 The page you're looking for is not found!
4570 Back to Startpage
4571 Invalid telephone specified!
4572 Mail title
4573 Mail created
4574 Mail type
4575 Mail HTML content
4576 Mail settings
4577 Mail blocked
4578 Indicates whether mail is blocked or not
4579 Edit Mail data
4580 To
4581 Edit translation data
4582 Language translations
4583 User phone
4584 Reports
4585 Available reports
4586 Selected reports
4587 User is admin
4588 Set as primary company user
4589 newsletters subscription
4590 Indicates whether user is subscribed to zutenis.lv newsletters
4591 User activated
4592 Indicates whether user is activated
4593 Available Companies
4594 Selected Companies
4595 Something went wrong while saving user data!
4596 Preparing data for export...
4597 Exporting table data rows %nr%/%nr_max% ...
4598 Writing excel file!
4599 Export successfully finished without errors!
4600 Failed to export data, please contact administrator!
4601 Pub subscriptions
4602 Subscribed
4603 Edit subscribtion email
4604 Email subscribed
4605 Indicates whether Email is subscribed or not

View File

@ -0,0 +1,620 @@
3986 1 No result data found, please check your filter and try again!
3987 1 Menus
3988 1
3989 1 Yes
3990 1 No
3991 1 Delete menus?
3992 1 Selected menus will be permanently deleted and cannot be recovered. Confirm delete?
3993 1 Delete selected menus
3994 1 Cancel operation
3995 1 Please fill in the field!
3996 1 MSG_LOGO_TITLE
3997 1 Logout
3998 1 My profile ...
3999 1 Session will expire in:
4000 1 Session has expired! Time left:
4001 1 APP
4002 1 GOOGLE_ANALYTICS_CODE
4003 1 System menus
4004 1 Select
4005 1 Active
4006 1 Inactive
4007 1 ID
4008 1 Menu title
4009 1 Description
4010 1 Blocked
4011 1 Actions
4012 1 Edit
4013 1 Delete
4014 1 Add new
4015 1 Change item status
4016 1 Delete selected
4017 1 + Add new
4018 1 records from
4019 1 Table search
4020 1 Search
4021 1 Clear search
4022 1 Languages
4023 1 Delete languages?
4024 1 Selected languages will be permanently deleted and cannot be recovered. Confirm delete?
4025 1 Delete selected languages
4026 1 System Languages
4027 1 Language
4028 1 Country
4029 1 Code
4030 1 Order
4031 1 Type
4032 1 Default
4033 1 CMS Enabled
4034 1 User Management
4035 1 Min password length is 6 symbols!
4036 1 Passwords must match!
4037 1 Delete system user?
4038 1 Selected users will be permanently deleted and cannot be recovered. Confirm delete?
4039 1 Delete selected users
4040 1 Create QR code
4041 1 Create code
4042 1 Not a valid email address specified!
4043 1 Fields do not match!
4044 1 Qr code
4045 1 Secret key
4046 1 Issue
4047 1 User
4048 1 User name
4049 1 User surname
4050 1 User login
4051 1 Last login
4052 1 User email
4053 1 2FA
4054 1 User IP
4055 1 Users last location
4056 1 Clone user
4057 1 Login
4058 1 Passed site map doesn't exist!
4059 1 Save
4060 1 LORETTA SECRET
4061 1 BRSystems IT Solutions
4062 1 Username
4063 1 Password
4064 1 Sign in
4065 1 Two-factor authentication
4066 1 Enter the two-factor authentication code provided by the Google Authenticator app
4067 1 Back to login
4068 1 Welcome
4069 1 Site Map
4070 1 Module content
4071 1 APP Users
4072 1 Manage
4073 1 Cms users
4074 1 Site base
4075 1 Apc overview
4076 1 Cms messages
4077 1 App messages
4078 1 Action Log
4079 1 Permission groups
4080 1 Permissions
4081 1 IP Filter
4082 1 Classificators
4083 1 Pub Messages
4084 1 Pub email subscribtions
4085 1 Mail Constructor
4086 1 Text manager
4087 1 Outgoing mails
4088 1 Sent mails
4089 1 User Managament
4090 1 User Permissions
4091 1 User Permissions Group
4092 1 System site map
4093 1 App site map
4094 1 Site modules
4095 1 Total APP users
4096 1 Total Accounts
4097 1 Inquiries received
4098 1 Subscriptions
4099 1 Users online
4100 1 January
4101 1 February
4102 1 March
4103 1 April
4104 1 May
4105 1 June
4106 1 July
4107 1 August
4108 1 September
4109 1 October
4110 1 November
4111 1 December
4112 1 Dashboard
4113 1 Date / Time
4114 1 Refresh rate
4115 1 Read more...
4116 1 WEB Users ONLINE by day
4117 1 WEB Users ONLINE by month
4118 1 APP System Users ONLINE by day
4119 1 APP System Users ONLINE by month
4120 1 CMS System Users ONLINE by day
4121 1 CMS System Users ONLINE by month
4122 1 Recent activity
4123 1 Time
4124 1 Message
4125 1 Delete classificators?
4126 1 Selected classificators will be permanently deleted and cannot be recovered. Confirm delete?
4127 1 Delete selected classificators
4128 1 Delete All C_ADDRESS classificators?
4129 1 All C_ADDRESS classificators will be permanently deleted and cannot be recovered. Confirm delete?
4130 1 Delete classificators
4131 1 CMS Classificators
4132 1 -- Select --
4133 1 Classificator title
4134 1 Delete article?
4135 1 Selected article will be permanently deleted and cannot be recovered. Confirm delete?
4136 1 Delete selected article
4137 1 Click to add
4138 1 NPK
4139 1 Article Title
4140 1 Article created
4141 1 Disabled
4142 1 Add new entry
4143 1 Delete apc cache?
4144 1 Selected keys will be permanently deleted and cannot be recovered. Confirm delete?
4145 1 Delete selected keys
4146 1 Clear whole APC cache table
4147 1 Whole APC cache table will be permanently cleared and cannot be recovered. Confirm clear?
4148 1 Clear all
4149 1 Cancel
4150 1 Enabled
4151 1 APC key
4152 1 Inserted
4153 1 Expires
4154 1 Delete whole cache table
4155 1 Disable APC
4156 1 Enable APC
4157 1 Delete Entry?
4158 1 Selected entries will be permanently deleted and cannot be recovered. Confirm delete?
4159 1 Delete selected entries
4160 1 Generate site map xml
4161 1 Site map xml generation done!
4162 1 APP New Site Map
4163 1 Site
4164 1 Title
4165 1 Full url
4166 1 /code
4167 1 Parent
4168 1 Ref Id
4169 1 Modified by
4170 1 Created
4171 1 Modified
4172 1 Enable
4173 1 Visible
4174 1 Invisible
4175 1 SiteMap
4176 1 Autocache
4177 1 Clone selected row as new
4178 1 Gen. insert sql
4179 1 Gen. XML's - sitemap | Kurpirkt | Salidzini
4180 1 Minify css
4181 1 Minify js
4182 1 Clear cache
4183 1 Show unused modules
4184 1 Change Administration folder
4185 1 Delete temporary table records from DB
4186 1 SYS New Site Map
4187 1 Created:
4188 1 Modified:
4189 1 Modified by:
4190 1 Copy To All Languages (*Everything*)
4191 1 Add new Page
4192 1 Copy data to all languages
4193 1 Order nr
4194 1 Page title
4195 1 Page url
4196 1 Redirect url
4197 1 Link Options
4198 1 Page enabled
4199 1 Indicates whether page has been enabled
4200 1 Page is visible
4201 1 Page visible
4202 1 Auto cache
4203 1 Automatically create page cache
4204 1 Static Content
4205 1 Create page with text manager
4206 1 Default page
4207 1 Languages base fallback page
4208 1 Request login
4209 1 Request 2FA
4210 1 Two factor authentication
4211 1 404 Page
4212 1 Page is 404 page not found
4213 1 Page is included in siyte map
4214 1 Simple settings
4215 1 Smarty container template
4216 1 Page description
4217 1 Page keywords
4218 1 Enable system Template
4219 1 Edit page content using Text Manager
4220 1 Module settings
4221 1 Load Application modules
4222 1 Module
4223 1 Call Action
4224 1 Load Javascript modules
4225 1 Load Cascade style sheet modules
4226 1 Permissions settings
4227 1 Link in interface permission CMS
4228 1 Menus settings
4229 1 MENUS to load with site map
4230 1 Link site Map to MENUS
4231 1 Edit Page
4232 1 Search for permissions
4233 1 eCommerce
4234 1 e-Commerce
4235 1 Edit menu data
4236 1 Menu name
4237 1 Menu description
4238 1 Menu settings
4239 1 Menu blocked
4240 1 Indicates whether menu is disabled or not
4241 1 Load subchildren
4242 1 Indicates whether to load subchildren or not
4243 1 Menu pub side
4244 1 Indicates whether menu is pub side or not
4245 1 Children to be loaded
4246 1 Search in loadable menus:
4247 1 Check all:
4248 1 No results found, please change the search and try again
4249 1 Add menu filter
4250 1 Search for menus
4251 1 Delete permissions?
4252 1 Selected permissions will be permanently deleted and cannot be recovered. Confirm delete?
4253 1 Delete selected permission
4254 1 CMS permissions
4255 1 Permission title
4256 1 Quick add
4257 1 Gen. sql
4258 1 Edit permission data
4259 1 Permission name
4260 1 Permission description
4261 1 Permission type
4262 1 Permission settings
4263 1 Permission blocked
4264 1 Indicates whether permission has been disabled or not
4265 1 Search in groups:
4266 1 Show selected:
4267 1 Add new permission
4268 1 Delete permission group?
4269 1 Selected groups will be permanently deleted and cannot be recovered. Confirm delete?
4270 1 Delete selected groups
4271 1 CMS permission groups
4272 1 Group title
4273 1 Edit group data
4274 1 Group name
4275 1 Group description
4276 1 Group settings
4277 1 Group blocked
4278 1 Indicates whether group has been disabled or not
4279 1 Linked permissions
4280 1 Search in permissions:
4281 1 Add new permissions
4282 1 Permission name start
4283 1 ex: 'PUB_START' => PUB_START_XXX / will create NEW/DELETE/ADD/SHOW by default. Will go to group permission title too
4284 1 Permission desc. phrase
4285 1 ex: 'new project' => Permission to XXX in new project / xxx => new/delete etc
4286 1 Additional permissions
4287 1 Can be separated with ',' for more and everything will get to 'uppercase', SINGLE words only, for space use '_'. ex: 'export' => NAME_START_EXPORT
4288 1 PUB permissions
4289 1 Add new group
4290 1 Search for parents
4291 1 Search in Modules:
4292 1 Reload
4293 1 Products
4294 1 Edit user profile
4295 1 Last IP
4296 1 Last location
4297 1 Login name
4298 1 Email
4299 1 CMS Language
4300 1 2FA Security
4301 1 Install the Google Authenticator application on your device for <a target='_blank' href='https://itunes.apple.com/app/google-authenticator/id388497605'>iOS</a> or <a target='_blank' href='https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2'>Android</a>. Scan barcode with Google Authenticator, if your device has a camera. If your device has no camera, enter account and key manually.
4302 1 Two Factor Authentication for Login
4303 1 Option Enabled
4304 1 Option Disabled
4305 1 User settings
4306 1 User blocked
4307 1 Indicates whether user has acces to system or not
4308 1 Reset 2FA
4309 1 Drop user linked 2fa
4310 1 leftmenu
4311 1 leftmenu_description paragraph...
4312 1 fullTable
4313 1 fullTable_description paragraph...
4314 1 Auto password gen
4315 1 Generates new password for change
4316 1 Password change
4317 1 Request user password change
4318 1 Change user password
4319 1 Auto generated user password - automatically sets password change upon first login!
4320 1 Copy password
4321 1 Copied!
4322 1 New password
4323 1 New password again
4324 1 Manage table fields
4325 1 Manage welcome portlets
4326 1 User permission groups
4327 1 Selected entry will be permanently deleted and cannot be recovered. Confirm delete?
4328 1 Delete selected entry
4329 1 Sender
4330 1 Phone
4331 1 subject
4332 1 Delete products?
4333 1 Selected products will be permanently deleted and cannot be recovered. Confirm delete?
4334 1 Delete selected products
4335 1 Delete users?
4336 1 Min password lenght is 6 symbols!
4337 1 Name
4338 1 IP
4339 1 Companies
4340 1 Delete mails?
4341 1 Selected mails will be permanently deleted and cannot be recovered. Confirm delete?
4342 1 Delete selected mails
4343 1 Outgoing mail overview
4344 1 Read
4345 1 Unread
4346 1 Z18
4347 1 maisonalexandra.lv
4348 1 Mail owner
4349 1 CC owner
4350 1 Date from
4351 1 Date till
4352 1 Sent
4353 1 Att.
4354 1 Priority
4355 1 Attempts
4356 1 Server
4357 1 Send now
4358 1 View
4359 1 Add new mail
4360 1 Disable all
4361 1 Enable all
4362 1 Change item delivery status
4363 1 Template not found!
4364 1 Pub Products
4365 1 Product Nr
4366 1 Product title
4367 1 Disc. enabled
4368 1 Disc. value
4369 1 Linked categories
4370 1 Add discount
4371 1 Disable discounts
4372 1 PUB
4373 1 CMS
4374 1 SYS
4375 1 Module title
4376 1 Module class name
4377 1 Module db name
4378 1 Module type
4379 1 Created by
4380 1 Product Attributes
4381 1 Delete Item?
4382 1 Selected items will be permanently deleted and cannot be recovered. Confirm delete?
4383 1 Delete selected items
4384 1 Delete All items?
4385 1 All items will be permanently deleted and cannot be recovered. Confirm delete?
4386 1 Delete items
4387 1 CMS Product Attributes
4388 1 Item code/name
4389 1 Item type
4390 1 Global Discount (%)
4391 1 Include blocked products
4392 1 Include discount products
4393 1 Apply only to selected Products
4394 1 Add new product
4395 1 Item created
4396 1 By
4397 1 Item Modified
4398 1 Product nr.
4399 1 Price
4400 1 New Price
4401 1 Discount value
4402 1 Units available
4403 1 Max buy per person
4404 1 Company
4405 1 Count classification
4406 1 Date
4407 1 Delivery settings
4408 1 Description data
4409 1 Edit description with WYSIWYG
4410 1 Content Files
4411 1 Image data
4412 1 Link categories
4413 1 Settings
4414 1 Product is disabled in pub shop
4415 1 Discount enabled
4416 1 Product discount enabled or not
4417 1 Available categories
4418 1 Filter
4419 1 Add all
4420 1 Add
4421 1 Remove
4422 1 Choosen categories
4423 1 Remove all
4424 1 Search in deliveries:
4425 1 Product full title
4426 1 Product url
4427 1 Keywords
4428 1 Product long description
4429 1 Content File url
4430 1 Show checked module
4431 1 Clone mod. from other pages
4432 1 Js
4433 1 Css
4434 1 Count
4435 1 Inc. Price
4436 1 Size/picture
4437 1 Size/picture II
4438 1 Disable
4439 1 Check all
4440 1 Add new row
4441 1 Create articles with WYSIWYG
4442 1 SVG Icon
4443 1 Categories
4444 1 Short desc.
4445 1 Url
4446 1 Button text
4447 1 Article long description
4448 1 Image settings
4449 1 Item Disabled
4450 1 Indicates whether item is Disabled or not
4451 1 Deliveries
4452 1 Delete deliver?
4453 1 Selected deliveries will be permanently deleted and cannot be recovered. Confirm delete?
4454 1 Delete selected deliveries
4455 1 Delivery classificators
4456 1 Dev. cost
4457 1 Change delivery status
4458 1 Orders
4459 1 Products sold
4460 1 Inventory Management
4461 1 Add new delivery
4462 1 Delivery cost
4463 1 cms Title
4464 1 Delivery enabled
4465 1 Indicates whether Deliver is enabled or not
4466 1 Delivery default
4467 1 Indicates whether Delivery is default or not
4468 1 Count to classificators
4469 1 Delete record?
4470 1 Selected records will be permanently deleted and cannot be recovered. Confirm delete?
4471 1 Delete selected record
4472 1 Product Count 2 Classificators / Orders / Storage
4473 1 Order send
4474 1 Buys module
4475 1 Order deleted
4476 1 Storage module
4477 1 Product partner
4478 1 Clear filter
4479 1 Delivery
4480 1 No data found!
4481 1 CMS Orders
4482 1 Pending
4483 1 Order number
4484 1 Order mail
4485 1 Order date
4486 1 Export .xls
4487 1 Export .pdf
4488 1 Edited
4489 1 Create a new copy
4490 1 Sales
4491 1 Inventory
4492 1 Shipping
4493 1 No data
4494 1 Error when saving data
4495 1 Edit Deliver data
4496 1 Add new Item
4497 1 Item settings
4498 1 Default opened
4499 1 Indicates whether item is opened by default
4500 1 Add new classificator
4501 1 Classificator name
4502 1 Classificator data
4503 1 Classificator type
4504 1 Classificator settings
4505 1 Classificator blocked
4506 1 Indicates whether Classificator is disabled or not
4507 1 Available in filter
4508 1 Edit Item data
4509 1 Edit classificator data
4510 1 Edit product data
4511 1 Link in interface permission PUB
4512 1 Manage your article with WYSIWYG
4513 1 Url segment
4514 1 My profile
4515 1 Edit my profile
4516 1 Activate
4517 1 Deactivate
4518 1 My settings
4519 1 CMS form theme
4520 1 User system variables
4521 1 msg_prop_val_iRecordsPerPage
4522 1 Change my password
4523 1 Old password
4524 1 My permission groups
4525 1 My permissions
4526 1 Edit message data
4527 1 First name
4528 1 Last name
4529 1 Product Count to Classificators / Orders / Storage
4530 1 Url already in use!
4531 1 No active product items
4532 1 No delivery methods selected
4533 1 No payment methods selected
4534 1 Product is disabled
4535 1 Row errors
4536 1 Product error
4537 1 Row error
4538 1 Prod. error
4539 1 Error
4540 1 Error(s)
4541 1 Errors
4542 1 Not a valid number specified!
4543 1 Payment methods
4544 1 Product short description
4545 1 Featured
4546 1 Product is featured or not
4547 1 2FA Login input code error!
4548 1 The username or password is incorrect!
4549 1 Delete translations?
4550 1 Selected translations will be permanently deleted and cannot be recovered. Confirm delete?
4551 1 Delete selected translations
4552 1 Clear all public translations?
4553 1 All public translations will be permanently deleted and cannot be recovered. Confirm delete?
4554 1 Delete all
4555 1 Cleanup public translations?
4556 1 Will perform cleanup procedure by deleting unused/untranslated messages.
4557 1 Perform cleanup
4558 1 System Public translations
4559 1 Linked pages
4560 1 Records
4561 1 Delete whole translation table
4562 1 Export translation data
4563 1 Import translation data
4564 1 Cleanup unused messages
4565 1 lorettasecret.lv
4566 1 Sent mail overview
4567 1 Page not found
4568 1 Page access error...
4569 1 The page you're looking for is not found!
4570 1 Back to Startpage
4571 1 Invalid telephone specified!
4572 1 Mail title
4573 1 Mail created
4574 1 Mail type
4575 1 Mail HTML content
4576 1 Mail settings
4577 1 Mail blocked
4578 1 Indicates whether mail is blocked or not
4579 1 Edit Mail data
4580 1 To
4581 1 Edit translation data
4582 1 Language translations
4583 1 User phone
4584 1 Reports
4585 1 Available reports
4586 1 Selected reports
4587 1 User is admin
4588 1 Set as primary company user
4589 1 newsletters subscription
4590 1 Indicates whether user is subscribed to zutenis.lv newsletters
4591 1 User activated
4592 1 Indicates whether user is activated
4593 1 Available Companies
4594 1 Selected Companies
4595 1 Something went wrong while saving user data!
4596 1 Preparing data for export...
4597 1 Exporting table data rows %nr%/%nr_max% ...
4598 1 Writing excel file!
4599 1 Export successfully finished without errors!
4600 1 Failed to export data, please contact administrator!
4601 1 Pub subscriptions
4602 1 Subscribed
4603 1 Edit subscribtion email
4604 1 Email subscribed
4605 1 Indicates whether Email is subscribed or not

View File

@ -0,0 +1,4 @@
1 1 0 1 en U.K. English 1 0 1489013952 1489013952
7 0 1 1 lv Latvia Latviešu 1 0 1489418084 1565477303
9 0 2 0 en U.K. English 1 0 1541542927 1587856740
10 0 3 0 ru Russia Русский 1 0 1551523000 1587856741

View File

@ -0,0 +1,188 @@
1 azevadmin Administration /azevadmin/ /azevadmin/welcome 0 1 1 1 1 2 /azevadmin/login/ 1312029940 1519133420 1 0 0 0 1 1 1 0 1 0 0 1 0 0 0 0 0
2 login Login /azevadmin/login/ 1 1 1 2 0 0 0 1548841914 1 0 0 0 1 1 1 0 1 0 0 1 0 0 1 0 0
3 two-factor-authentication Two-factor authentication /azevadmin/login/two-factor-authentication/ 2 1 1 3 0 0 1546861060 1550501445 1 0 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
4 password-change Password change /azevadmin/login/password-change/ 2 1 1 4 0 0 1546861246 1550501481 1 0 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
6 welcome Welcome /azevadmin/welcome/ 1 1 1 6 1 2 /azevadmin/login 1315231663 1560251155 1 1 0 23 1 1 1 0 1 0 1 1 0 0 1 0 0
7 base Site base /azevadmin/base/ 1 1 1 7 1 2 /azevadmin/login/ 1315232886 1519137566 1 40 0 22 1 1 1 0 1 0 0 1 0 0 0 0 0
8 users Cms users /azevadmin/users/ 1 1 1 8 1 2 /azevadmin/login/ 1315233866 1519139181 1 20 0 20 1 1 1 0 1 0 0 1 0 0 0 0 0
9 languages Languages /azevadmin/base/languages/ 7 1 1 9 1 2 /azevadmin/login 1315234507 1550507023 1 5 0 28 1 1 1 0 1 0 0 1 0 0 1 0 1
10 menus Menus /azevadmin/base/menus/ 7 1 1 10 1 2 /azevadmin/login 1315234908 1550507066 1 10 0 32 1 1 1 0 1 0 0 1 0 0 1 0 1
11 management User Management /azevadmin/users/management/ 8 1 1 11 1 2 /azevadmin/login 1315303428 1550507072 1 10 0 18 1 1 1 0 1 0 0 1 0 0 1 0 1
12 permission-groups Permission groups /azevadmin/users/permission-groups/ 8 1 1 12 1 2 /azevadmin/login 1315303514 1550507077 1 15 0 17 1 1 1 0 1 0 0 1 0 0 1 0 1
13 permissions Permissions /azevadmin/users/permissions/ 8 1 1 13 1 2 /azevadmin/login 1315303595 1593683805 1 20 0 19 1 1 1 0 1 0 0 1 0 0 0 0 1
14 content Module content /azevadmin/content/ 1 1 1 14 1 2 /azevadmin/login/ 1315308974 1519144418 1 15 0 24 1 1 1 0 1 0 0 1 0 0 0 0 0
23 cms-messages Cms messages /azevadmin/base/cms-messages/ 7 1 1 23 1 2 /azevadmin/login 1315431735 1550507504 1 15 0 37 1 1 1 0 1 0 0 1 0 0 0 0 1
36 apc Apc overview /azevadmin/base/apc/ 7 1 1 36 1 2 /azevadmin/login 1317072926 1550507236 1 1 0 171 1 1 1 0 1 0 0 1 0 0 0 0 1
37 ip-filter IP Filter /azevadmin/users/ip-filter/ 8 1 1 37 1 2 /azevadmin/login 1317585198 1550507248 1 25 0 119 1 1 1 0 1 0 0 1 0 0 1 0 1
38 action-log Action Log /azevadmin/base/action-log/ 7 1 1 38 1 2 /azevadmin/login 1321569304 1550507252 1 30 0 177 1 1 1 0 1 0 0 1 0 0 0 0 1
46 app-messages App messages /azevadmin/base/app-messages/ 7 1 1 46 1 2 /azevadmin/login 1322554880 1550507507 1 20 0 36 1 1 1 0 1 0 0 1 0 0 1 0 1
135 manage Manage /azevadmin/manage/ 1 1 1 135 1 2 /azevadmin/login/ 1328044536 1519144950 1 18 0 81 1 1 1 0 1 0 0 1 0 0 0 0 0
141 mails Mail Constructor /azevadmin/content/mails/ 14 1 1 141 1 2 /azevadmin/login 1328485286 1556095982 1 15 0 75 1 1 1 0 1 0 0 1 0 0 1 0 1
259 mailsout Outgoing mails /azevadmin/manage/mailsout/ 135 1 1 259 1 2 /azevadmin/login 1338381281 1584996657 1 14 0 72 1 1 1 0 1 0 0 1 0 0 1 0 1
260 mailssent Sent mails /azevadmin/manage/mailssent/ 135 1 1 260 1 2 /azevadmin/login 1338381326 1556097578 1 15 0 73 1 1 1 0 1 0 0 1 0 0 1 0 1
261 classificators Classificators /azevadmin/content/classificators/ 14 1 1 261 1 2 /azevadmin/login 1338550438 1556106004 1 5 0 90 1 1 1 0 1 0 0 1 0 0 1 0 1
401 my-profile My profile /azevadmin/my-profile/ 1 1 1 401 1 2 /azevadmin/login 1347105343 1550507107 1 5 0 0 1 1 1 0 1 0 0 1 0 0 1 0 0
524 site site 0 0 7 524 0 0 1415452127 1588075986 1 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0
525 index Sākums /index/ Maison Alexandra 524 0 7 525 0 675 1415452145 1782913389 1 0 0 0 1 1 1 0 1 0 1 1 0 0 1 0 0
620 site-map Site Map /azevadmin/site-map/ 1 1 1 620 1 2 /azevadmin/login 1462202284 1549372729 1 10 0 258 1 1 1 0 1 0 0 1 0 0 0 0 0
621 system-site-map System site map /azevadmin/site-map/system-site-map/ 620 1 1 621 1 2 /azevadmin/login 1462205069 1550507286 1 5 0 252 1 1 1 0 1 0 0 1 0 0 0 0 1
624 app-site-map App site map /azevadmin/site-map/app-site-map/ 620 1 1 624 1 2 /azevadmin/login 1462208019 1550507292 1 10 0 257 1 1 1 0 1 0 0 0 0 0 0 0 1
648 text-manager Text manager /azevadmin/content/text-manager/ 14 1 1 648 1 2 /azevadmin/login 1487959488 1555714859 1 99 0 220 1 1 1 0 1 0 0 0 0 0 0 0 0
654 atruna Atruna /atruna/ Lietošanas noteikumi, privātuma politika un sīkdatnes. Vienkāršā ieraksta grāmatvedība! Tiešsaistes grāmatvedības programma individuālajiem komersantiem, pašnodarbinātajiem, biedrībām un zemnieku saimniecībām. 524 0 7 654 0 0 1488925148 1784760115 1 20 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
656 autortiesibas Copyrights /autortiesibas/ Lietošanas noteikumi, privātuma politika un sīkdatnes. Vienkāršā ieraksta grāmatvedība! Tiešsaistes grāmatvedības programma individuālajiem komersantiem, pašnodarbinātajiem, biedrībām un zemnieku saimniecībām. 524 0 7 656 0 0 1488925221 1588144529 1 20 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
677 app-users APP Users /azevadmin/app-users/ 1 \N 1 1 677 1 2 /azevadmin/login/ 1493401062 1519145674 1 17 0 224 1 1 1 0 1 0 0 0 0 0 0 0 0
678 user-managament User Managament /azevadmin/app-users/user-managament/ 677 1 1 678 1 2 /azevadmin/login 1493401513 1550507300 1 9 0 78 1 1 1 0 1 0 0 0 0 0 1 0 1
679 user-permissions User Permissions /azevadmin/app-users/user-permissions/ 677 \N 1 1 679 1 2 /azevadmin/login 1493401591 1550507306 1 10 0 239 1 1 1 0 1 0 0 0 0 0 1 0 1
680 user-permissions-group User Permissions Group /azevadmin/app-users/user-permissions-group/ 677 \N 1 1 680 1 2 /azevadmin/login 1493401664 1581411856 1 15 0 244 1 1 1 0 1 0 0 0 0 0 1 0 1
682 paroles-atgusana Password recovery /paroles-atgusana/ 524 0 7 682 0 0 1493481124 1784069516 1 15 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
686 index Home /index/ Vienkāršā ieraksta grāmatvedība! Tiešsaistes grāmatvedības programma individuālajiem komersantiem, pašnodarbinātajiem, biedrībām un zemnieku saimniecībām. Ērta dokumentu sagatavošana – rēķini, avansa rēķini, PNA, iesniegumi, u.c. Atskaišu sagatavošana un paraugi iesniegšanai EDS - ieņēmumu un izdevumu žurnāls, ceturkšņa atskaites, mikrouzņēmuma nodokļa atskaites, u.c. 524 0 9 525 0 675 1493745107 1782913389 1 0 0 0 1 1 1 0 1 0 1 0 0 0 1 0 0
709 disclaimer Disclaimer /disclaimer/ Terms of use, privacy policy and cookies. Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 524 0 9 654 0 0 1541534159 1784760115 1 20 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
710 copyrights Copyrights /copyrights/ Terms of use, privacy policy and cookies. Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 524 0 9 656 0 0 1541534170 1588144529 1 20 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
711 accounting-system-login Login page /accounting-system-login/ Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. System access - authentication. 524 0 9 801 0 0 1541534178 1588144524 1 5 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
712 user-profile User Profile /accounting-system/user-profile/ Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 767 0 9 804 1 675 /accounting-system-login/en 1541534186 1588144519 1 10 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0
713 password-recovery Password recovery /password-recovery/ System user password recovery. Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 524 0 9 682 0 0 1541534199 1784069516 1 15 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
714 user-manager User Manager /accounting-system/user-manager/ Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 767 0 9 805 1 675 /accounting-system-login/en 1541534210 1588144509 1 25 0 235 1 1 1 0 0 0 0 0 0 0 1 0 1
715 object-manager-2 Object manager /accounting-system/object-manager-2/ Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 767 0 9 828 1 675 /accounting-system-login/en 1541534219 1588144504 1 30 0 233 1 0 1 0 0 0 0 0 0 0 1 0 1
716 partners Partners /accounting-system/partners/ Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 767 0 9 793 1 675 /accounting-system-login/en 1541534226 1679648883 1 35 0 337 1 1 1 0 0 0 0 0 0 0 1 0 1
717 objects-managament Objects /accounting-system/objects-managament/ Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 767 0 9 818 1 675 /accounting-system-login/en 1541534248 1588144494 1 40 0 233 1 1 1 0 0 0 0 0 0 0 1 0 1
718 transactions Transactions /accounting-system/transactions/ Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 767 0 9 817 1 675 /accounting-system-login/en 1541534254 1597056846 8 45 0 341 1 1 1 0 0 0 0 0 0 0 1 0 1
719 data-input Accounting Management /accounting-system/data-input/ Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 767 0 9 794 1 675 /accounting-system-login/en 1541534264 1588144484 1 50 0 345 1 1 1 0 0 0 0 0 0 0 1 0 1
720 accounting-classificators Accounting cl. /accounting-system/accounting-classificators/ Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 767 0 9 816 1 675 /accounting-system-login/en 1541534270 1588144479 1 50 0 346 1 1 1 0 0 0 0 0 0 0 1 0 1
721 classificators Classificators /accounting-system/classificators/ Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 767 0 9 815 1 675 /accounting-system-login/en 1541534281 1609159793 8 45 0 358 1 1 1 0 0 0 0 0 0 0 1 0 1
722 account-requisites Company Requisites /accounting-system/account-requisites/ Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 767 0 9 802 1 675 /accounting-system-login/en 1541534300 1588144469 1 35 0 350 1 1 1 0 0 0 0 0 0 0 1 0 1
723 bug-error-management Bugs/Errors managemenet /accounting-system/bug-error-management/ Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 767 0 9 797 1 675 /accounting-system-login/en 1541534306 1588144464 1 105 0 419 1 1 1 0 0 0 0 0 0 0 1 0 1
724 time-accounting Time accounting /accounting-system/time-accounting/ Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 767 0 9 798 1 675 /accounting-system-login/en 1541534315 1588144459 1 105 0 366 1 1 1 0 0 0 0 0 0 0 1 0 1
726 reports Reports /accounting-system/reports/ Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 767 0 9 795 1 675 /accounting-system-login/en 1541534333 1588144454 1 55 0 374 1 1 1 0 0 0 0 0 0 0 1 0 1
734 send-system-error Send System Error /accounting-system/send-system-error/ Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 767 0 9 786 1 675 /accounting-system-login/en 1544379206 1588144434 1 105 0 418 1 1 1 0 0 0 0 0 0 0 1 0 1
739 piekluves-kluda Access Error /piekluves-kluda/ Loretta Secret 524 0 7 739 0 0 1546079609 1782914010 1 5 0 0 1 1 1 0 1 1 0 0 0 0 1 0 0
741 pub-messages Pub Messages /azevadmin/content/pub-messages/ 14 \N 1 1 741 1 2 /azevadmin/login 1545916628 1550507519 1 5 0 296 1 1 1 0 1 0 0 0 0 0 0 0 1
742 pierakstities subscribe /pierakstities/ Pierakstīšanās uz jaunumu saņemšanu e-pastā! 524 0 7 742 0 0 1545922833 1781695326 1 5 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
744 atrakstities unsubscribe /atrakstities/ Atrakstīšanās no jaunumu saņemšanu e-pastā! 524 0 7 744 0 0 1545933944 1781774551 1 5 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
745 pub-email-subscribtions Pub email subscribtions /azevadmin/content/pub-email-subscribtions/ 14 1 1 745 1 2 /azevadmin/login 1545941495 1550507333 1 6 0 300 1 1 1 0 1 0 0 0 0 0 0 0 1
746 sazinies-ar-mums Contact us /sazinies-ar-mums/ Saziņas forma tiešsaistē. 524 \N 0 7 746 0 0 1546346508 1781698510 1 10 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
748 par-mums Par mums /par-mums/ Vairāk par mums 524 0 7 748 0 0 1546346526 1784760161 1 5 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
754 system-dashboard System Dashboard /accounting-system/system-dashboard/ Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 767 0 9 775 1 675 /accounting-system-login/en 1547453291 1603452687 8 20 0 0 1 1 1 0 0 0 0 0 0 0 1 0 1
757 site-modules Site modules /azevadmin/site-map/site-modules/ 620 1 1 757 1 2 /azevadmin/login 1548075102 1550507552 1 20 0 304 1 1 1 0 1 0 0 0 0 0 0 0 1
759 page-not-found Page not found /azevadmin/page-not-found/ 1 1 1 759 1 2 /azevadmin/login 1550585794 1550586139 1 1 0 23 1 1 1 0 1 1 1 0 0 0 1 0 0
760 account-selection Company selection /accounting-system/account-selection/ Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 767 0 9 803 1 675 /accounting-system-login/en 1549382858 1616183364 1 10 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0
761 balance Balance /accounting-system/balance/ Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 767 0 9 796 1 675 /accounting-system-login/en 1549382916 1588144449 1 60 0 420 1 1 1 0 0 0 0 0 0 0 1 0 1
762 sikdatnes Cookies /sikdatnes/ Lietošanas noteikumi, privātuma politika un sīkdatnes. 524 0 7 762 0 0 1549469297 1781697108 1 20 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
763 cookies Cookies /cookies/ Terms of use, privacy policy and cookies. Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 524 0 9 762 0 0 1549469297 1781697108 1 20 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
764 buj FAQ /buj/ Lietotāju biežāk uzdotie jautājumi un mūsu sniegtās atbildes. Vienkāršā ieraksta grāmatvedība! Tiešsaistes grāmatvedības programma individuālajiem komersantiem, pašnodarbinātajiem, biedrībām un zemnieku saimniecībām. 524 0 7 764 0 0 1549470086 1784760143 1 15 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
765 faq FAQ /faq/ Frequently asked questions of users and answers provided by us. Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 524 0 9 764 0 0 1549470086 1784760143 1 15 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
767 accounting-system App system /accounting-system/ /accounting-system/system-dashboard/en Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 524 0 9 814 1 675 /accounting-system-login/en 1550574442 1588144379 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0
768 password-change Password change /accounting-system/password-change/ 767 0 9 806 0 0 1550575428 1588144424 1 5 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0
775 sistemnaya-panel System Dashboard /sistema-ucheta/sistemnaya-panel/ Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 814 0 10 775 1 675 /voyti-v-sistemu-ucheta/ru 1556106577 1603452687 8 20 0 0 1 1 1 0 0 0 0 0 0 0 1 0 1
777 iframe-reports Iframe reports /accounting-system/reports/iframe-reports/ Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 726 0 9 778 1 675 /accounting-system-login/en 1556869251 1588144374 1 55 0 374 1 1 1 0 0 0 0 0 0 0 1 0 1
778 iframe-otchety Iframe reports /sistema-ucheta/otchety/iframe-otchety/ Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 795 0 10 778 1 675 /voyti-v-sistemu-ucheta/ru 1556869258 1588144374 1 55 0 374 1 1 1 0 0 0 0 0 0 0 1 0 1
779 two-factor Two-factor authentication /accounting-system-login/two-factor/ Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 711 0 9 780 0 0 1559041078 1726757824 1 5 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0
780 dva-faktora Two-factor authentication /voyti-v-sistemu-ucheta/dva-faktora/ Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 801 0 10 780 0 0 1559041078 1726757824 1 5 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0
783 subscription Subscription /accounting-system/subscription/ Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 767 0 9 784 1 675 /accounting-system-login/en 1563886260 1588144369 1 20 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1
784 abonement Subscription /sistema-ucheta/abonement/ Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 814 0 10 784 1 675 /voyti-v-sistemu-ucheta/ru 1563886260 1588144369 1 20 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1
786 soobshchit-ob-oshibke-sistemy Send System Error /sistema-ucheta/soobshchit-ob-oshibke-sistemy/ Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 814 0 10 786 1 675 /voyti-v-sistemu-ucheta/ru 1564691532 1588144434 1 105 0 418 1 1 1 0 0 0 0 0 0 0 1 0 1
787 index Home /index/ Vienkāršā ieraksta grāmatvedība! Tiešsaistes grāmatvedības programma individuālajiem komersantiem, pašnodarbinātajiem, biedrībām un zemnieku saimniecībām. Ērta dokumentu sagatavošana – rēķini, avansa rēķini, PNA, iesniegumi, u.c. Atskaišu sagatavošana un paraugi iesniegšanai EDS - ieņēmumu un izdevumu žurnāls, ceturkšņa atskaites, mikrouzņēmuma nodokļa atskaites, u.c. 524 0 10 525 0 0 1565086733 1782913389 1 0 0 0 1 1 1 0 1 0 1 0 0 0 1 0 0
788 about-us about us /about-us/ More about us - our mission, vision and values. Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 524 0 9 748 0 0 1565086751 1784760161 1 5 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
789 o-nas about us /o-nas/ Больше о нас - наша миссия, видение и ценности. Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 524 0 10 748 0 0 1565086751 1784760161 1 5 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
790 contact-us Contact us /contact-us/ Online communication form. Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 524 \N 0 9 746 0 0 1565086840 1781698510 1 10 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
791 svyazatsya-s-nami Contact us /svyazatsya-s-nami/ Форма онлайн общения. Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 524 \N 0 10 746 0 0 1565086840 1781698510 1 10 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
792 czv FAQ /czv/ Часто задаваемые вопросы пользователей и ответы, предоставленные нами. Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 524 0 10 764 0 0 1565086860 1784760143 1 15 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
793 partnery Partners /sistema-ucheta/partnery/ Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 814 0 10 793 1 675 /voyti-v-sistemu-ucheta/ru 1565086937 1679648883 1 35 0 337 1 1 1 0 0 0 0 0 0 0 1 0 1
794 vvod-dannykh Accounting Management /sistema-ucheta/vvod-dannykh/ Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 814 0 10 794 1 675 /voyti-v-sistemu-ucheta/ru 1565086966 1588144484 1 50 0 345 1 1 1 0 0 0 0 0 0 0 1 0 1
795 otchety Reports /sistema-ucheta/otchety/ Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 814 0 10 795 1 675 /voyti-v-sistemu-ucheta/ru 1565086991 1588144454 1 55 0 374 1 1 1 0 0 0 0 0 0 0 1 0 1
796 balans Balance /sistema-ucheta/balans/ Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 814 0 10 796 1 675 /voyti-v-sistemu-ucheta/ru 1565087060 1588144449 1 60 0 420 1 1 1 0 0 0 0 0 0 0 1 0 1
797 menedzhment-oshibky Bugs/Errors managemenet /sistema-ucheta/menedzhment-oshibky/ Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 814 0 10 797 1 675 /voyti-v-sistemu-ucheta/ru 1565087072 1588144464 1 105 0 419 1 1 1 0 0 0 0 0 0 0 1 0 1
798 otslezhivaniye-vremeni Time accounting /sistema-ucheta/otslezhivaniye-vremeni/ Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 814 0 10 798 1 675 /voyti-v-sistemu-ucheta/ru 1565087091 1588144459 1 105 0 366 1 1 1 0 0 0 0 0 0 0 1 0 1
801 voyti-v-sistemu-ucheta Login page /voyti-v-sistemu-ucheta/ Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. Доступ к системе - аутентификация. 524 0 10 801 0 0 1565092294 1588144524 1 5 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
802 dannyye-scheta Company Requisites /sistema-ucheta/dannyye-scheta/ Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 814 0 10 802 1 675 /voyti-v-sistemu-ucheta/ru 1565092577 1588144469 1 35 0 350 1 1 1 0 0 0 0 0 0 0 1 0 1
803 vybor-akkaunta Company selection /sistema-ucheta/vybor-akkaunta/ Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 814 0 10 803 1 675 /voyti-v-sistemu-ucheta/ru 1565092587 1616183364 1 10 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0
804 profil-polzovatelya User Profile /sistema-ucheta/profil-polzovatelya/ Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 814 0 10 804 1 675 /voyti-v-sistemu-ucheta/ru 1565092710 1588144519 1 10 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0
805 upravleniye-polzovatelyami User Manager /sistema-ucheta/upravleniye-polzovatelyami/ Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 814 0 10 805 1 675 /voyti-v-sistemu-ucheta/ru 1565092744 1588144509 1 25 0 235 1 1 1 0 0 0 0 0 0 0 1 0 1
806 smenit-parol Password change /sistema-ucheta/smenit-parol/ 814 0 10 806 0 0 1565607516 1588144424 1 5 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0
807 subscribe subscribe /subscribe/ Pierakstīšanās uz jaunumu saņemšanu e-pastā! Vienkāršā ieraksta grāmatvedība! Tiešsaistes grāmatvedības programma individuālajiem komersantiem, pašnodarbinātajiem, biedrībām un zemnieku saimniecībām. 524 0 9 742 0 0 1565609330 1781695326 1 5 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
808 podpisyvatsya subscribe /podpisyvatsya/ Подпишитесь на рассылку по электронной почте! Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 524 0 10 742 0 0 1565609330 1781695326 1 5 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
809 unsubscribe unsubscribe /unsubscribe/ Unsubscribe from receiving news by e-mail! Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 524 0 9 744 0 0 1565609338 1781774551 1 5 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
810 otpisyvatsya unsubscribe /otpisyvatsya/ Отписаться от получения новостей по электронной почте! Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 524 0 10 744 0 0 1565609338 1781774551 1 5 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
811 access-error Access Error /access-error/ System access error, the page or file you are looking for is no longer available! Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 524 0 9 739 0 0 1565609350 1782914010 1 5 0 0 1 1 1 0 1 1 0 0 0 0 1 0 0
812 oshibka-dostupa Access Error /oshibka-dostupa/ Ошибка доступа к системе, искомая страница или файл больше не доступны! Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 524 0 10 739 0 0 1565609350 1782914010 1 5 0 0 1 1 1 0 1 1 0 0 0 0 1 0 0
813 pechenye Cookies /pechenye/ Условия использования, политика конфиденциальности и куки. Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 524 0 10 762 0 0 1565609391 1781697108 1 20 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
814 sistema-ucheta App system /sistema-ucheta/ /sistema-ucheta/sistemnaya-panel/ru Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 524 0 10 814 1 675 /voyti-v-sistemu-ucheta/ru 1565609450 1588144379 1 1 0 0 1 1 1 0 1 0 0 0 0 0 0 0 0
815 klassifikatory Classificators /sistema-ucheta/klassifikatory/ Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 814 0 10 815 1 675 /voyti-v-sistemu-ucheta/ru 1565609533 1609159793 8 45 0 358 1 1 1 0 0 0 0 0 0 0 1 0 1
816 klassifikatory-bukhgalterskogo-ucheta Accounting cl. /sistema-ucheta/klassifikatory-bukhgalterskogo-ucheta/ Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 814 0 10 816 1 675 /voyti-v-sistemu-ucheta/ru 1565609549 1588144479 1 50 0 346 1 1 1 0 0 0 0 0 0 0 1 0 1
817 operatsii Transactions /sistema-ucheta/operatsii/ Простой вводный учет! Онлайн-бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 814 0 10 817 1 675 /voyti-v-sistemu-ucheta/ru 1565609575 1597056846 8 45 0 341 1 1 1 0 0 0 0 0 0 0 1 0 1
818 upravleniye-obyektami Objects /sistema-ucheta/upravleniye-obyektami/ Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 814 0 10 818 1 675 /voyti-v-sistemu-ucheta/ru 1565609624 1588144494 1 40 0 233 1 1 1 0 0 0 0 0 0 0 1 0 1
819 vosstanovleniye-parolya Password recovery /vosstanovleniye-parolya/ Восстановление пароля пользователя системы. Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 524 0 10 682 0 0 1565609642 1784069516 1 15 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
820 avtorskiye-prava Copyrights /avtorskiye-prava/ Условия использования, политика конфиденциальности и куки. Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 524 0 10 656 0 0 1565609662 1588144529 1 20 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
821 ogovorki Disclaimer /ogovorki/ Условия использования, политика конфиденциальности и куки. Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 524 0 10 654 0 0 1565609670 1784760115 1 20 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
823 unified-objects Unified Objects /accounting-system/unified-objects/ Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 767 0 9 824 1 675 /accounting-system-login/en 1566474239 1595851649 8 45 0 233 1 1 1 0 0 0 0 0 0 0 1 0 1
824 obshchiye-obyekty Unified Objects /sistema-ucheta/obshchiye-obyekty/ Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 814 0 10 824 1 675 /voyti-v-sistemu-ucheta/ru 1566474239 1595851649 8 45 0 233 1 1 1 0 0 0 0 0 0 0 1 0 1
826 documents Documents /accounting-system/documents/ Vienkāršā ieraksta grāmatvedība! Tiešsaistes grāmatvedības programma individuālajiem komersantiem, pašnodarbinātajiem, biedrībām un zemnieku saimniecībām. 767 0 9 827 1 675 /accounting-system-login/en 1573031461 1593183731 1 105 0 0 1 1 1 0 0 0 0 0 0 0 1 0 1
827 dokumenty Documents /sistema-ucheta/dokumenty/ Vienkāršā ieraksta grāmatvedība! Tiešsaistes grāmatvedības programma individuālajiem komersantiem, pašnodarbinātajiem, biedrībām un zemnieku saimniecībām. 814 0 10 827 1 675 /voyti-v-sistemu-ucheta/ru 1573031461 1593183731 1 105 0 0 1 1 1 0 0 0 0 0 0 0 1 0 1
828 upravleniye-obyektom-2 Object manager /sistema-ucheta/upravleniye-obyektom-2/ Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 814 0 10 828 1 675 /voyti-v-sistemu-ucheta/ru 1580986211 1588144504 1 30 0 233 1 0 1 0 0 0 0 0 0 0 1 0 1
829 registracija Reģistrācija /registracija/ Lietotāja pieteikums / reģistrācijas forma sistēmas lietošanai. Vienkāršā ieraksta grāmatvedība! Tiešsaistes grāmatvedības programma individuālajiem komersantiem, pašnodarbinātajiem, biedrībām un zemnieku saimniecībām. Sistēmas piekļuve – autentifikācija. 524 0 7 829 0 0 1584945535 1784069007 1 25 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
830 registration Register page /registration/ User application / registration form for using the system. Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. System access - authentication. 524 0 9 829 0 0 1584945535 1784069007 1 25 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
831 registratsiya Register page /registratsiya/ Пользовательское приложение / регистрационная форма для использования системы. Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. Доступ к системе - аутентификация. 524 0 10 829 0 0 1584945535 1784069007 1 25 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
832 lietosanas-noteikumi Lietošanas noteikumi /lietosanas-noteikumi/ Lietošanas noteikumi, privātuma politika un sīkdatnes. 524 0 7 832 0 0 1584968853 1784761065 1 20 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
833 terms-of-use terms of use /terms-of-use/ Terms of use, privacy policy and cookies. Simple entry accounting! Online accounting program for sole proprietors, self-employed, associations and farms. 524 0 9 832 0 0 1584968853 1784761065 1 20 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
834 usloviya-ekspluatatsii terms of use /usloviya-ekspluatatsii/ Условия использования, политика конфиденциальности и куки. Простой входной учет! Онлайновая бухгалтерская программа для индивидуальных предпринимателей, индивидуальных предпринимателей, ассоциаций и фермерских хозяйств. 524 0 10 832 0 0 1584968853 1784761065 1 20 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
840 pub-export Pub export /pub-export/ 524 0 7 840 0 0 1516626023 1588144349 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0
841 pub-export Pub export /pub-export/ 524 \N 0 9 840 0 0 1588075560 1588144349 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0
842 pub-export Pub export /pub-export/ 524 \N 0 10 840 0 0 1588075560 1588144349 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0
844 route-pages Route Pages /accounting-system/documents/route-pages/ 826 0 9 845 1 675 /accounting-system-login/en 1589974376 1593442423 1 105 0 487 1 1 1 0 0 0 0 0 0 0 1 0 1
845 stranitsy-marshruta Route Pages /sistema-ucheta/dokumenty/stranitsy-marshruta/ 827 0 10 845 1 675 /voyti-v-sistemu-ucheta/ru 1589974376 1593442423 1 105 0 487 1 1 1 0 0 0 0 0 0 0 1 0 1
847 incoming-documents Incoming Doc /accounting-system/documents/incoming-documents/ 826 0 9 848 1 675 /accounting-system-login/en 1591192981 1593442465 1 105 0 494 1 1 1 0 0 0 0 0 0 0 1 0 1
848 vkhodyashchiye-dokumenty Incoming Doc /sistema-ucheta/dokumenty/vkhodyashchiye-dokumenty/ 827 0 10 848 1 675 /voyti-v-sistemu-ucheta/ru 1591192981 1593442465 1 105 0 494 1 1 1 0 0 0 0 0 0 0 1 0 1
856 outgoing-documents Outgoing Doc. /accounting-system/documents/outgoing-documents/ 826 0 9 857 1 675 /accounting-system-login/en 1591272842 1630532892 1 105 0 370 1 1 1 0 0 0 0 0 0 0 1 0 1
857 iskhodyashchiye-dokumenty Outgoing Doc. /sistema-ucheta/dokumenty/iskhodyashchiye-dokumenty/ 827 0 10 857 1 675 /voyti-v-sistemu-ucheta/ru 1591272842 1630532892 1 105 0 370 1 1 1 0 0 0 0 0 0 0 1 0 1
859 visitors-register Visitors Register /accounting-system/visitors-register/ 767 0 9 860 1 675 /accounting-system-login/en 1603898861 1603899223 8 155 0 498 1 1 1 0 0 0 0 0 0 0 1 0 1
860 visitors-register Visitors Register /sistema-ucheta/visitors-register/ 814 0 10 860 1 675 /voyti-v-sistemu-ucheta/ru 1603898861 1603899223 8 155 0 498 1 1 1 0 0 0 0 0 0 0 1 0 1
862 house-management Association /accounting-system/house-management/ 767 0 9 863 1 675 /accounting-system-login/en 1608205788 1609955891 1 105 0 512 1 1 1 0 0 0 0 0 0 0 1 0 1
863 upravleniye-domom Association /sistema-ucheta/upravleniye-domom/ 814 0 10 863 1 675 /voyti-v-sistemu-ucheta/ru 1608205788 1609955891 1 105 0 512 1 1 1 0 0 0 0 0 0 0 1 0 1
868 meters Apartment meters /accounting-system/house-management/meters/ 862 0 9 869 1 675 /accounting-system-login/en 1608212658 1609956190 1 105 0 515 1 1 1 0 0 0 0 0 0 0 1 0 1
869 schetchiki Apartment meters /sistema-ucheta/upravleniye-domom/schetchiki/ 863 0 10 869 1 675 /voyti-v-sistemu-ucheta/ru 1608212658 1609956190 1 105 0 515 1 1 1 0 0 0 0 0 0 0 1 0 1
871 meter-readings Meter readings /accounting-system/house-management/meter-readings/ 862 0 9 872 1 675 /accounting-system-login/en 1608300879 1769769874 1 105 0 514 1 1 1 0 0 0 0 0 0 0 1 0 1
872 pokazaniya-schetchika Meter readings /sistema-ucheta/upravleniye-domom/pokazaniya-schetchika/ 863 0 10 872 1 675 /voyti-v-sistemu-ucheta/ru 1608300879 1769769874 1 105 0 514 1 1 1 0 0 0 0 0 0 0 1 0 1
875 universal-data-access Universal Data Access /accounting-system/universal-data-access/ Vienkāršā ieraksta grāmatvedība! Tiešsaistes grāmatvedības programma individuālajiem komersantiem, pašnodarbinātajiem, biedrībām un zemnieku saimniecībām. 767 0 9 876 0 0 1609942421 1609956497 1 46 0 0 1 1 1 0 0 0 0 0 0 0 1 0 1
876 universalnyy-dostup-k-dannym Universal Data Access /sistema-ucheta/universalnyy-dostup-k-dannym/ Vienkāršā ieraksta grāmatvedība! Tiešsaistes grāmatvedības programma individuālajiem komersantiem, pašnodarbinātajiem, biedrībām un zemnieku saimniecībām. 814 0 10 876 0 0 1609942421 1609956497 1 46 0 0 1 1 1 0 0 0 0 0 0 0 1 0 1
878 datu-imports Datu imports /accounting-system/datu-imports/ 767 0 9 879 1 675 /accounting-system-login/en 1612435808 1615906335 8 60 0 528 1 1 1 0 0 0 0 0 0 0 1 0 1
879 datu-imports Datu imports /sistema-ucheta/datu-imports/ 814 0 10 879 1 675 /voyti-v-sistemu-ucheta/ru 1612435808 1615906335 8 60 0 528 1 1 1 0 0 0 0 0 0 0 1 0 1
884 two-factor-setup Two-Factor setup /accounting-system-login/two-factor-setup/ 711 \N 0 9 885 0 0 1726765272 1726765272 1 5 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0
885 dvukhfaktornaya-nastroyka Two-Factor setup /voyti-v-sistemu-ucheta/dvukhfaktornaya-nastroyka/ 801 \N 0 10 885 0 0 1726765272 1726765272 1 5 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0
887 plan-pricing Plan Pricing /plan-pricing/ 524 \N 0 9 888 0 0 1775206675 1775207035 1 70 0 0 1 1 1 0 1 1 0 0 0 0 1 0 0
888 plan-pricing Plan Pricing /plan-pricing/ 524 \N 0 10 888 0 0 1775206675 1775207035 1 70 0 0 1 1 1 0 1 1 0 0 0 0 1 0 0
889 e-commerce e-Commerce /azevadmin/e-commerce/ 1 \N 1 1 889 1 2 /azevadmin/login 1777018342 1777018564 1 16 0 474 1 1 1 0 1 0 0 0 0 0 0 0 0
890 products Products /azevadmin/e-commerce/products/ 889 \N 1 1 890 1 2 /azevadmin/login 1777019714 1777287249 1 5 0 478 1 1 1 0 1 0 0 0 0 0 1 0 1
891 product-attributes Product Attributes /azevadmin/e-commerce/product-attributes/ 889 \N 1 1 891 1 2 /azevadmin/login 1777023737 1777289327 1 6 0 483 1 1 1 0 1 0 0 0 0 0 1 0 1
892 deliveries Delivery /azevadmin/e-commerce/deliveries/ 889 \N 1 1 892 1 2 /azevadmin/login 1777285573 1783326764 1 20 0 491 1 1 1 0 1 0 0 0 0 0 1 0 1
893 orders Orders /azevadmin/e-commerce/orders/ 889 \N 1 1 893 1 2 /azevadmin/login 1777285623 1777287237 1 1 0 487 1 1 1 0 1 0 0 0 0 0 1 0 1
894 sales Sales /azevadmin/e-commerce/sales/ 889 \N 1 1 894 1 2 /azevadmin/login 1777286161 1777287370 1 15 0 497 1 1 1 0 1 0 0 0 0 0 1 0 1
895 inventory Inventory /azevadmin/e-commerce/inventory/ 889 \N 1 1 895 1 2 /azevadmin/login 1777286634 1777287364 1 10 0 463 1 1 1 0 1 0 0 0 0 0 1 0 1
896 grozs grozs /grozs/ 524 \N 0 7 896 0 0 1781857265 1781879300 1 35 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
897 grozs grozs /grozs/ 524 \N 0 9 896 0 0 1781857265 1781879300 1 35 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
898 grozs grozs /grozs/ 524 \N 0 10 896 0 0 1781857265 1781879300 1 35 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
899 veikals Veikals /veikals/ 524 \N 0 7 899 0 0 1782483539 1783070454 1 35 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
900 veikals Veikals /veikals/ 524 \N 0 9 899 0 0 1782483539 1783070454 1 35 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
901 veikals Veikals /veikals/ 524 \N 0 10 899 0 0 1782483539 1783070454 1 35 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
902 ienakt Ienākt /ienakt/ 524 \N 0 7 902 0 0 1784068209 1784068219 1 25 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
903 login Login /login/ 524 \N 0 9 902 0 0 1784068209 1784068219 1 25 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
904 login Login /login/ 524 \N 0 10 902 0 0 1784068209 1784068219 1 25 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
905 lietotaja-profils Lietotāja profils /lietotaja-profils/ 524 \N 0 7 905 0 0 1784069456 1784738983 1 25 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
906 lietotaja-profils Lietotāja profils /lietotaja-profils/ 524 \N 0 9 905 0 0 1784069456 1784738983 1 25 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
907 lietotaja-profils Lietotāja profils /lietotaja-profils/ 524 \N 0 10 905 0 0 1784069456 1784738983 1 25 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
908 meklet Meklēt /meklet/ 524 \N 0 7 908 0 0 1784207540 1784207540 1 0 0 0 1 1 1 0 1 0 1 0 0 0 1 0 0
909 meklet Meklēt /meklet/ 524 \N 0 9 908 0 0 1784207540 1784207540 1 0 0 0 1 1 1 0 1 0 1 0 0 0 1 0 0
910 // 524 \N 0 10 908 0 0 1784207540 1784207540 1 0 0 0 1 1 1 0 1 0 1 0 0 0 1 0 0
911 atgriesanas-politika Atgriešanas politika /atgriesanas-politika/ 524 \N 0 7 911 0 0 1784893304 1784893304 1 21 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
912 return-policy Return policy /return-policy/ 524 \N 0 9 911 0 0 1784893304 1784893304 1 20 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
913 // 524 \N 0 10 911 0 0 1784893304 1784893304 1 20 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
914 maksajumu-politika Maksājumu politika /maksajumu-politika/ 524 \N 0 7 914 0 0 1784893371 1784893632 1 21 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
915 payment-policy Payment policy /payment-policy/ 524 \N 0 9 914 0 0 1784893371 1784893632 1 21 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
916 maksajumu-politika Maksājumu politika /maksajumu-politika/ 524 \N 0 10 914 0 0 1784893371 1784893632 1 21 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
917 piegades-politika Piegādes politika /piegades-politika/ 524 \N 0 7 917 0 0 1784893512 1784893512 1 23 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
918 // 524 \N 0 9 917 0 0 1784893512 1784893512 1 20 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
919 // 524 \N 0 10 917 0 0 1784893512 1784893512 1 20 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
920 privatuma-politika Privātuma politika /privatuma-politika/ 524 \N 0 7 920 0 0 1784893655 1784893655 1 24 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
921 // 524 \N 0 9 920 0 0 1784893655 1784893655 1 20 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
922 // 524 \N 0 10 920 0 0 1784893655 1784893655 1 20 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
923 paroles-maina Paroles maiņa /lietotaja-profils/paroles-maina/ 905 \N 0 7 923 0 675 1785226223 1785226266 1 25 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
924 paroles-maina Paroles maiņa /lietotaja-profils/paroles-maina/ 906 \N 0 9 923 0 675 1785226223 1785226266 1 25 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0
925 paroles-maina Paroles maiņa /lietotaja-profils/paroles-maina/ 907 \N 0 10 923 0 675 1785226223 1785226266 1 25 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0

View File

@ -0,0 +1,281 @@
141 28 1 1
142 28 4 1
2984 422 15 1
2985 422 16 1
2986 422 17 1
2988 422 8 0
5276 659 8 0
5278 658 8 0
5281 660 8 1
5282 660 2 0
5285 661 8 1
5286 661 2 0
5669 7 2 1
5670 7 1 0
5681 8 3 1
5682 8 1 0
5695 14 4 1
5696 14 1 0
5709 135 23 1
5710 135 1 0
5728 677 32 1
5729 677 1 0
5964 733 34 1
5965 733 8 0
6416 620 1 0
6417 620 33 1
6492 9 1 1
6493 9 2 0
6494 10 1 1
6495 10 2 0
6496 11 1 1
6497 11 3 0
6498 12 1 1
6499 12 3 0
6500 401 1 1
6501 401 1 1
6504 36 1 1
6505 36 2 0
6506 37 1 1
6507 37 3 0
6508 38 1 1
6509 38 2 0
6518 621 1 1
6519 621 33 0
6520 624 1 1
6521 624 33 0
6524 678 1 1
6525 678 32 0
6526 679 1 1
6527 679 32 0
6536 745 1 1
6537 745 4 0
6538 23 1 1
6539 23 2 0
6540 46 1 1
6541 46 2 0
6542 741 1 1
6543 741 4 0
6544 757 1 1
6545 757 33 0
6720 759 1 1
6781 648 4 0
6782 648 1 1
6787 141 4 0
6788 141 1 1
6791 260 23 0
6792 260 1 1
6795 261 4 0
6796 261 1 1
6821 6 1 1
7254 680 1 1
7255 680 32 0
7283 259 23 0
7284 259 1 1
7722 768 8 1
7723 806 8 1
7729 734 34 1
7730 734 8 1
7731 786 34 1
7732 786 8 1
7744 761 8 1
7745 761 34 0
7746 796 8 1
7747 796 34 0
7750 726 8 1
7751 726 34 0
7752 795 8 1
7753 795 34 0
7756 724 8 1
7757 724 34 0
7758 798 8 1
7759 798 34 0
7762 723 8 1
7763 723 34 0
7764 797 8 1
7765 797 34 0
7768 722 8 1
7769 722 34 1
7770 802 34 1
7771 802 8 1
7774 720 34 1
7775 720 8 1
7776 816 8 1
7777 816 34 1
7780 719 8 1
7781 719 34 0
7782 794 8 1
7783 794 34 0
7792 717 8 1
7793 717 34 1
7794 818 34 1
7795 818 8 1
7804 715 8 1
7805 715 34 0
7806 828 8 1
7807 828 34 0
7810 714 8 1
7811 714 34 1
7812 805 8 1
7813 805 34 1
7819 712 8 1
7820 712 34 1
7821 804 8 1
7822 804 34 1
7823 656 8 1
7824 710 8 1
7825 820 8 1
7912 850 38 1
7915 851 38 1
8136 826 38 1
8137 826 38 1
8138 826 34 0
8139 827 38 1
8140 827 38 1
8141 827 34 0
8146 844 34 1
8147 844 8 1
8148 844 38 0
8149 844 38 0
8150 845 34 1
8151 845 8 1
8152 845 38 0
8153 845 38 0
8157 847 34 1
8158 847 38 0
8159 847 38 0
8160 848 34 1
8161 848 38 0
8162 848 38 0
8172 13 1 1
8173 13 3 0
8176 823 8 1
8177 823 34 0
8178 824 8 1
8179 824 34 0
8184 718 8 1
8185 718 34 1
8186 817 8 1
8187 817 34 1
8189 754 34 1
8190 775 34 1
8193 859 34 0
8194 859 8 1
8195 860 34 0
8196 860 8 1
8205 721 34 1
8206 815 34 1
8259 875 34 1
8260 876 34 1
8294 878 34 1
8295 879 34 1
8297 760 8 1
8298 803 8 1
8301 862 39 1
8302 862 34 0
8303 863 39 1
8304 863 34 0
8307 868 34 1
8308 868 39 0
8309 869 34 1
8310 869 39 0
8333 856 38 0
8334 856 38 0
8335 856 34 1
8336 857 38 0
8337 857 38 0
8338 857 34 1
8341 716 34 0
8342 716 8 1
8343 793 34 0
8344 793 8 1
8350 779 8 1
8351 780 8 1
8354 884 8 1
8355 885 8 1
8364 871 34 1
8365 871 39 0
8366 872 34 1
8367 872 39 0
8381 887 8 1
8382 888 8 1
8392 889 40 1
8393 889 1 0
8422 893 1 1
8423 893 40 0
8426 890 1 1
8427 890 40 0
8432 895 1 1
8433 895 40 0
8434 894 1 1
8435 894 40 0
8440 891 1 1
8441 891 40 0
8493 742 8 1
8494 807 8 1
8495 808 8 1
8505 762 8 1
8506 763 8 1
8507 813 8 1
8523 746 8 0
8524 790 8 0
8525 791 8 0
8529 744 8 1
8530 809 8 1
8531 810 8 1
8547 896 8 1
8548 897 8 1
8549 898 8 1
8562 525 8 0
8563 686 8 0
8564 787 8 0
8565 739 8 1
8566 811 8 1
8567 812 8 1
8574 899 8 1
8575 900 8 1
8576 901 8 1
8577 892 1 1
8578 892 40 0
8585 902 8 1
8586 903 8 1
8587 904 8 1
8591 829 8 1
8592 830 8 1
8593 831 8 1
8609 682 8 1
8610 713 8 1
8611 819 8 1
8612 908 8 0
8613 909 8 0
8614 910 8 0
8624 905 8 1
8625 906 8 1
8626 907 8 1
8639 654 8 1
8640 709 8 1
8641 821 8 1
8642 764 8 0
8643 765 8 0
8644 792 8 0
8648 748 8 0
8649 788 8 0
8650 789 8 0
8660 832 8 1
8661 833 8 1
8662 834 8 1
8663 911 8 1
8664 912 8 1
8665 913 8 1
8669 917 8 1
8670 918 8 1
8671 919 8 1
8672 914 8 1
8673 915 8 1
8674 916 8 1
8675 920 8 1
8676 921 8 1
8677 922 8 1
8681 923 8 1
8682 924 8 1
8683 925 8 1

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,4 @@
1 CMS_ADMIN_HIDDEN CMS map node - hidden
2 CMS_ADMIN CMS map node
3 APP_DEFAULT APP default node
4 APP_HIDDEN APP node hidden

View File

@ -0,0 +1,51 @@
99 0 /veikals/ 899 315 99 7 1
119 0 /veikals/viriesiem/ 899 315 119 7 64
120 119 /veikals/viriesiem/t-krekli/ 899 316 120 7 65
121 119 /veikals/viriesiem/krekli/ 899 316 121 7 66
122 119 /veikals/viriesiem/polo-krekli/ 899 316 122 7 67
123 119 /veikals/viriesiem/dzemperi/ 899 316 123 7 68
124 119 /veikals/viriesiem/hudiji/ 899 316 124 7 69
125 119 /veikals/viriesiem/jakas/ 899 316 125 7 70
126 119 /veikals/viriesiem/bikses/ 899 316 126 7 71
127 119 /veikals/viriesiem/dzinsi/ 899 316 127 7 72
128 119 /veikals/viriesiem/sorti/ 899 316 128 7 73
129 119 /veikals/viriesiem/apaksvela/ 899 316 129 7 74
130 119 /veikals/viriesiem/somas/ 899 316 130 7 75
131 119 /veikals/viriesiem/maki/ 899 316 131 7 76
132 119 /veikals/viriesiem/jostas/ 899 316 132 7 77
133 119 /veikals/viriesiem/aksesuari/ 899 316 133 7 78
134 0 /veikals/aromterapija-un-gariga-labsajuta/ 899 315 134 7 79
135 134 /veikals/aromterapija-un-gariga-labsajuta/kristali/ 899 316 135 7 80
136 134 /veikals/aromterapija-un-gariga-labsajuta/palo-santo/ 899 316 136 7 81
137 134 /veikals/aromterapija-un-gariga-labsajuta/sandalkoka-kocini/ 899 316 137 7 82
138 134 /veikals/aromterapija-un-gariga-labsajuta/viraki/ 899 316 138 7 83
139 134 /veikals/aromterapija-un-gariga-labsajuta/viraku-turetaji/ 899 316 139 7 84
140 134 /veikals/aromterapija-un-gariga-labsajuta/aromatiskie-sveki/ 899 316 140 7 85
141 134 /veikals/aromterapija-un-gariga-labsajuta/sveku-difuzori/ 899 316 141 7 86
142 0 /veikals/rotaslietas/ 899 315 142 7 87
143 142 /veikals/rotaslietas/kristalu-rotas/ 899 316 143 7 88
144 142 /veikals/rotaslietas/apzeltitas-rotas/ 899 316 144 7 89
145 0 /veikals/sievietem/ 899 315 145 7 90
146 145 /veikals/sievietem/zaketes/ 899 316 146 7 91
147 145 /veikals/sievietem/kleitas/ 899 316 147 7 92
148 145 /veikals/sievietem/somas/ 899 316 148 7 93
149 145 /veikals/sievietem/topi/ 899 316 149 7 94
150 145 /veikals/sievietem/bikses/ 899 316 150 7 95
151 145 /veikals/sievietem/svarki/ 899 316 151 7 96
155 120 /veikals/viriesiem/t-krekli/product1/ 899 0 155 7 2
156 120 /veikals/viriesiem/t-krekli/dream-big-viriesu-krekls/ 899 0 156 7 5
157 121 /veikals/viriesiem/krekli/viriesu-klasiskais-baltais-t-krekls/ 899 0 157 7 6
158 120 /veikals/viriesiem/t-krekli/product-2/ 899 0 158 7 7
159 121 /veikals/viriesiem/krekli/wondeful-long-sleve-t-shirt/ 899 0 159 7 4
160 122 /veikals/viriesiem/polo-krekli/wondeful-long-sleve-t-shirt/ 899 0 160 7 4
161 141 /veikals/aromterapija-un-gariga-labsajuta/sveku-difuzori/asd/ 899 0 161 7 3
162 146 /veikals/sievietem/zaketes/asdasdas/ 899 0 162 7 1
163 148 /veikals/sievietem/somas/asdasdas/ 899 0 163 7 1
164 120 /veikals/viriesiem/t-krekli/viriesu-klasiskais-baltais-t-krekls/ 899 0 164 7 6
165 121 /veikals/viriesiem/krekli/product-2/ 899 0 165 7 7
166 120 /veikals/viriesiem/t-krekli/balts-t-krekls-ar-apdruku-kakis/ 899 0 166 7 1
167 120 /veikals/viriesiem/t-krekli/wondeful-long-sleve-t-shirt/ 899 0 167 7 4
168 122 /veikals/viriesiem/polo-krekli/dream-big-viriesu-krekls/ 899 0 168 7 5
169 120 /veikals/viriesiem/t-krekli/balts-krekls/ 899 0 169 7 8
170 121 /veikals/viriesiem/krekli/balts-krekls/ 899 0 170 7 8
171 138 /veikals/aromterapija-un-gariga-labsajuta/viraki/smarzas-1/ 899 0 171 7 9

View File

@ -0,0 +1,13 @@
1 CMS_TOP CMS side top menu 0 1536222858 1777023896 1 0 2,3,4,23,32,33,36,40
2 SITE_SETTINGS_LEFT CMS side site settings left submenu 0 0 0 0 0
3 USERS_LEFT CMS side users left menu 0 1423321452 1423321452 0 0
4 MODULE_CONETENT_LEFT CMS side module content submenu 0 1423321452 1423321452 0 0
8 PUB_TOP APP top menu 0 1492694282 1492694282 1 1
23 MANAGE_LEFT CMS side Manage left menu 0 1522160664 1522160664 0 0
32 APP_MANAGER_LEFT CMS side App User management 0 1461249407 1461249407 0 0
33 SITE_MAP_CONTENT_LEFT CMS side NEW Site Map left menu 0 1462202420 1462202420 0 0
34 SYS_MNU APP System top menu 0 1546851953 1608204947 1 1 38,39
36 ASSOCIATION_LEFT 0 1535963626 1535963626 0 0
38 SYS_MNU_DOCUMENTS APP System top menu sub-menu with different document types 0 1591186965 1591186965 0 1
39 SYS_MNU_ASSOCIATION APP System top menu sub-menu with different association modules 0 1608204934 1608204934 0 1
40 E_COMMERCE_CONTENT_LEFT CMS side eCommerce content submenu 0 1777018437 1777023507 0 0

View File

@ -0,0 +1,8 @@
1 GL_APP Application side translations
2 GL_CMS Cms side translations
3 APP Application modules
4 CMS Cms modules
5 LIBRARY Library modules
6 VIEW View class
10 JS Javascript modules
11 CSS Stylesheets

View File

@ -0,0 +1,195 @@
1 LOAD_SITE_TREE 4 Load site tree map data 0 1423391156 1423391156
2 ADD_NEW_NODE 4 Add new map node 0 1423647137 1423647137
3 EDIT_SITE_NODE 0 Edit site map node 0 1519144384 1519144384
4 REQUEST_DATA 244 Request site map node data 0 1423401509 1423401509
5 DELETE_SITE_NODE 244 Delete site map node permanently 0 1423401518 1423401518
6 ADD_NEW_MODULE 4 Permission to add new template module for Programmer further development 0 0 0
7 EDIT_CMS_TREE 4 Global permission to enable tree editing 0 0 0
8 SYS_PERMISSIONS_ADD_NEW 0 Ability to add new type of permission for insertion 0 1349101978 1349101978
9 SYS_PERMISSIONS_EDIT 0 Ability to edit CMS permissions 0 1349101994 1349101994
10 SYS_PERMISSIONS_DELETE 0 Ability to delete CMS permission 0 1349102022 1349102022
14 SYS_PERMISSION_GROUP_ADD_NEW 0 Ability to add new permission group record 0 1349102056 1349102056
15 SYS_PERMISSION_GROUP_EDIT 0 Ability to edit permission group record 0 1349102068 1349102068
16 SYS_PERMISSION_GROUP_DELETE 0 Abilility to delete permission group record 0 1349102079 1349102079
17 SYS_PERMISSION_GROUP_SHOW_MANAGEMENT 0 Permission to see permission group management 0 1349102088 1349102088
18 SYS_USER_SHOW_MANAGEMENT 0 Permission to see user management tab 0 1349102117 1349102117
19 SYS_PERMISSIONS_SHOW_MANAGEMENT 0 Permission to see user permission management tab 0 1349101931 1349101931
20 SYS_ADMIN_USERS_TAB_SHOW 0 Permission to see sys users menu tab 0 1352374794 1352374794
21 SHOW_SITE_MAP 244 Permission to see site map main top tab 0 1423401524 1423401524
22 SYS_SETTINGS_TAB_SHOW 0 Show main menu tab site settings 0 1352374896 1352374896
23 SYS_WELCOME_TAB_SHOW 0 Permission to see welcome page with news 0 1352374957 1352374957
24 CMS_APP_MODULE_CONTENT_TAB_SHOW 0 Top menu tab - module content 0 1463951695 1566210771
25 SYS_LANGUAGES_EDIT 0 Permission to edit site language 0 1349102312 1349102312
26 SYS_LANGUAGES_ADD_NEW 0 Permission to add new site language 0 1349102321 1349102321
27 SYS_LANGUAGES_DELETE 0 Permission to delete site language 0 1349102327 1349102327
28 SYS_LANGUAGES_SHOW_MANAGEMENT 0 Ability to see language tab in site settings 0 1349102334 1349102334
29 SYS_MENUS_ADD_NEW 0 Permission to add new menu 0 1349348567 1349348567
30 SYS_MENUS_EDIT 0 Permission to edit menu data 0 1349348583 1349348583
31 SYS_MENUS_DELETE 0 Permission to delete site menu 0 1349348597 1349348597
32 SYS_MENUS_SHOW_MANAGEMENT 0 Permission to see site menu tab 0 1349348624 1349348624
34 SYS_PUB_TRANSLATIONS_EDIT 0 Permission to edit application messages data 0 1349352105 1349352105
35 SYS_PUB_TRANSLATIONS_DELETE 0 Permission to delete application message 0 1349352148 1349352148
36 SYS_PUB_TRANSLATIONS_SHOW_MANAGEMENT 0 Permission to see application messages tab 0 1349352046 1349352046
37 SYS_CMS_TRANSLATIONS_SHOW_MANAGEMENT 0 Permission to view cms message translation 0 1349347779 1349347779
38 SYS_CMS_TRANSLATIONS_EDIT 0 Permission to edit cms message 0 1349347825 1349347825
39 SYS_CMS_TRANSLATIONS_DELETE 0 Permission to delete cms message 0 1349347925 1349347925
54 CMS_LIB_MODULES 4 Show cms library modules 0 0 0
55 CMS_JS_MODULES 4 Show cms js modules 0 0 0
67 UPLOADIFY_PLUGIN 13 Perermission to use uploadify plugin 0 0 0
72 CMS_MAILENGINE_OUT_SHOW_MANAGEMENT 0 Permission to see outgoing mail content 0 1350242199 1350242199
73 CMS_MAILENGINE_SENT_SHOW_MANAGEMENT 0 Permision to see sent mail 0 1350242370 1350242370
74 CMS_MAILENGINE_DELETE 0 Permission to delete outgoing/sent mail 0 1350242437 1350242437
75 CMS_MAIL_CONSTRUCTOR_SHOW_MANAGEMENT 0 Permission to see mail constructor 0 1350394850 1350394850
76 CMS_APP_USER_DELETE 0 Permission to delete app user 0 1463951799 1463951799
77 CMS_APP_USER_EDIT 0 Permission to edit app user 0 1463951813 1463951813
78 CMS_APP_USER_SHOW_MANAGEMENT 0 Permission to see public user list 0 1463951825 1463951825
81 CMS_APP_MANAGE_TAB_SHOW 0 Top menu tab - manage 0 1463951690 1463951690
90 CMS_CLASSIFICATORS_SHOW_MANAGEMENT 0 Permission to see mod content classificators 0 1349392451 1349392451
91 CMS_CLASSIFICATORS_DELETE 0 Permission to delete classificator 0 1349649059 1349649059
92 CMS_CLASSIFICATORS_EDIT 0 Permission to edit classificator 0 1349649085 1349649085
93 CMS_CLASSIFICATORS_ADD_NEW 0 Permission to add new classificator 0 1349649104 1349649104
94 CMS_MAILENGINE_EDIT 0 Permission to change outgoing mail status 0 1350242147 1350242147
96 CMS_MAIL_CONSTRUCTOR_DELETE 0 Permission to delete mail constructor mail 0 1350394800 1350394800
97 CMS_MAIL_CONSTRUCTOR_ADD_NEW 0 Permission to add new mail constructor template 0 1350394787 1350394787
98 CMS_MAIL_CONSTRUCTOR_EDIT 0 Permission to edit mail constructor templates 0 1350394757 1350394757
99 CMS_MAILENGINE_SEND_NOW 0 Permission to forcably send outgoing mail 0 1350242083 1350242083
101 SHOW_PAGE_TEMPLATES 11 Permission to see page template module 0 0 0
103 TEMPLATE_SAVE_RECORD 11 Permission to save template record 0 0 0
104 TEMPLATE_LOAD_CONTENT 11 Permission to load template content data 0 0 0
105 TEMPLATE_CHANGE_STATUS 11 Permisson to change template status. 0 0 0
106 TEMPLATE_DELETE_RECORD 11 Permisson to ddelete template recod. 0 0 0
111 SYS_USER_ADD_NEW 17 SYS permission to add new user 0 1349102253 1349102253
112 SYS_USER_EDIT 17 SYS permission to edit user 0 1349102263 1349102263
113 SYS_USER_DELETE 17 SYS permission to delete user 0 1349102272 1349102272
116 SYS_IP_FILTER_EDIT 0 Permission to edit IP access filter 0 1349101816 1349101816
117 SYS_IP_FILTER_ADD_NEW 0 Permission to add new ip access filter 0 1349101825 1349101825
118 SYS_IP_FILTER_DELETE 0 Permission to delete ip access filter 0 1349101832 1349101832
119 SYS_IP_FILTER_SHOW_MANAGEMENT 0 Permission to see ip access filter tab form 0 1349101837 1349101837
120 SYS_CMS_TRANSLATIONS_DELETE_ALL 0 Clear whole translation table 0 1349347947 1349347947
121 SYS_PUB_TRANSLATIONS_DELETE_ALL 0 Permission to delete whole translation table of public messages 0 1349352180 1349352180
128 SYS_EXCEL_MEMORY_INCREASE 0 Permission to use extreme memory increase for huge xls file generation like EXCEL (260 000 rows - req ~320M) 0 1352294094 1352294094
137 SYS_SHOW_ONLINE_USERS 0 Permission to see online user count 0 1352334630 1352334630
143 SYS_SHOW_TABLE_IDS 0 Permission to see directly db ids 0 1357757328 1357757328
157 CMS_MAILENGINE_ADD_NEW 0 Add new email via outgoing messages 0 1368003653 1368003653
171 SYS_APC_OVERVIEW_SHOW_OVERVIEW 0 Permission to see apc overview module 0 1369839257 1369839257
172 SYS_APC_OVERVIEW_DELETE 0 Permission to delete data from apc overview 0 1369839279 1369839279
173 SYS_APC_OVERVIEW_DELETE_ALL 0 Permission to clear all data from apc overview 0 1369839292 1369839292
174 SYS_APC_OVERVIEW_DISABLE 0 Permission to disable apc overview 0 1369839317 1369839317
175 CMS_SPAM_SAVE_DATA 0 Permission to save spam mail data to excel file 0 1370354295 1370354295
176 CMS_MAILENGINE_SHOW_5MIN_CRON_CALL_TIMEOUT 0 Permission to see 5min cron call timeout 0 1370380720 1370380720
177 SYS_ACTION_LOG_MANAGEMENT_SHOW 0 Permission to see action log table 0 1380263230 1380263230
178 SYS_ACTION_LOG_OVERVIEW_DELETE_ALL 0 Delete whole action log table 0 1380263279 1380263279
179 SYS_ACTION_LOG_OVERVIEW_DELETE 0 Delete each record in table 0 1380263320 1380263320
189 CMS_CATEGORY_EDIT 0 Permission to edit category 0 1395760196 1395760196
190 CMS_CATEGORY_DELETE 0 Permission to delete category 0 1395760242 1395760242
191 CMS_CATEGORY_ADD_NEW 0 Permission to add new category 0 1395760275 1395760275
192 CMS_CATEGORY_SHOW_MANAGEMENT 0 Permission to see category management 0 1396690774 1396690774
220 CMS_TEXTMANAGER_SHOW_MANAGEMENT 0 Permission to show text manager 0 1442839973 1442839973
221 CMS_TEXTMANAGER_EDIT 0 Permission for editing in text manager 0 1442839995 1442839995
222 CMS_TEXTMANAGER_DELETE 0 Permission to delete an entry in text manager 0 1442840015 1442840015
223 CMS_TEXTMANAGER_ADD_NEW 0 Permission to add new entry in text manager 0 1442840031 1442840031
224 CMS_APP_ADMIN_USER_TAB_SHOW 0 Top menu tab - App users 0 1463951685 1463951685
232 CMS_APP_USER_SHOW 0 Top menu tab - App users - users 0 1463952181 1463952181
233 CMS_APP_PERMISSION_SHOW 0 Top menu tab - App users - permissions 0 1463952216 1463952216
234 CMS_APP_PERMISSION_GROUP_SHOW 0 Top menu tab - App users - permission groups 0 1463952259 1463952259
235 CMS_APP_USER_ADD_NEW 0 Permission to add new user in app users 0 1463952851 1463952851
238 CMS_APP_PERMISSIONS_ADD_NEW 0 Add new app permission 0 1463988880 1463988880
239 CMS_APP_PERMISSIONS_SHOW_MANAGEMENT 0 App permission management 0 1463989028 1463989028
240 CMS_APP_PERMISSIONS_EDIT 0 Permission to edit app permission 0 1463988982 1463988982
242 CMS_APP_PERMISSIONS_DELETE 0 Permission to delete app permissions 0 1463989205 1463989205
243 CMS_APP_PERMISSIONS_GROUPS_ADD_NEW 0 Add new app permission group 0 1463989441 1463989441
244 CMS_APP_PERMISSIONS_GROUPS_SHOW_MANAGEMENT 0 App permission groups management 0 1463989468 1463989468
245 CMS_APP_PERMISSIONS_GROUPS_EDIT 0 Permission to edit app permission group 0 1463989555 1463989555
246 CMS_APP_PERMISSIONS_GROUPS_DELETE 0 Permission to delete app permissions group 0 1463989560 1463989560
248 SYS_SITE_MAP_EDIT 0 Permission to edit system site map tree node 0 1463990744 1463990744
249 SYS_SITE_MAP_ADD_NEW 0 Permission to add new tree node in system site map 0 1463990736 1463990736
250 SYS_SITE_MAP_DELETE 0 Permission to delete system site map tree node 0 1463990724 1463990724
251 SYS_SITE_MAP_SHOW_MANAGEMENT 0 Permission to see table in system site map 0 1463990864 1463990864
252 SYS_SITE_MAP_SHOW 0 Top menu tab - New Site MAP - System site map 0 1463990917 1463990917
253 CMS_APP_SITE_MAP_EDIT 0 Permission to edit app site map tree node 0 1463991094 1463991094
254 CMS_APP_SITE_MAP_ADD_NEW 0 Permission to add new tree node in app site map 0 1463991123 1463991123
255 CMS_APP_SITE_MAP_DELETE 0 Permission to delete app site map tree node 0 1463991145 1463991145
256 CMS_APP_SITE_MAP_SHOW_MANAGEMENT 0 Permission to see table in app site map 0 1463991170 1463991170
257 CMS_APP_SITE_MAP_SHOW 0 Top menu tab - New Site Map - APP site map 0 1463991219 1463991219
258 SYS_NEW_SITE_MAP_SHOW 0 Top menu tab - New Site Map 0 1463991487 1463991487
269 SYS_SITE_MAP_ADMIN_FOLDER_CHANGE 0 Permission to change administration link 0 1490201133 1490201133
272 PUB_PROJECT_EDIT 0 Permission to edit projects 0 1505113304 1505113304
273 PUB_PROJECT_NEW 0 Permission to add new project 0 1505113335 1505113335
274 PUB_PROJECT_DELETE 0 Permission to delete project 0 1505113352 1505113352
275 PUB_PROJECT_SHOW_MANAGEMENT 0 Permission to see project management page 0 1505113573 1505113573
285 CMS_APARTMENTS_SHOW_MANAGEMENT 0 Permission to see cms apartment module 0 1535960387 1535960387
293 CMS_MESSAGES_EDIT 0 Permission to edit in pub messages 0 1545916821 1545916821
294 CMS_MESSAGES_ADD_NEW 0 Permission to add new in pub messages 0 1545916821 1545916821
295 CMS_MESSAGES_DELETE 0 Permission to delete in pub messages 0 1545916821 1545916821
296 CMS_MESSAGES_SHOW_MANAGEMENT 0 Permission to show management in pub messages 0 1545916821 1545916821
297 CMS_PUB_SUBSCRIPTIONS_EDIT 0 Permission to edit in pub subscriptions 0 1545941538 1545941538
298 CMS_PUB_SUBSCRIPTIONS_ADD_NEW 0 Permission to add new in pub subscriptions 0 1545941538 1545941538
299 CMS_PUB_SUBSCRIPTIONS_DELETE 0 Permission to delete in pub subscriptions 0 1545941538 1545941538
300 CMS_PUB_SUBSCRIPTIONS_SHOW_MANAGEMENT 0 Permission to show management in pub subscriptions 0 1545941538 1545941538
301 SYS_SITE_MODULES_EDIT 0 Permission to edit in system site modules 0 1548409657 1548409657
302 SYS_SITE_MODULES_ADD_NEW 0 Permission to add new in system site modules 0 1548409657 1548409657
303 SYS_SITE_MODULES_DELETE 0 Permission to delete in system site modules 0 1548409657 1548409657
304 SYS_SITE_MODULES_SHOW_MANAGEMENT 0 Permission to show management in system site modules 0 1548409657 1548409657
306 SYS_SITE_MODULES_DELETE_FILES 0 Permission to delete module files in site modules 0 1548412598 1548412598
319 CMS_SVN_PROJECT_EDIT 0 Permission for editing SVN projects 0 1566209819 1566209930
320 CMS_SVN_PROJECT_MANAGEMENT 0 Permission for accessing SVN project module 0 1566209950 1566209950
321 CMS_SVN_PROJECT_NEW 0 Permission for adding new svn project 0 1566209969 1566209969
322 CMS_SVN_PROJECT_DELETE 0 Permission for deliting svn project 0 1566209985 1566209985
323 CMS_SVN_PROJECT_DOWNLOAD 0 Permission to download svn project source code 0 1566216275 1566216275
324 CMS_SVN_PROJECT_EXPORT_DEV 0 Permission to export DEV project to server 0 1566216410 1566216410
325 CMS_SVN_PROJECT_EXPORT_EXP 0 Permission to export to Expl. server 0 1566216444 1566216444
438 CMS_SVN_PROJECT_SVN_PERMISSION 0 Permission for Vecais svn projekts 0 0 1563276957
439 CMS_SVN_PROJECT_BRSACC_PERMISSION 0 Permission for www.Zutenis.lv projekts 0 0 1565091273
440 CMS_SVN_PROJECT_ABC_PERMISSION 0 Permission for Andra ABCserviss projekts 0 0 1563311036
441 CMS_SVN_PROJECT_ASHOP_PERMISSION 0 Permission for Andra Ashop.lv projekts 0 0 1563311060
442 CMS_SVN_PROJECT_DSD_PERMISSION 0 Permission for A.Biedris dsddeluxe EU projekts 0 0 1563311115
443 CMS_SVN_PROJECT_DSD_LV_PERMISSION 0 Permission for A.Biedris dsddeluxe LV projekts 0 0 1563311130
444 CMS_SVN_PROJECT_DSDL_PERMISSION 0 Permission for A.Biedris dsddeluxe landing page projekts 0 0 1563311157
445 CMS_SVN_PROJECT_EKODOMA-KUE_PERMISSION 0 Permission for Ekodoma vecais projekts 0 0 1563311209
446 CMS_SVN_PROJECT_KUE_PERMISSION 0 Permission for Ekodomas jaunās versijas projekts 0 0 1563311223
447 CMS_SVN_PROJECT_LATEFEKTS_PERMISSION 0 Permission for A.Biedris Latefekts LV projekts 0 0 1563311247
448 CMS_SVN_PROJECT_MBODE_PERMISSION 0 Permission for I.Medne MiegaBodes projekts 0 0 1563311289
449 CMS_SVN_PROJECT_MKGROUP_PERMISSION 0 Permission for M.Brieža MKsolutionsGroup projekts 0 0 1563311330
450 CMS_SVN_PROJECT_MMEISTARS_PERMISSION 0 Permission for I.Medne MatračuMeistars projekts 0 0 1563311348
451 CMS_SVN_PROJECT_MP_PERMISSION 0 Permission for A.Bulavskis MediaPasts projekts 0 0 1563311415
452 CMS_SVN_PROJECT_OMEGA_PERMISSION 0 Permission for A.Žukovskis Omega projekts 0 0 1563311432
453 CMS_SVN_PROJECT_OMEGA_OLD_PERMISSION 0 Permission for A.Žukovskis Omega vecais projekts 0 0 1563311448
454 CMS_SVN_PROJECT_PLASTIC_PERMISSION 0 Permission for L.Riekstiņa PlasticsGroup projekts 0 0 1563311472
455 CMS_SVN_PROJECT_RENESCO_PERMISSION 0 Permission for Renseco projekts 0 0 1563311485
456 CMS_SVN_PROJECT_SPECTRUMLEGAL_PERMISSION 0 Permission for I.Simpsone Spectrumlegal projekts 0 0 1563311505
457 CMS_SVN_PROJECT_VIKREM_PERMISSION 0 Permission for Z.Cinglere Vikrem projekts 0 0 1566227672
458 CMS_APARTMENTS_METERS_VER_DATE_CHANGE 0 Permission to change next verification date for apartments meters 0 1572861628 1572861628
459 CMS_SVN_PROJECT_CENTRS_APLI_PERMISSION 0 Permission for Aprūpes Centrs &amp;quot;APĻI&amp;quot; 0 1577453827 1577453989
462 CMS_ACCOUNT_ACTIVATION_DELETE 0 Permission to delete in account activation module 0 1585216725 1585216773
463 CMS_ACCOUNT_ACTIVATION_SHOW_MANAGEMENT 0 Permission to show management in account activation module 0 1585216725 1585216765
465 CMS_ACCOUNT_ACTIVATION_ACTIVATE 0 Permission to activate account in account activation module 0 1585216801 1585216801
466 SYS_PUB_TRANSLATIONS_ADD_NEW 0 Permission to add new pub side translation message 0 1593683539 1593683539
467 SYS_CMS_TRANSLATIONS_ADD_NEW 0 Permission to add new CMS side translation message 0 1593683564 1593683564
468 CMS_SVN_PROJECT_ASHOPV2_PERMISSION 0 Permission for Andra Ashop.lv v2 projekts 0 0 1601640293
469 CMS_SVN_PROJECT_CAR4ALL_PERMISSION 0 Permission for Cars 4 All 0 0 1608722489
470 CMS_SQl_SCRIPT_EXEC_SHOW_MANAGEMENT 0 Permission to see script Executor 0 1615126587 1615126587
472 CMS_SVN_PROJECT_MEZATIKLS_PERMISSION 0 Permission for Meža tikls - Mārtiņš 0 0 1623414992
473 CMS_SVN_PROJECT_RITSAULE_PERMISSION 0 Permission for RitSaule - Daniels Barens 0 0 1635234699
474 CMS_APP_E_COMMERCE_TAB_SHOW 0 Top menu tab - eCommerce 0 1777018550 1777018550
475 CMS_APP_PRODUCTS_EDIT 0 Permission to edit in CMS APP products 0 1777020521 1777020521
476 CMS_APP_PRODUCTS_ADD_NEW 0 Permission to add new in CMS APP products 0 1777020521 1777020521
477 CMS_APP_PRODUCTS_DELETE 0 Permission to delete in CMS APP products 0 1777020521 1777020521
478 CMS_APP_PRODUCTS_SHOW_MANAGEMENT 0 Permission to show management in CMS APP products 0 1777020521 1777020521
479 CMS_APP_PRODUCTS_EXPORT 0 Permission to export in CMS APP products 0 1777020521 1777020521
480 CMS_APP_PROD_ATT_EDIT 0 Permission to edit in CMS APP product attributes 0 1777020708 1777020708
481 CMS_APP_PROD_ATT_ADD_NEW 0 Permission to add new in CMS APP product attributes 0 1777020708 1777020708
482 CMS_APP_PROD_ATT_DELETE 0 Permission to delete in CMS APP product attributes 0 1777020708 1777020708
483 CMS_APP_PROD_ATT_SHOW_MANAGEMENT 0 Permission to show management in CMS APP product attributes 0 1777020708 1777020708
484 CMS_APP_ORDER_RECEIPTS_EDIT 0 Permission to edit in CMS APP order receipt 0 1777020830 1777020830
485 CMS_APP_ORDER_RECEIPTS_ADD_NEW 0 Permission to add new in CMS APP order receipt 0 1777020830 1777020830
486 CMS_APP_ORDER_RECEIPTS_DELETE 0 Permission to delete in CMS APP order receipt 0 1777020830 1777020830
487 CMS_APP_ORDER_RECEIPTS_SHOW_MANAGEMENT 0 Permission to show management in CMS APP order receipt 0 1777020830 1777020830
488 CMS_APP_DELIVERY_EDIT 0 Permission to edit in CMS APP delivery 0 1777020907 1777020907
489 CMS_APP_DELIVERY_ADD_NEW 0 Permission to add new in CMS APP delivery 0 1777020907 1777020907
490 CMS_APP_DELIVERY_DELETE 0 Permission to delete in CMS APP delivery 0 1777020907 1777020907
491 CMS_APP_DELIVERY_SHOW_MANAGEMENT 0 Permission to show management in CMS APP delivery 0 1777020907 1777020907
493 CMS_APP_COUNT_TO_CLASS 0 CMS APP count to classificator 0 1777021050 1777021050
494 CMS_APP_BUYS_EDIT 0 Permission to edit in CMS APP buys 0 1777021172 1777021172
495 CMS_APP_BUYS_ADD_NEW 0 Permission to add new in CMS APP buys 0 1777021172 1777021172
496 CMS_APP_BUYS_DELETE 0 Permission to delete in CMS APP buys 0 1777021172 1777021172
497 CMS_APP_BUYS_SHOW_MANAGEMENT 0 Permission to show management in CMS APP buys 0 1777021172 1777021172

View File

@ -0,0 +1,400 @@
1142 Sākums
1143
1145 Ienākt
1146 Meklēt
1147 Par mums
1148 Contact us
1149 FAQ
1150 No
1151 Yes
1152 Not a valid email address specified!
1153 Invalid telephone specified!
1154 Please fill in the field!
1155 Login
1156 Home
1157 Login account
1158 The username or password is incorrect!
1159 Login successfull!
1160 Email address or username
1161 User login
1162 Password
1163 User password hidden
1164 Terms & Conditions
1165 Sign in
1166 Forgot password?
1167 Create account
1168 Follow us
1169 Instagram shop
1170 Footer_company_details
1171 Information
1172 About us
1173 Faqs
1174 Store
1175 Help
1176 Cookie
1177 Payment policy
1178 Privacy policy
1179 Return policy
1180 Shipping policy
1181 Terms & condition
1182 Newsletter
1183 Enter your email
1184 Subscribe
1185 Powered by lorettaSecret
1186 Don't miss a thing
1187 Join our newsletter and get 11% off your first order
1188 Don't display again
1189 Search here
1190 Search for
1191 See all results
1192 Search not found
1193 Trending search: a, e, skincare...
1194 Notice
1195 OK
1196 Quickview
1197 Add to cart
1198 View full details
1199 My shopping cart
1200 No items in your shopping cart - yet!
1201 Continue shopping
1202 Type a note for the seller
1203 Write your message...
1204 Have a code? Apply here
1205 Type your code here
1206 Discount code button
1207 Subtotal
1208 Shipping, taxes, and discount codes calculated at checkout
1209 View cart
1210 Checkout
1211 Wishlist
1212 Account
1213 Register
1214 Forgot password
1215 Shop
1216 Cart
1217 APP
1218 GOOGLE_ANALYTICS_CODE
1219 Lietotāja profils
1220 You must be logged in to manage wishlist.
1221 Index page
1222 Shop by categories
1223 Natural and certified organic products
1224 item
1225 Shop more
1226 Our featured product
1227 Cretified organic & natural ingredients
1228 Shop collection
1229 Inspired by traditional knowledge and nature
1230 Testimonials
1231 "Happy client"
1232 Veikals
1233 Passed site map doesn't exist!
1234 No products found
1235 Kristāli
1236 Close
1237 Price
1238 The highest price is
1239 Reset
1240 From
1241 To
1242 Special products
1243 Arrow previous
1244 Arrow next
1245 Filter
1246 Grid view
1247 List view
1249 products
1250 Sort by:
1251 Newest first
1252 Price, low to high
1253 Price, high to low
1254 First
1255 Last
1256 T-krekli
1257 selected
1258 Image full view
1259 You're not alone
1260 others are browsing this item
1261 Eur
1262 Inclusive of all taxes.
1263 Shipping
1264 calculated at checkout.
1265 Availability:
1266 Selling quickly
1267 items left
1268 Just
1269 sold in the last
1270 hours
1271 Hurry! Discounts disappearing fast -
1272 Available offers
1273 View all
1274 Looking for more
1275 Ask a question
1276 Delivery options
1277 Enter your pincode
1278 Check
1279 Delivery available at
1280 Delivery in
1281 business days. Cash on delivery:
1282 Delivery not available at
1283 Quantity:
1284 Remove item
1285 Add item
1286 Save to wishlist
1287 Share
1288 Compare
1289 Buy now
1290 Choose store
1291 pickup
1292 for faster access to your furniture favorites. Select
1293 at checkout and enjoy a smoother, time-saving experience.
1294 learn more
1295 Reliable shipping:
1296 at your door in under 5-7 business days
1297 view details
1298 30-day
1299 hassle-free
1300 returns
1301 guaranteed
1302 Your personal data stays
1303 private & protected
1304 SKU:
1305 Return & exchange
1306 Cash on delivery
1307 Free delivery
1308 Safe payment
1309 Payment protection guaranteed
1310 Offers for you
1311 Size guide
1312 Ask a question?
1313 Name
1314 Full name
1315 Email
1316 Phone number
1317 Message
1318 Submit now
1319 Social link
1320 Skip the wait - Pickup instantly!
1321 Speedy service
1322 skip the wait and grab your items on the same day.
1323 No shipping fees
1324 save money by picking up your order in-store.
1325 Flexible pickup times
1326 choose a time that suits your schedule.
1327 Expert assistance
1328 our friendly staff are on hand to help with any queries.
1329 Select pickup
1330 during checkout, choose the pickup option.
1331 Receive confirmation
1332 you'll receive an email confirmation once your order is ready for pickup.
1333 Visit the store
1334 head to your chosen store location at your convenience.
1335 Collect your order
1336 present your confirmation email at the pickup point, and our team will hand over your items.
1337 Is pickup available for all items?
1338 Pickup is available for most items. If an item is eligible, you'll see the pickup option during checkout.
1339 When will my order be ready for pickup?
1340 Orders are typically ready for pickup within a few hours. You'll receive an email notification once your order is ready.
1341 Can someone else pick up my order for me?
1342 Yes, you can authorize someone else to pick up your order. Simply forward them the confirmation email, and they can collect the items on your behalf.
1343 Is there a cutoff time for same-day pickup?
1344 Yes, orders placed before [insert cutoff time] are usually available for same-day pickup. Orders placed after this time will be ready the following day.
1345 grozs
1346 %VAR_URL_STEP_1%
1347 %VAR_URL_STEP_2%
1348 %VAR_URL_STEP_3%
1349 %VAR_URL_STEP_4%
1350 %VAR_URL_ORDER_RECEIVED%
1351 %VAR_URL_PAYMENT%
1352 Shopping cart
1353 Customer information
1354 Shipping & Payment method
1355 Order complete
1356 Only digits allowed!
1357 Not a valid number specified!
1358 Items
1359 Clear cart
1360 Order summary
1361 Use discount code
1362 Edit
1363 Discount code
1364 Apply
1365 Discount
1366 Total
1367 Taxes excluded at checkout*
1368 You may also like
1369 Available Categories
1370 + item
1371 Select a category to view products
1372 Lietošanas noteikumi
1373 I have read and <a>agreed to terms.</a>
1374 Reģistrācija
1375 Create an account
1376 Registration failed!
1377 Registration successfull!
1378 First name
1379 User name
1380 Last name
1381 User surname
1382 User email
1383 Confirm password
1384 Create
1385 Already have an account?
1386 Activation email has been sent. Please check your inbox.
1387 Access Error
1388 Oops!
1389 Sorry but the page you are looking for does not exist, have been removed, name changed or is temporarity unavailable.
1390 Back to home
1391 Joined
1392 Profile information
1393 Address book
1394 My wishlist
1395 My orders
1396 Delete account
1397 Logout
1398 An error occurred while processing your request!
1399 Saved successfully!
1400 Personal information
1401 Date of birth
1402 Gender
1403 Select gender
1404 Male
1405 Female
1406 I'd rather not say
1407 Contact information
1408 Email address
1409 Email newsletter
1410 I want to receive email newsletters
1411 Save & close
1412 Change password
1413 Old password
1414 New password
1415 Repeat new password
1416 Billing address
1417 No billing address added
1418 Shipping address
1419 No shipping address added
1420 Add or edit address
1421 Label
1422 Home, Office, etc.
1423 Address type
1424 Billing
1425 Shipping & billing
1426 Company
1427 Company name
1428 Country
1429 Address
1430 Address line1
1431 Address2
1432 Address line2
1433 City
1434 State
1435 Post code
1436 Set as default shipping address
1437 Set as default billing address
1438 Save address
1439 Cancel
1440 Product
1441 Option
1442 Loading wishlist...
1443 No order placed yet
1444 There are no order history yet. Start purchase some products and continue browsing from the shop.
1445 Explore products
1446 Deleting your account will anonymize your personal data, disable further logins and sign you out immediately.
1447 Order records are retained only in anonymized form for bookkeeping and operational history.
1448 Are you sure you want to delete account?
1449 Orders history and all data associated with your account will be anonymized and you will be signed out.
1450 Current password
1451 I understand that this action cannot be undone.
1452 Delete
1453 My account
1454 User password successfully changed!
1455 Awaiting payment
1456 Processing
1457 Payment
1458 Order id
1459 Date
1460 Statuss
1461 Note
1462 Template not found!
1463 Cost summary
1464 Email me with news and offers
1465 Your name
1466 Surname
1467 Your surname
1468 Phone
1469 Zip code
1470 Same as shipping address
1471 Save & continue
1472 Shipping notes
1473 Order notes
1474 Shipping method
1475 Choose a shipping method:
1476 Payment info
1477 Choose payment method:
1478 Place order
1479 Return to cart
1480 Thank you for your order!
1481 You will be able to track your order status at your <a href="[%url%]" class="d-inline-block body-primary-color text-decoration-underline">order page</a>
1482 Search
1483 Your search for
1484 revealed the following
1485 Go to search
1486 No item
1488 Status
1489 Address saved successfully.
1490 Removed from wishlist.
1491 My favorites
1492 Your wishlist is empty
1493 Password recovery
1494 Reset your password
1495 Sorry, we couldn't identify user!
1496 Congratulations, a new password has been requested.
1497 Please provide the username or email address that you use for your system account.
1498 We will send you an email that will allow you to reset your password.
1499 An email with password reset instructions has been sent to your email address.
1500 If you still cannot access your account, please contact your administrator!
1501 Send verification email
1502 Back to Login
1503 Džemperi
1507 Clear all
1508 Showing <span>x</span> products
1509 Showing <span>x</span> product
1510 Jakas
1511 Vīraki
1512 Added to wishlist.
1513 Product already in wishlist.
1514 Please select product options before adding to cart.
1515 <a>Shipping</a> calculated at checkout.
1516 In stock
1517 Out of stock
1518 Product unavailable!
1520 Back to category
1521 Sorry but the product you are looking for does not exist, have been removed, name changed or is temporarily unavailable.
1522 Product not found
1523 Piegādes politika
1525 <b>Reliable shipping:</b> at your door in under 5-7 business days <a>view details</a>
1526 Atgriešanas politika
1527 Choose store <b>pickup</b> for faster access to your furniture favorites. Select <b>pickup</b> at checkout and enjoy a smoother, time-saving experience. <a>learn more</a>
1528 <b>30-day</b> hassle-free <b>returns</b> guaranteed <a>view details</a>
1529 Your personal data stays <b>private & protected</b> <a>view details</a>
1531 Privātuma politika
1532 No item added yet
1533 Sorry your cart has currently no more products, click on 'explore products' button given below for continue browsing.
1534 Registration form
1535 Please activate your account before continuing.
1536 Waiting for email activation
1537 Profile
1538 Cookies
1539 Maksājumu politika
1540 Payment terms
1541 Krekli
1542 Powered by
1543 There are three main types of cookies that we follow on the
1544 website.
1545 By browsing the site, you accept the use of necessary cookies. You can also accept the use of other cookies.<br/>For more information <a href="[%REPLACE_URL%]" target="_blank">click here</a>
1546 Necessary
1547 Statistics
1548 Preferences
1549 Accept selected
1550 Accept all

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,13 @@
1 1565091529 https://www.zutenis.lv/a:file/p:1/f:ZGVmNTAyMDA3OTQ4OWVjYTcxMTRjZjI5YWQ3MGEyN2E3MTQzYzkxMWM1ZmVlYzBmYzIwOWRjNzhlYjJhNWI1ODMxZTkxZmY0ZTk4ODA3MzVmMjgxNTI5MTBhMDgwODQ4ZGZmY2ZlZmNiNGFiZWQxZTEzYzUzYjhiMzk1MmFiOTVjMDg3Zjk5NDZkNzNjNTkzMWMxYmRhMjQ3Njk2NTRjNmI2NjVlYjljYzdlM2MzNTJiMDg2MzQ2N2QyOTNiYzE0NWVjNDU0MGNkYmNmOTM5MzUxMmEzMDRjNGNiMmIwZDEwMDY5YThlYzA3ZmI5OWI5YTM4MzhkYzI5M2EyZGVhMjIxYjE5NGMzNjIyN2NkNTYxZA https://www.zutenis.lv/ajax/id:ZGVmNTAyMDAyOTcyYmRkOWUxMmE3YzkxNDJjMzViY2RlNjg3Y2NiZDViM2JiNjM1NjBmNDM5Zjc1ZTYxMmZiMzRlMzExNWQyNzU3Yjc0MmJhN2E1YmVmZWYzZTNiMTdmNmQ2YTZmNDk2MWMyZjVkMWYwNTE5MjBlZTkzMzlhZmE4NmIwMGFjMGIwOTQzNGIyZjVkMGNmZTJhYjcwOTVjNjYyMmFkZTNjNWI/ac:init_project_update_pcheck/2fa:039982 https://www.zutenis.lv/ajax/id:ZGVmNTAyMDAyOTcyYmRkOWUxMmE3YzkxNDJjMzViY2RlNjg3Y2NiZDViM2JiNjM1NjBmNDM5Zjc1ZTYxMmZiMzRlMzExNWQyNzU3Yjc0MmJhN2E1YmVmZWYzZTNiMTdmNmQ2YTZmNDk2MWMyZjVkMWYwNTE5MjBlZTkzMzlhZmE4NmIwMGFjMGIwOTQzNGIyZjVkMGNmZTJhYjcwOTVjNjYyMmFkZTNjNWI/ac:init_project_update_status_update/ 3.0.227 4
2 1565102559 https://www.zutenis.lv/a:file/p:1/f:ZGVmNTAyMDBlMmNiMGY2ZmRjNWY4M2I3MzExMzgzNzk4MjRjZGYxZTU5ZWNjOGE3NjE2MWE4NWRhMzYzOWI0NmVkNWE3YWZhYWY1NjY2ZmUyYjM4YjhiNDNiNTFhNjQyNTJkM2I3YjgzNWE4NTM4YjYyNjIyYmUzYWY3YmVkNTQyY2I5YWNlMmU2MDJmMGNiOWM1Yzc5YjE3YjQ0NmJlOGVjZWRmY2VjYjY3Njc5NjRhZDAyZWU5NmNiNDlmYjI5ZWJlOWM4NTc2MGFiZGExNzQ4MjI2MmVkNzE2ZDE5ZGIwMGZhMWM3MWFjOGU1ZmQzMTJhMjJjZmQ3MmViMmRmMDc2MWQwMjc4NjA3ODVlN2ZjNQ https://www.zutenis.lv/ajax/id:ZGVmNTAyMDBkYjVlNGU3ZTVhN2E3MTQxOGIzMjczYTRkZWYzY2ZhYTg5MWRhZWZkMDAwYjE0NTVjMmFmOWE0NWMyMDEwZTNlYjgxMTI4MGRlZDQyNmZlM2NlODBkNjA3MWQzMjkyOWYwMTgwMTVjMDc3ZjEzZGY4MjNkNzQ1ODUwMzY0ZWJkZDViMDNmNmRjMjZiZjA2MDMwYmNiNzZhOTdkZGMyOWE2/ac:init_project_update_pcheck/2fa:969359 https://www.zutenis.lv/ajax/id:ZGVmNTAyMDBkYjVlNGU3ZTVhN2E3MTQxOGIzMjczYTRkZWYzY2ZhYTg5MWRhZWZkMDAwYjE0NTVjMmFmOWE0NWMyMDEwZTNlYjgxMTI4MGRlZDQyNmZlM2NlODBkNjA3MWQzMjkyOWYwMTgwMTVjMDc3ZjEzZGY4MjNkNzQ1ODUwMzY0ZWJkZDViMDNmNmRjMjZiZjA2MDMwYmNiNzZhOTdkZGMyOWE2/ac:init_project_update_status_update/ 3.0.227 4
3 1565102608 https://www.zutenis.lv/a:file/p:1/f:ZGVmNTAyMDA1NjkwZTQ0M2FhNTg5OTQwNmZhYjg0YjQzYzFjZmExZmRlMzQwOWFiNDA4YWRhZjM2NjNlYzQwMjUzM2ExMGNhNjNhZGEwN2E0NDQ5YTk3NzBjMDZiNmQ5MGYyZmExNTkwZjNmYmNiMDdmOGQxNzcyMzdkMzgwZDQxNTY2Y2E5ZWYzOWEzYjdjOGEzNTJiNGYxOWY1ZDgyMmY1NzQ4ZGUxN2EwYjI0NWVkMmJmNDg3YWNmYTczNTMxMTAzZmNkNGE4OTJlMGVlYjczZWI1MDNkMzUxYWZmMTA1NTlhNjE5NzEyMGVkY2NlZTIxNTc5MjA3ZWY4Zjc5OWRhZTViZTQxY2I2N2EzY2U2Nw https://www.zutenis.lv/ajax/id:ZGVmNTAyMDBkMGU5MmUzZjY0NGFmYjc3ODAxMmYzMzdjNjIxNjAxNjUwYzk0Nzk0MDI3N2UwYzE5ZWMyZTAyYTc5Mjc0NWU2Mjg3ZGYxNzJhZjBjZDRhOGYzYTgwYjI4M2E1NjZkZmE1YjBhNjE0OTZlNmMxNjVlM2FhZWNjNDMxOWMyZTZjYzE2NTRkZTNiZDVjNGRjM2UxODI4MzhjOTg4YzBlNDU3/ac:init_project_update_pcheck/2fa:166422 https://www.zutenis.lv/ajax/id:ZGVmNTAyMDBkMGU5MmUzZjY0NGFmYjc3ODAxMmYzMzdjNjIxNjAxNjUwYzk0Nzk0MDI3N2UwYzE5ZWMyZTAyYTc5Mjc0NWU2Mjg3ZGYxNzJhZjBjZDRhOGYzYTgwYjI4M2E1NjZkZmE1YjBhNjE0OTZlNmMxNjVlM2FhZWNjNDMxOWMyZTZjYzE2NTRkZTNiZDVjNGRjM2UxODI4MzhjOTg4YzBlNDU3/ac:init_project_update_status_update/ 3.0.227 0
4 1565102711 https://www.zutenis.lv/a:file/p:1/f:ZGVmNTAyMDBkZWQ4YzA1NjIzOWE3YWUwZmI4NDRjNTAyNmY2M2NiNTY2ZGI2MjRkOGQ1Yjc5NzBlNjZhMTgwMzU0MGUxNjk3NDVmNzU4YjRkYWRhZTE3Nzg5ZjNlZjQxYTI5ZDIxYjUzMzI4ZDBjOGJhMjJkMTBmMjU2NTZjMGI0ZjQ4Mjc0YzQ2M2FkYTRiZDUzMWY4NmIwYWEwYjNlMjRlMjZlNjIyZTExMGM2Y2FiOGVmZDg5MjlkMjczZWMxNzdhMWMyMjMxODg4MjU4MTkyODAyNDRkY2RlMGJiOTU3MWQxOWU3ZmUxMmE0ZWFiYTM2MWQwNGIyOWU3MDQ3M2NhY2ZkYzE1ZDRiYWEzYjFkYw https://www.zutenis.lv/ajax/id:ZGVmNTAyMDBmYmIzN2JmMWY0YTE3NDk5NTFlNmEyMjIwYjUxMmZlMWUyN2YxYmRkOGI1ZTQ2MTEzMzg1OTIyZDQyMWNiNDBlNmE2NWZjYjIyOTc3YzVmYTRjOTFmZGQzODIyZGU3OGM0Y2Q1MDdjNzAwZWEwM2NmZTM4MGU0Y2NiYmIxZWQzZGZlMTYxMzc1NTg2ZTgyODIzZWRiZTY4NjE5YjFmZmM3ZWM/ac:init_project_update_pcheck/2fa:279232 https://www.zutenis.lv/ajax/id:ZGVmNTAyMDBmYmIzN2JmMWY0YTE3NDk5NTFlNmEyMjIwYjUxMmZlMWUyN2YxYmRkOGI1ZTQ2MTEzMzg1OTIyZDQyMWNiNDBlNmE2NWZjYjIyOTc3YzVmYTRjOTFmZGQzODIyZGU3OGM0Y2Q1MDdjNzAwZWEwM2NmZTM4MGU0Y2NiYmIxZWQzZGZlMTYxMzc1NTg2ZTgyODIzZWRiZTY4NjE5YjFmZmM3ZWM/ac:init_project_update_status_update/ 3.0.227 4
5 1565103087 https://www.zutenis.lv/a:file/p:1/f:ZGVmNTAyMDBkMDBlZWZiZGQxMjI0MGE5Mjc3OGUzZTU5MWRlNWUxMGM4MWQ0Y2U1ODIyYWZjZTUwYzg0YjUyYWQwZDNiMmNkNzdlNmMyNzg0Y2ZiM2Q1ZjM3MmFjNDNhYmY1NTFiMzZmMGZkMmZmMDBkYmEwMTU5YmY1OWJhNjdkNDJlNjBmMzQwZGU5OGQ4MDQ1OGE4MzNkZTAxYjcwZTI1ZTZlZDJkNTNhYmFkYjEwNDA4MDk2OTRiNTE4MzllZWQxYTk4ZTY4NWM5MzE4NjY0YWZhNjZjNWNhZGY3MmYzZDNiM2ZjYmFjNmQyYWQ5MWYyMjcyNWNjYmRmYzUwNDAzMDUxMGQ0MjExYjdkNjRiNQ https://www.zutenis.lv/ajax/id:ZGVmNTAyMDBlNjY3YTBlMDVmMDRjMzAwOTAzNjczYTY4OTEwNjJmYTNmNjA0YmVjNmRjNjY0ODQ1MjIzNTBjZGU4NzViNWQ3NjVkNjQ5ZjY4MDI4NjYxMjM4ZDc2Y2M2ZTI2Mjc0NmEwOGI0NDVmZjRkNTdlZWNiNWEyN2QyYTk5N2MzYmE5ZWI0ZTk1N2MxY2Q5YjllNGU5NDFmNzM3NWQ2YjFjY2JjZjA/ac:init_project_update_pcheck/2fa:631964 https://www.zutenis.lv/ajax/id:ZGVmNTAyMDBlNjY3YTBlMDVmMDRjMzAwOTAzNjczYTY4OTEwNjJmYTNmNjA0YmVjNmRjNjY0ODQ1MjIzNTBjZGU4NzViNWQ3NjVkNjQ5ZjY4MDI4NjYxMjM4ZDc2Y2M2ZTI2Mjc0NmEwOGI0NDVmZjRkNTdlZWNiNWEyN2QyYTk5N2MzYmE5ZWI0ZTk1N2MxY2Q5YjllNGU5NDFmNzM3NWQ2YjFjY2JjZjA/ac:init_project_update_status_update/ 3.0.227 4
6 1565104331 https://www.zutenis.lv/a:file/p:1/f:ZGVmNTAyMDA3MmRiNTdhZDNkNDc2ZDUxOTkwMjc5Y2Q2M2ZiOWI4ZDUzN2U3MGRmOWNlZGFhODA0YjAzY2E5NDRhNTQ1NWYwZjQ0YWQ4MGViMjAwOTE1Nzc3MmY5YWMxNjM0M2M2ZmNmZDk4MGE2NzdkMjM1MmU1NDg3N2E0NDFmYTExMzQwMmY5M2MyYmY1MWVlMzdhMGIxN2E2YmZlMWVhMWViZDg5Mjc4YzNhZTA2MDdjODhjNzFmMDE3M2FlMmI0ODk5ZTMxMTJmMjNkM2YwYWJmZDZhNzZkM2JlOTgwNjViYTIxMzYxNmMzOTBhMjBiZjFlOGNjMWUzM2Q5MTIzMmFhYjk2MTU1NmQ0YTM3NQ https://www.zutenis.lv/ajax/id:ZGVmNTAyMDBhM2Q3MTdlMmM3Y2U1YzFlMDYyYjcyNjViM2JkOGE3YTUxN2I3YTU5NDRkMzc3NWI3MTAwYjEyNWU0ZGUwZjA0ZGM5MzNkZTc4ZjAxMWVlYWY0Zjg4M2JjY2E4MDJmMGQ5NDU5MTk4NjAzNzkzNmQ4M2E5Yzk2Yjk0OGJhZDM2OWQ5MmVlYzQ3NjkyYTgzOGZmMGU2NGY0NDJmZTcxM2YyYTY/ac:init_project_update_pcheck/2fa:580379 https://www.zutenis.lv/ajax/id:ZGVmNTAyMDBhM2Q3MTdlMmM3Y2U1YzFlMDYyYjcyNjViM2JkOGE3YTUxN2I3YTU5NDRkMzc3NWI3MTAwYjEyNWU0ZGUwZjA0ZGM5MzNkZTc4ZjAxMWVlYWY0Zjg4M2JjY2E4MDJmMGQ5NDU5MTk4NjAzNzkzNmQ4M2E5Yzk2Yjk0OGJhZDM2OWQ5MmVlYzQ3NjkyYTgzOGZmMGU2NGY0NDJmZTcxM2YyYTY/ac:init_project_update_status_update/ 3.0.227 4
7 1565104507 https://www.zutenis.lv/a:file/p:1/f:ZGVmNTAyMDAxODg2YWFmNzNmNDc2MTc3MDg0Mjc0NDkwODkxMTcyMmM3MWQzODJhZjIwOTBjMGVhNGI3MWZiYTM2MDA5NzFmNjAxNTIzZmI5ZjFlNmU2NTAzYWMzZTM5OWQ0MDMyYzkxN2YxMjMxMTgwYmU5MjQ1YTExYzM3NmFhOTk2MjRmNmVhN2Y1NzZmNzI2N2YyNmU0N2U1NGJhNjBiOGZhOTI1ZTMzZjFmNDMxZjkzZjdjN2RjY2Y3ZDg3ODhkMjA1N2IwM2VmZGExZmY1ODMzMWExNWU4M2M4ZTcxOGJkNWZiM2YyNTQ3OWIyY2QwMGIxYTQ4ZWY1NTcxMzUxZjQxMjRlOGJjMTZlYzRmOQ https://www.zutenis.lv/ajax/id:ZGVmNTAyMDBkYzk0YWU2YjA0MzE3NTU2NWYxNThiMDM0Mzg2MDNjMjY5YTk5ODk0NjJlN2ViNTY1NzdhMDlkNzZmMTU4MjYzMWY4NTEwYTc0ODA4MjNhZGQyMTE2ZTZlYjYxMTAyZWE5MDY5MTkxODJjZDhkMzJjMDM5OTViZjVmNDdjMTM4NDJiODc4MzI4YjU4MGY5NmM0ODEyNmI4OTFlMTRiMjU2OGQ/ac:init_project_update_pcheck/2fa:870638 https://www.zutenis.lv/ajax/id:ZGVmNTAyMDBkYzk0YWU2YjA0MzE3NTU2NWYxNThiMDM0Mzg2MDNjMjY5YTk5ODk0NjJlN2ViNTY1NzdhMDlkNzZmMTU4MjYzMWY4NTEwYTc0ODA4MjNhZGQyMTE2ZTZlYjYxMTAyZWE5MDY5MTkxODJjZDhkMzJjMDM5OTViZjVmNDdjMTM4NDJiODc4MzI4YjU4MGY5NmM0ODEyNmI4OTFlMTRiMjU2OGQ/ac:init_project_update_status_update/ 3.0.227 4
8 1565104691 https://www.zutenis.lv/a:file/p:1/f:ZGVmNTAyMDAyZTBiNmE2NGI3YjEyODBkYjY3N2Y4N2U1MWVhOWQyMjk2ZWU3MmRlOTEzMGFhY2U1ODY1Y2QxMDMzOTM3MGE2NjFiNjFjM2JiNGMzNGJiZjcxZDE4YzYxNzBjZDdjYWNkZjA0N2VjMjdiYTAyNWY2OGRjNjRlZjgxNzg5NDNmMzRlNDEyOWNmZmI1ODAxZWY2MGIzOGNlNzJhZTUyMDA5NDZmOGFjNjk4NzViMGQ0MzI5ZWFiNGQ0ZjA2MmRiNGIzMmMyODNkMjY0NDZjODY1YzA3M2M0Y2UwZjZlN2I1ODE3Y2EyM2VlMDM2OTY0ODYwNTBiYzJmNjliMjgxNDRiZDZkZTM0OTJhOA https://www.zutenis.lv/ajax/id:ZGVmNTAyMDBlMmE4OGNkZjVhNDNlZWMzODczYzZkYTQ3ODQ4NjlkNzJjYzc4MWYyNzY1MzkzNjk3YTE0NjE0ZjEzYzY4NTU1YWZiN2Y0NzIzMWQzNDI2OTRhODM2OTk0ZWY4M2E5YzRkYWMxNWIzMmY0M2Q1MWQ2YTYxZGZiMDc3NTdlZmNlYzI5YzRkZjI4MzdiNWNmODU2ZmIxNGU0OTkzOThhM2UwNjE/ac:init_project_update_pcheck/2fa:395703 https://www.zutenis.lv/ajax/id:ZGVmNTAyMDBlMmE4OGNkZjVhNDNlZWMzODczYzZkYTQ3ODQ4NjlkNzJjYzc4MWYyNzY1MzkzNjk3YTE0NjE0ZjEzYzY4NTU1YWZiN2Y0NzIzMWQzNDI2OTRhODM2OTk0ZWY4M2E5YzRkYWMxNWIzMmY0M2Q1MWQ2YTYxZGZiMDc3NTdlZmNlYzI5YzRkZjI4MzdiNWNmODU2ZmIxNGU0OTkzOThhM2UwNjE/ac:init_project_update_status_update/ 3.0.227 4
9 1565105002 https://www.zutenis.lv/a:file/p:1/f:ZGVmNTAyMDBiZjhmMWM4ZDNjNGQ5Njg3MDc3NTAyNGQ0NmMyYjk0OTA2MjY3NjJiMTM3YTNhZjNiMzQ1MDQ0OGQwYmNmM2JkYzBjYjZlZTU4NGJlODVmM2NhODI3ZDk4OTVhYmJhOGM0MTk4ZWFiMTdkNGU4N2FlYTg1NTQxNGY0NGM2N2YxODUxYTFlMDI0YmVhMjdlYjE4MzVkZWRiN2QxMTUxZjQyZTBkZGUxYTFlY2Y3ZTAyN2U2ODkxMTU5NzcyMThjNDlhMmExY2VjNjY4OWViZTg2OWI2ZDRhOGJlOWI3YzdkMGI0ZWQ0NGJiMDhjN2IyMzU3MmY3MmZkYzcxYjZhNmY5N2I5MjIyYTA3MA https://www.zutenis.lv/ajax/id:ZGVmNTAyMDA5NTVmNmI0ZGExMGIyMDdiY2IwMTM4OTI2MWJhZDliNzAyZGIyYjI3YWRjNTdjNGJlMmRkODY3YTVmOWE5Njk0NDk2NzY5YmMzYmIwNmU2Mzg1Mzk5MzFiNWM1YTBmZWU0ZjM3NDk2ODY0OTBiYmI5ODViZTIxMDM0OTRmYWMzN2E2YWIzMjVjNTE2OGVkZTVmMzJkYWVhNTA0OTI0NzE0NmQ4Mg/ac:init_project_update_pcheck/2fa:477209 https://www.zutenis.lv/ajax/id:ZGVmNTAyMDA5NTVmNmI0ZGExMGIyMDdiY2IwMTM4OTI2MWJhZDliNzAyZGIyYjI3YWRjNTdjNGJlMmRkODY3YTVmOWE5Njk0NDk2NzY5YmMzYmIwNmU2Mzg1Mzk5MzFiNWM1YTBmZWU0ZjM3NDk2ODY0OTBiYmI5ODViZTIxMDM0OTRmYWMzN2E2YWIzMjVjNTE2OGVkZTVmMzJkYWVhNTA0OTI0NzE0NmQ4Mg/ac:init_project_update_status_update/ 3.0.227 4
10 1565105466 https://www.zutenis.lv/a:file/p:1/f:ZGVmNTAyMDBhYzhlNDZlMGM0ODMzZDliYjBhZDdjMWY2MmFjZjlhYjE3ZmQyNTM2NjE1MjliM2FiYTQ1OTc2MDYwNzBiODVjNjZlOThhYzAzNGU4OTUyYTkxYWUwZjBjOGI4YWQ4MjY5ZGM1NjQxZGZiZWE2MmI5ZDkwN2E5OWJlZWFkNWE4NzVjZmQ0ZmY3MDI1ZDc1ZGYxZDkwYzUxMGZiNmU5MTFhM2RhOWMyYjFmZDE2MTc2YTFjMGM1OGM4MGU4Yzg4MjkyYmY1OGU5MmI2YTY0MzlmZGY5MDVkZmM0YTIzMTg0ZjJhMGQ4NWE1NmJmYjFhOTIwYTA2OTI0ZjMwYWMxYjE5YjRkNGIzZTNkZA https://www.zutenis.lv/ajax/id:ZGVmNTAyMDA1ODQ5NWIyYTQ2NzNlM2QyMmRlZmY1NmYyNzM0OWQyNDdhOWE0N2VjZDFlMzlmOGExNjBiNGU1OGZjMzIwYTgxMjY2NDlmMmNlZjk4NjJhMDRhMGQ4YjhmZTlkNWJlZDJmNDUzYTRmZDU1NjQ1YzgyYzUzZTZkMmQ4ZWU2ODIxMTc2NTk0NTU4ODc3ZWFmOTJjNDYwNGIwYmMxYjI0Mjk2MGU0OA/ac:init_project_update_pcheck/2fa:606334 https://www.zutenis.lv/ajax/id:ZGVmNTAyMDA1ODQ5NWIyYTQ2NzNlM2QyMmRlZmY1NmYyNzM0OWQyNDdhOWE0N2VjZDFlMzlmOGExNjBiNGU1OGZjMzIwYTgxMjY2NDlmMmNlZjk4NjJhMDRhMGQ4YjhmZTlkNWJlZDJmNDUzYTRmZDU1NjQ1YzgyYzUzZTZkMmQ4ZWU2ODIxMTc2NTk0NTU4ODc3ZWFmOTJjNDYwNGIwYmMxYjI0Mjk2MGU0OA/ac:init_project_update_status_update/ 3.0.227 4
11 1565115469 https://www.zutenis.lv/a:file/p:1/f:ZGVmNTAyMDA3ZmMzYzE1MzcyYTIxMDRjMTZmNTRkY2UzZTY5N2VlYWQ5YTgxZGIxYWUzMDA5YmQ1ODY4ZjE5MjBkYjRiZTQ1MDhiYzQ3ZTVjN2E5MGVmMTZmNmFlMGRlMjJhYTk4YTYwZjY3OTM2MDRiMGM0OWFhMzVkYWQ5MWRmOGNlMWJlOWE5YjdhNmQzM2EyNGYwMWU1NjA0MTQ1MTE3YTEwMmQ5MmI0ZTVjODBhMzNkZWFjYmI1NTYwOGI0ZGYwMGJiMmY0YmFmN2Y4MDVkZDM1NzY2MDQ0M2NlZWFkNDkyZDBhNzAzMjk0Y2E3YzMzM2ViNmEyZWRjMmEwYzc0NjdhY2MxMzk1YjQ1Zjk0MA https://www.zutenis.lv/ajax/id:ZGVmNTAyMDA0MDM0ZTNiMGFmN2IxZmZiZDhkZGJmYjJiNDI5NDQ3NzA4ZjljNGU2YzZmMzViNTg4YTJkZjRkMDI3ZDM3NjM0YzUzMTgyNzA4Yjk3Y2ZkMmZiOWVhZDQ2M2RiNTczYjM2MmJlYjg3NzEyODc5OTM4MzQ0YTU1MmE1NmQ0MjY4MWJmNTk5Nzc5MzQ2NDUwMmVmNTU1M2E2ZmNlMGM5NDZmOTU1ZA/ac:init_project_update_pcheck/2fa:906870 https://www.zutenis.lv/ajax/id:ZGVmNTAyMDA0MDM0ZTNiMGFmN2IxZmZiZDhkZGJmYjJiNDI5NDQ3NzA4ZjljNGU2YzZmMzViNTg4YTJkZjRkMDI3ZDM3NjM0YzUzMTgyNzA4Yjk3Y2ZkMmZiOWVhZDQ2M2RiNTczYjM2MmJlYjg3NzEyODc5OTM4MzQ0YTU1MmE1NmQ0MjY4MWJmNTk5Nzc5MzQ2NDUwMmVmNTU1M2E2ZmNlMGM5NDZmOTU1ZA/ac:init_project_update_status_update/ 3.0.227 3
12 1565115849 https://www.zutenis.lv/a:file/p:1/f:ZGVmNTAyMDBiNjUxNzIyMTk2ZTI0ZTQ2MWYwNGMyZjM4MGM3YWM3ZDM0NGZjZDlkYTQxYWYxODIyZTAzZTI3ZGU0N2VlOWZiMDhiNDBmY2RmYjA0NmM0NzdlOGMzNmE5MWVlM2FhYTEzMjlkMjY0NjM5ODZhNzY3MWQxNjUwZjQ4Nzg3MzExYWUzYjM5NjBlOGRhNzgwZmY2YmQxMTNlZDI1OTIxZGQyNDBiZjFiMDc4ZDFhYTE5MjhhMTFjM2Y3NzBmZDc2MTE3MjAxZGUwY2YyMjlmOWQyZmYzMTM0YTk5NzY1MGUxZmJhOTU0Yzk2OTczYjdhNWJmMzczMGFiOTZlNmM0MjgyZjNjMWIzMDBlYg https://www.zutenis.lv/ajax/id:ZGVmNTAyMDA0YzJkZTMwMmQ0NTcxZmQ5ZGFlMzhmYzY0YTE1OGYxY2Q1ODYwOTczYWI1OTQ0ODYzYWVmMzMzNGU5MWYwODlhZDdhMGNiZGM5YjlmODA4NmM5NmM1ZTY3YTBlYTFkOGNkNjg4Y2I1OWUwZTZjZWU4NjM2MDc1NThkNTQ5YTZhZWY1NDhhZDkxNjliYmVjZDVmOGI5YTdhN2YyMTViOWI3MGIwZg/ac:init_project_update_pcheck/2fa:947179 https://www.zutenis.lv/ajax/id:ZGVmNTAyMDA0YzJkZTMwMmQ0NTcxZmQ5ZGFlMzhmYzY0YTE1OGYxY2Q1ODYwOTczYWI1OTQ0ODYzYWVmMzMzNGU5MWYwODlhZDdhMGNiZGM5YjlmODA4NmM5NmM1ZTY3YTBlYTFkOGNkNjg4Y2I1OWUwZTZjZWU4NjM2MDc1NThkNTQ5YTZhZWY1NDhhZDkxNjliYmVjZDVmOGI5YTdhN2YyMTViOWI3MGIwZg/ac:init_project_update_status_update/ 3.0.227 3
13 1565116438 https://www.zutenis.lv/a:file/p:1/f:ZGVmNTAyMDBhMjFiMDdlMzhjODZhM2YwYjY4OWQ0MmM0ZDU2ODZlNWY4MzJhNDgwOTU3YzYxYTk4MTQzNjdhYmE4ZmZiZTExZGZkNWI3MzdjYTY2NzQ1ZWExNmU4ZGVmZTM3NmZjYzUzNjg3NjRiODcxNGY3ZGNkMzUxMDhhZWM5ZjU4MmU0ZDYxZjI1MjlhMzQyNmQ3ODRiNTY2MzQ4ZmNiZmRhZTZiZjA1MWNjNjFiOThlODU2MDI3MjBlN2JmNzQ4MWVkZDc3ZjkzYjAxNjIzYTM5YmU3NmZhYjM2ZjJkNjMzNmQ2YjkyYTZlNzQxMTliNTM5MGVlMDJiNzJiMTc2MzhjMDU0OGFjY2Y3YWY5Mg https://www.zutenis.lv/ajax/id:ZGVmNTAyMDBjZDFiNDk4ZDQ5MzFkOGZhMjJjOTE5ZGM5MGQ3NGM0YzAzZDhmMmNmMzQ2NmEzZWFkYTgzZTRkZDI3MjQ5ZmRiY2MyZDgwNmI0MDczMzY3MDc2MGQwZDk3ODg0MjE0ZDE0MDRhYzY4MGZiMTM5ZmUzOTViNTg5Yjk1ZGUxY2M3MjM5NGUzNzNlNTM1NDhlMzc0NDA1NzUxMmMxYmQ0YjJhOGI4OQ/ac:init_project_update_pcheck/2fa:880333 https://www.zutenis.lv/ajax/id:ZGVmNTAyMDBjZDFiNDk4ZDQ5MzFkOGZhMjJjOTE5ZGM5MGQ3NGM0YzAzZDhmMmNmMzQ2NmEzZWFkYTgzZTRkZDI3MjQ5ZmRiY2MyZDgwNmI0MDczMzY3MDc2MGQwZDk3ODg0MjE0ZDE0MDRhYzY4MGZiMTM5ZmUzOTViNTg5Yjk1ZGUxY2M3MjM5NGUzNzNlNTM1NDhlMzc0NDA1NzUxMmMxYmQ0YjJhOGI4OQ/ac:init_project_update_status_update/ 3.0.227 2

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,44 @@
1 SYS_PERMISSIONS Group for full permission handler 0 1423392073 1423392073
2 SYS_PERMISSION_GROUPS Full Manage user groups global permissions 0 1423392077 1423392077
4 SYS_SITE_MAP Site map full control package including Programmer development Kit 0 1423392469 1423392469
5 SYS_LANGUAGES Global site languages permissions 0 1423392293 1423392293
6 SYS_MENUS Global site menu management 0 1352374986 1352374986
7 PUB_MESSAGES Global permissions to edit &amp; see application messages. 0 1352374493 1352374493
8 SYS_MESSAGES Global full permission to handle cms messages. 0 1352378047 1352378047
23 CMS_CLASSIFICATORS Group ment for manageing clasificators 0 1423401314 1423401314
24 TEMPLATE_MANAGER Permission group for managing tempalte data 0 0 0
25 SYS_USERS SYS side user manipulation operations 0 1352375111 1352375111
33 SYS_IP_FILTER Full ipfilter module permissions 0 1352376410 1352376410
35 CMS_MAIL_ENGENE Full permission gr form mail engine 0 1442444762 1442444762
36 CMS_MAIL_CONSTRUCTOR Full permissions for mail constructor 0 1352376743 1352376743
37 CMS_APP_USERS Full permission group for public user management 0 1463956542 1463956542
49 WELCOME Welcome user permission gr. 0 1423329509 1423329509
57 SYS_APC_FULL Apc overview management permission group 0 1369839799 1369839799
59 SYS_ACTION_LOG_P Action log permissions 0 1380263881 1380263881
60 CMS_APP_PERMISSIONS Full app permission management package 0 1463989400 1463989400
61 CMS_APP_PERMISSION_GROUPS Full cms permission management package 0 1463989727 1463989727
62 CMS_CATEGORIES_FULL Permission gr for managing categories 0 1395761270 1395761270
63 CMS_DELIVERY_FULL Full delivery management group 0 1395764145 1395764145
65 CMS_ORDERS_FULL Full order group 0 1398721398 1398721398
68 CMS_TEXTMANAGER_ALL All permissions for text manager 0 1442842110 1567716402
69 CMS_OBJECTS_MANAGER full object manager permission 0 1506968446 1506968446
71 SYS_SITE_MAP_NEW Full new system site map permissions 0 1515602401 1515602401
72 CMS_APP_SITE_MAP Full permissions for cms APP site map new 0 1463991665 1463991665
76 CMS_ACCOUNT_MANAGER Full cms account manager permission 0 0 1558981471
77 CMS_PARTNERS Full cms partners permissions 0 1506677004 1506677004
79 CMS_APARTMENTS Full permission for cms apartments 0 1535965979 1535965979
80 CMS_ASSOCIATION_EMAILS Full cms permission for association emails module 0 1535967545 1535967545
82 CMS_MESSAGES Pub messages module - Full permission for cms messages 0 1545916821 1593683708
83 CMS_PUB_SUBSCRIPTIONS Full permission for cms pub subscriptions 0 1545941538 1545941538
84 SYS_SITE_MODULES Full permission for sys site modules 0 1548409657 1548409657
85 CMS_REPORTS_DEF Full permission for cms reports def 0 1559651896 1559651896
86 CMS_ACCOUNTS_TO_BILL Full permission for cms accounts to bill 0 1564655183 1564655183
87 CMS_SVN_PROJECT_MODULE Full permissions for cms SVN project management module 0 1566210073 1566223111
88 CMS_SVN_PROJECT_MODULE_ALL_PROJECTS Access all projects 0 1569838138 1569839590
90 CMS_ACCOUNT_ACTIVATION Full permission for account activation 0 1585216725 1585216816
91 E_COMMERCE eCommerce full permissions 0 1777019495 1777021507
94 CMS_APP_PRODUCTS Full permission for cms app products 0 1777020521 1777020521
96 CMS_APP_PROD_ATT Full permission for cms app prod att 0 1777020708 1777020708
97 CMS_APP_ORDER_RECEIPTS Full permission for cms app order receipts 0 1777020830 1777020830
98 CMS_APP_DELIVERY Full permission for cms app delivery 0 1777020907 1777020907
99 CMS_APP_BUYS Full permission for cms app buys 0 1777021172 1777021172

View File

@ -0,0 +1,821 @@
148 0 3 12
149 0 3 13
150 0 3 11
151 0 3 18
360 0 10 56
361 0 10 65
362 0 10 51
363 0 10 58
364 0 10 66
365 0 10 53
366 0 10 57
367 0 10 64
368 0 10 52
369 0 10 50
370 0 10 62
371 0 10 63
493 0 12 35
494 0 12 34
495 0 12 33
496 0 12 36
497 0 12 39
498 0 12 38
499 0 12 37
500 0 12 40
501 0 12 23
667 0 14 34
668 0 14 33
669 0 14 36
670 0 14 22
671 0 14 23
713 0 15 23
714 0 15 46
715 0 15 48
716 0 15 47
717 0 15 49
718 0 15 42
719 0 16 70
720 0 16 71
721 0 16 69
722 0 16 68
740 0 20 45
741 0 20 44
742 0 20 43
743 0 20 41
1061 0 21 86
1062 0 21 85
1063 0 21 84
1099 0 11 23
1100 0 11 67
1104 0 22 88
1105 0 22 89
1106 0 22 81
1107 0 22 87
1116 0 17 97
1117 0 17 95
1118 0 17 94
1119 0 17 96
1120 0 17 74
1121 0 17 98
1122 0 17 99
1123 0 17 75
1124 0 17 72
1125 0 17 73
1126 0 17 81
1201 0 24 101
1202 0 24 105
1203 0 24 106
1204 0 24 104
1205 0 24 103
1259 0 18 107
1260 0 18 79
1261 0 18 80
1861 0 26 111
2063 0 29 8
2767 0 19 78
2768 0 19 76
2769 0 19 81
2770 0 19 77
2771 0 19 102
3789 0 7 35
3790 0 7 121
3791 0 7 34
3792 0 7 36
3793 0 7 22
3798 0 4 6
3799 0 4 2
3800 0 4 55
3801 0 4 7
3802 0 4 4
3803 0 4 3
3804 0 4 21
3805 0 4 5
3806 0 4 1
3807 0 1 8
3808 0 1 10
3809 0 1 9
3810 0 1 19
3811 0 1 20
3817 0 5 26
3818 0 5 27
3819 0 5 25
3820 0 5 28
3821 0 5 22
3822 0 6 29
3823 0 6 31
3824 0 6 30
3825 0 6 32
3826 0 6 22
3827 0 23 93
3828 0 23 91
3829 0 23 92
3830 0 23 90
3832 0 25 111
3833 0 25 113
3834 0 25 112
3835 0 25 18
3836 0 25 20
3837 0 30 132
3838 0 30 133
3839 0 30 131
3840 0 30 136
3841 0 30 135
3842 0 30 134
3843 0 30 130
3844 0 30 128
3845 0 30 81
4081 0 2 20
4082 0 2 14
4083 0 2 16
4084 0 2 15
4085 0 2 17
4123 0 33 20
4124 0 33 117
4125 0 33 118
4126 0 33 116
4127 0 33 119
4155 0 34 88
4156 0 34 89
4157 0 34 87
4158 0 34 81
4165 0 36 97
4166 0 36 96
4167 0 36 98
4168 0 36 75
4198 0 39 107
4199 0 39 125
4200 0 39 126
4201 0 39 124
4202 0 39 127
4203 0 39 123
4204 0 39 79
4205 0 39 80
4238 0 8 39
4239 0 8 120
4240 0 8 38
4241 0 8 37
4242 0 8 22
4311 0 40 46
4312 0 40 48
4313 0 40 47
4314 0 40 42
4315 0 40 70
4316 0 40 71
4317 0 40 69
4318 0 40 68
4319 0 40 67
4330 0 42 107
4331 0 42 125
4332 0 42 126
4333 0 42 124
4334 0 42 127
4335 0 42 123
4336 0 42 79
4337 0 42 80
4375 0 45 88
4376 0 45 87
4390 0 46 122
4391 0 46 44
4392 0 46 45
4393 0 46 41
4408 0 48 35
4409 0 48 121
4410 0 48 34
4411 0 48 36
4412 0 48 22
4520 0 50 70
4521 0 50 71
4522 0 50 69
4523 0 50 68
4599 0 51 140
4600 0 51 141
4601 0 51 139
4602 0 51 138
4649 0 49 23
4982 0 52 149
4983 0 52 148
4984 0 52 151
4985 0 52 147
4986 0 52 146
4987 0 52 144
4988 0 52 145
4989 0 52 150
5126 0 31 81
5127 0 31 86
5128 0 31 85
5129 0 31 129
5130 0 31 84
5131 0 31 152
5247 0 53 159
5248 0 53 161
5249 0 53 158
5250 0 53 160
5251 0 53 162
5252 0 54 159
5253 0 54 161
5254 0 54 158
5255 0 54 160
5256 0 54 162
5257 0 32 163
5258 0 32 165
5259 0 32 164
5260 0 32 166
5261 0 32 46
5262 0 32 48
5263 0 32 47
5264 0 32 109
5265 0 32 42
5266 0 32 70
5267 0 32 71
5268 0 32 69
5269 0 32 68
5270 0 32 67
5271 0 32 162
5273 0 55 163
5274 0 55 165
5275 0 55 164
5276 0 55 166
5277 0 55 162
5298 0 38 162
5299 0 38 122
5300 0 38 44
5301 0 38 45
5302 0 38 41
5303 0 38 167
5304 0 38 169
5305 0 38 168
5306 0 38 170
5307 0 56 167
5308 0 56 169
5309 0 56 168
5310 0 56 170
5311 0 56 162
5468 0 57 22
5469 0 57 172
5470 0 57 173
5471 0 57 174
5472 0 57 171
5632 0 58 155
5633 0 58 156
5634 0 58 154
5635 0 58 153
5679 0 59 177
5680 0 59 179
5681 0 59 178
5740 0 44 86
5741 0 44 129
5742 0 44 84
5743 0 44 81
5744 0 44 180
5823 0 41 97
5824 0 41 96
5825 0 41 98
5826 0 41 75
5828 0 43 78
5829 0 43 81
5830 0 43 76
5831 0 43 77
5832 0 47 72
5833 0 47 73
5834 0 47 81
6097 0 62 191
6098 0 62 190
6099 0 62 189
6100 0 62 192
6101 0 63 193
6102 0 63 195
6103 0 63 194
6104 0 63 196
6133 0 64 198
6134 0 64 199
6135 0 64 197
6136 0 64 200
6200 0 65 205
6201 0 65 206
6202 0 65 204
6203 0 65 203
6204 0 65 202
6205 0 65 207
6206 0 65 211
6207 0 65 201
6208 0 65 210
6565 0 35 157
6566 0 35 74
6567 0 35 94
6568 0 35 72
6569 0 35 99
6570 0 35 73
6571 0 35 81
6629 0 66 214
6630 0 66 215
6631 0 66 213
6632 0 66 212
6661 0 67 218
6662 0 67 217
6663 0 67 219
6664 0 67 216
7083 0 70 231
7084 0 70 236
7085 0 70 229
7086 0 70 230
7087 0 70 237
7088 0 37 224
7089 0 37 235
7090 0 37 76
7091 0 37 77
7092 0 37 232
7093 0 37 78
7099 0 60 238
7100 0 60 242
7101 0 60 240
7102 0 60 239
7103 0 60 233
7109 0 61 243
7110 0 61 246
7111 0 61 245
7112 0 61 244
7113 0 61 234
7318 0 72 254
7319 0 72 255
7320 0 72 253
7321 0 72 257
7322 0 72 256
7323 0 72 258
7399 0 74 266
7400 0 74 267
7401 0 74 265
7402 0 74 268
7403 0 74 264
7687 0 75 274
7688 0 75 272
7689 0 75 273
7690 0 75 275
7728 0 77 281
7729 0 77 282
7730 0 77 280
7731 0 77 283
7772 0 69 226
7773 0 69 227
7774 0 69 228
7775 0 69 225
7809 0 71 258
7810 0 71 249
7811 0 71 269
7812 0 71 250
7813 0 71 248
7814 0 71 252
7815 0 71 251
7880 0 78 284
7916 0 79 287
7917 0 79 288
7918 0 79 286
7919 0 79 285
7959 0 80 291
7961 0 80 290
7962 0 80 289
7963 0 80 292
7965 0 81 293
7966 0 81 294
7967 0 81 295
7968 0 81 296
8009 0 83 297
8010 0 83 298
8011 0 83 299
8012 0 83 300
8092 0 84 301
8093 0 84 302
8094 0 84 303
8095 0 84 304
8184 0 76 276
8185 0 76 277
8186 0 76 278
8187 0 76 279
8218 0 85 311
8219 0 85 312
8220 0 85 313
8221 0 85 314
8347 0 86 315
8348 0 86 316
8349 0 86 317
8350 0 86 318
8355 0 87 319
8356 0 87 320
8357 0 87 321
8358 0 87 322
8359 0 87 323
8360 0 87 324
8361 0 87 325
8403 0 68 24
8404 0 68 223
8405 0 68 222
8406 0 68 221
8407 0 68 220
8545 0 88 440
8546 0 88 441
8547 0 88 439
8548 0 88 322
8549 0 88 323
8550 0 88 444
8551 0 88 443
8552 0 88 442
8553 0 88 319
8554 0 88 445
8555 0 88 324
8556 0 88 325
8557 0 88 446
8558 0 88 447
8559 0 88 320
8560 0 88 448
8561 0 88 449
8562 0 88 450
8563 0 88 451
8564 0 88 321
8565 0 88 453
8566 0 88 452
8567 0 88 454
8568 0 88 455
8569 0 88 456
8570 0 88 438
8571 0 88 457
8927 0 90 462
8928 0 90 463
8929 0 90 465
8975 7 90 0
8976 7 35 0
8977 7 49 0
9037 0 7 466
9038 0 8 467
9039 0 82 294
9040 0 82 295
9041 0 82 293
9042 0 82 296
9212 9 0 67
9213 9 86 0
9214 9 76 0
9215 9 37 0
9216 9 23 0
9217 9 36 0
9218 9 35 0
9219 9 82 0
9220 9 83 0
9221 9 68 0
9222 9 7 0
9223 9 57 0
9224 9 5 0
9225 9 8 0
9226 9 49 0
9277 8 0 224
9278 8 0 176
9279 8 0 468
9280 8 0 439
9281 8 0 447
9282 8 0 448
9283 8 0 472
9284 8 0 452
9285 8 0 457
9286 8 0 3
9287 8 0 143
9288 8 0 269
9289 8 0 67
9290 8 0 5
9291 8 86 0
9292 8 90 0
9293 8 76 0
9294 8 79 0
9295 8 60 0
9296 8 61 0
9297 8 72 0
9298 8 37 0
9299 8 80 0
9300 8 62 0
9301 8 23 0
9302 8 63 0
9303 8 36 0
9304 8 35 0
9305 8 82 0
9306 8 69 0
9307 8 65 0
9308 8 77 0
9309 8 83 0
9310 8 85 0
9311 8 87 0
9312 8 68 0
9313 8 7 0
9314 8 59 0
9315 8 57 0
9316 8 33 0
9317 8 5 0
9318 8 6 0
9319 8 8 0
9320 8 1 0
9321 8 2 0
9322 8 4 0
9323 8 71 0
9324 8 84 0
9325 8 25 0
9326 8 24 0
9327 8 49 0
9431 0 92 475
9432 0 92 476
9433 0 92 477
9434 0 92 478
9435 0 92 479
9436 0 93 475
9437 0 93 476
9438 0 93 477
9439 0 93 478
9440 0 93 479
9441 0 94 475
9442 0 94 476
9443 0 94 477
9444 0 94 478
9445 0 94 479
9446 0 95 480
9447 0 95 481
9448 0 95 482
9449 0 95 483
9450 0 96 480
9451 0 96 481
9452 0 96 482
9453 0 96 483
9454 0 97 484
9455 0 97 485
9456 0 97 486
9457 0 97 487
9458 0 98 488
9459 0 98 489
9460 0 98 490
9461 0 98 491
9462 0 99 494
9463 0 99 495
9464 0 99 496
9465 0 99 497
9466 0 91 316
9467 0 91 317
9468 0 91 315
9469 0 91 318
9470 0 91 465
9471 0 91 462
9472 0 91 463
9473 0 91 277
9474 0 91 278
9475 0 91 276
9476 0 91 279
9477 0 91 287
9478 0 91 288
9479 0 91 286
9480 0 91 458
9481 0 91 285
9482 0 91 495
9483 0 91 496
9484 0 91 494
9485 0 91 497
9486 0 91 493
9487 0 91 489
9488 0 91 490
9489 0 91 488
9490 0 91 491
9491 0 91 474
9492 0 91 485
9493 0 91 486
9494 0 91 484
9495 0 91 487
9496 0 91 476
9497 0 91 477
9498 0 91 475
9499 0 91 479
9500 0 91 478
9501 0 91 481
9502 0 91 482
9503 0 91 480
9504 0 91 483
9505 0 91 291
9506 0 91 292
9507 0 91 290
9508 0 91 289
9509 0 91 214
9510 0 91 215
9511 0 91 213
9512 0 91 212
9513 0 91 191
9514 0 91 190
9515 0 91 189
9516 0 91 192
9517 0 91 93
9518 0 91 91
9519 0 91 92
9520 0 91 90
9521 0 91 193
9522 0 91 195
9523 0 91 194
9524 0 91 196
9525 0 91 218
9526 0 91 217
9527 0 91 219
9528 0 91 216
9529 0 91 157
9530 0 91 74
9531 0 91 94
9532 0 91 72
9533 0 91 99
9534 0 91 73
9535 0 91 176
9536 0 91 97
9537 0 91 96
9538 0 91 98
9539 0 91 75
9540 0 91 294
9541 0 91 295
9542 0 91 293
9543 0 91 296
9544 0 91 205
9545 0 91 206
9546 0 91 204
9547 0 91 281
9548 0 91 282
9549 0 91 280
9550 0 91 283
9551 0 91 298
9552 0 91 299
9553 0 91 297
9554 0 91 300
9555 0 91 312
9556 0 91 313
9557 0 91 311
9558 0 91 314
9559 0 91 175
9560 0 91 470
9561 0 91 440
9562 0 91 468
9563 0 91 441
9564 0 91 439
9565 0 91 469
9566 0 91 459
9567 0 91 322
9568 0 91 323
9569 0 91 444
9570 0 91 443
9571 0 91 442
9572 0 91 319
9573 0 91 445
9574 0 91 324
9575 0 91 325
9576 0 91 446
9577 0 91 447
9578 0 91 320
9579 0 91 448
9580 0 91 472
9581 0 91 449
9582 0 91 450
9583 0 91 451
9584 0 91 321
9585 0 91 453
9586 0 91 452
9587 0 91 454
9588 0 91 455
9589 0 91 473
9590 0 91 456
9591 0 91 438
9592 0 91 457
9593 0 91 223
9594 0 91 222
9595 0 91 221
9596 0 91 220
9597 0 91 3
9598 0 91 203
9599 0 91 202
9600 0 91 207
9601 0 91 208
9602 0 91 211
9603 0 91 201
9604 0 91 210
9605 0 91 274
9606 0 91 272
9607 0 91 273
9608 0 91 275
9609 0 91 270
9610 0 91 177
9611 0 91 179
9612 0 91 178
9613 0 91 20
9614 0 91 172
9615 0 91 173
9616 0 91 174
9617 0 91 171
9618 0 91 467
9619 0 91 39
9620 0 91 120
9621 0 91 38
9622 0 91 37
9623 0 91 128
9624 0 91 117
9625 0 91 118
9626 0 91 116
9627 0 91 119
9628 0 91 26
9629 0 91 27
9630 0 91 25
9631 0 91 28
9632 0 91 29
9633 0 91 31
9634 0 91 30
9635 0 91 32
9636 0 91 258
9637 0 91 8
9638 0 91 10
9639 0 91 9
9640 0 91 19
9641 0 91 14
9642 0 91 16
9643 0 91 15
9644 0 91 17
9645 0 91 466
9646 0 91 35
9647 0 91 121
9648 0 91 34
9649 0 91 36
9650 0 91 22
9651 0 91 137
9652 0 91 143
9653 0 91 249
9654 0 91 269
9655 0 91 250
9656 0 91 248
9657 0 91 252
9658 0 91 251
9659 0 91 302
9660 0 91 303
9661 0 91 306
9662 0 91 301
9663 0 91 304
9664 0 91 18
9665 0 91 23
9666 0 91 6
9667 0 91 2
9668 0 91 55
9669 0 91 54
9670 0 91 7
9671 0 91 1
9672 0 91 101
9673 0 91 105
9674 0 91 106
9675 0 91 104
9676 0 91 103
9677 0 91 67
9678 0 91 111
9679 0 91 113
9680 0 91 112
9681 0 91 5
9682 0 91 4
9683 0 91 21
9684 1 0 458
9685 1 0 176
9686 1 0 470
9687 1 0 468
9688 1 0 469
9689 1 0 459
9690 1 0 472
9691 1 0 473
9692 1 0 137
9693 1 0 143
9694 1 0 101
9695 1 0 67
9696 1 86 0
9697 1 90 0
9698 1 76 0
9699 1 79 0
9700 1 60 0
9701 1 61 0
9702 1 72 0
9703 1 37 0
9704 1 80 0
9705 1 62 0
9706 1 23 0
9707 1 63 0
9708 1 36 0
9709 1 35 0
9710 1 82 0
9711 1 69 0
9712 1 65 0
9713 1 77 0
9714 1 83 0
9715 1 85 0
9716 1 87 0
9717 1 88 0
9718 1 68 0
9719 1 91 0
9720 1 7 0
9721 1 59 0
9722 1 57 0
9723 1 33 0
9724 1 5 0
9725 1 6 0
9726 1 8 0
9727 1 1 0
9728 1 2 0
9729 1 4 0
9730 1 71 0
9731 1 84 0
9732 1 25 0
9733 1 24 0
9734 1 49 0

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,51 @@
1 1 1776857158 Mareks @ Admin logged in!
2 1 1776938450 Mareks @ Admin logged in!
3 1 1777018154 Mareks @ Admin logged in!
4 1 1777279557 Mareks @ Admin logged in!
5 1 1782391397 Mareks @ Admin logged in!
6 1 1782460375 Mareks @ Admin logged in!
7 1 1782483517 Mareks @ Admin logged in!
8 1 1782812479 Mareks @ Admin logged in!
9 1 1782820912 Mareks @ Admin logged in!
10 1 1782894746 Mareks @ Admin logged in!
11 1 1782896964 Mareks @ Admin logged in!
12 1 1782991936 Mareks @ Admin logged in!
13 1 1783015721 Mareks @ Admin logged in!
14 1 1783022054 Mareks @ Admin logged in!
15 1 1783067370 Mareks @ Admin logged in!
16 1 1783078639 Mareks @ Admin logged in!
17 1 1783324630 Mareks @ Admin logged in!
18 1 1783339967 Mareks @ Admin logged in!
19 1 1783412000 Mareks @ Admin logged in!
20 1 1783505092 Mareks @ Admin logged in!
21 1 1783670826 Mareks @ Admin logged in!
22 1 1783689002 Mareks @ Admin logged in!
23 1 1783928696 Mareks @ Admin logged in!
24 1 1783938868 Mareks @ Admin logged in!
25 1 1784012276 Mareks @ Admin logged in!
26 1 1784018886 Mareks @ Admin logged in!
27 1 1784067669 Mareks @ Admin logged in!
28 1 1784103110 Mareks @ Admin logged in!
29 1 1784128151 Mareks @ Admin logged in!
30 1 1784196370 Mareks @ Admin logged in!
31 1 1784271260 Mareks @ Admin logged in!
32 1 1784533839 Mareks @ Admin logged in!
33 1 1784546406 Mareks @ Admin logged in!
34 1 1784570343 Mareks @ Admin logged in!
35 1 1784624984 Mareks @ Admin logged in!
36 1 1784652379 Mareks @ Admin logged in!
37 1 1784719573 Mareks @ Admin logged in!
38 1 1784724400 Mareks @ Admin logged in!
39 1 1784737693 Mareks @ Admin logged in!
40 1 1784758194 Mareks @ Admin logged in!
41 1 1784891495 Mareks @ Admin logged in!
42 1 1785142067 Mareks @ Admin logged in!
43 1 1785180551 Mareks @ Admin logged in!
44 1 1785221482 Mareks @ Admin logged in!
45 1 1785245920 Mareks @ Admin logged in!
46 1 1785331809 Mareks @ Admin logged in!
47 1 1785350923 Mareks @ Admin logged in!
48 1 1785409063 Mareks @ Admin logged in!
49 1 1785438340 Mareks @ Admin logged in!
50 1 1785479647 Mareks @ Admin logged in!
51 1 1788999246 Mareks @ Admin logged in!

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,738 @@
1776857159 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 863b12de7840b8dcd75d5df72c67ee0d
1776938451 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 863b12de7840b8dcd75d5df72c67ee0d
1777018154 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777018461 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777018765 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777019354 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777019666 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777020416 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777020790 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777021126 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777021507 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777021815 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777022751 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777023056 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777023386 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777023706 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777025784 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777026839 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777027708 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777028212 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777028899 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777029268 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777029594 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777030795 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777032300 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 e4242a5f2f12023521a695428f745c98
1777279557 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 98c234782bf7f05c6a68c234d6964149
1777282594 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 98c234782bf7f05c6a68c234d6964149
1777285425 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 98c234782bf7f05c6a68c234d6964149
1777286029 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 98c234782bf7f05c6a68c234d6964149
1777286613 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 98c234782bf7f05c6a68c234d6964149
1777286984 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 98c234782bf7f05c6a68c234d6964149
1777287290 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 98c234782bf7f05c6a68c234d6964149
1777287665 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 98c234782bf7f05c6a68c234d6964149
1777287966 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 98c234782bf7f05c6a68c234d6964149
1777288519 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 98c234782bf7f05c6a68c234d6964149
1777289314 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 98c234782bf7f05c6a68c234d6964149
1777290408 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 98c234782bf7f05c6a68c234d6964149
1777290782 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 98c234782bf7f05c6a68c234d6964149
1777291246 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 98c234782bf7f05c6a68c234d6964149
1777291616 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 98c234782bf7f05c6a68c234d6964149
1777292343 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 98c234782bf7f05c6a68c234d6964149
1777292735 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 98c234782bf7f05c6a68c234d6964149
1777293036 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 98c234782bf7f05c6a68c234d6964149
1777293519 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 98c234782bf7f05c6a68c234d6964149
1777293823 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 98c234782bf7f05c6a68c234d6964149
1782391398 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 662fc64ddf257674af58e12596a49793
1782391912 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 662fc64ddf257674af58e12596a49793
1782392928 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 662fc64ddf257674af58e12596a49793
1782394573 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 662fc64ddf257674af58e12596a49793
1782394921 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 662fc64ddf257674af58e12596a49793
1782460376 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 662fc64ddf257674af58e12596a49793
1782460716 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 662fc64ddf257674af58e12596a49793
1782483518 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 e3455b86083bed73d0d4c871dd2ad68a
1782484428 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 e3455b86083bed73d0d4c871dd2ad68a
1782485038 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 e3455b86083bed73d0d4c871dd2ad68a
1782485723 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 e3455b86083bed73d0d4c871dd2ad68a
1782812480 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 41ba1c7f8b9cc29be9a20dc466fa6645
1782812782 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 41ba1c7f8b9cc29be9a20dc466fa6645
1782813102 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 41ba1c7f8b9cc29be9a20dc466fa6645
1782813457 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 41ba1c7f8b9cc29be9a20dc466fa6645
1782813786 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 41ba1c7f8b9cc29be9a20dc466fa6645
1782814165 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 41ba1c7f8b9cc29be9a20dc466fa6645
1782815271 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 41ba1c7f8b9cc29be9a20dc466fa6645
1782815578 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 41ba1c7f8b9cc29be9a20dc466fa6645
1782819313 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 41ba1c7f8b9cc29be9a20dc466fa6645
1782820919 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 41ba1c7f8b9cc29be9a20dc466fa6645
1782821243 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 41ba1c7f8b9cc29be9a20dc466fa6645
1782821560 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 41ba1c7f8b9cc29be9a20dc466fa6645
1782821870 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 41ba1c7f8b9cc29be9a20dc466fa6645
1782822231 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 41ba1c7f8b9cc29be9a20dc466fa6645
1782822532 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 41ba1c7f8b9cc29be9a20dc466fa6645
1782822840 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 41ba1c7f8b9cc29be9a20dc466fa6645
1782823336 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 41ba1c7f8b9cc29be9a20dc466fa6645
1782823763 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 41ba1c7f8b9cc29be9a20dc466fa6645
1782825494 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 41ba1c7f8b9cc29be9a20dc466fa6645
1782827474 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 41ba1c7f8b9cc29be9a20dc466fa6645
1782894747 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 41ba1c7f8b9cc29be9a20dc466fa6645
1782896965 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782899421 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782900619 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782903080 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782905108 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782905543 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782906049 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782906478 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782906787 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782907134 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782908780 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782909370 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782910340 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782911000 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782912590 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782912980 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782913340 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782913649 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782913969 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782914277 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782914650 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782915029 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782915337 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782915642 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782915943 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782916269 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782916648 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782916956 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782917598 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782919640 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782920780 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782921260 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782991936 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782992341 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782993118 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782993468 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782993782 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782994706 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782995300 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782995813 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782996610 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782997180 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782997510 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782997826 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782998332 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782998636 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782999123 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782999437 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1782999740 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 37f1f00f833fa3ffc9a96f536514d0a9
1783015731 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783016173 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783016767 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783017457 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783018814 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783019274 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783019650 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783020007 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783020677 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783021090 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783022055 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783022526 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783022831 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783023233 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783023567 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783067372 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783068328 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783068642 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783068949 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783070082 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783070454 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783071259 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783071566 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783071867 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783075535 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783078657 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783078963 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783080040 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783080530 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783080836 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783081138 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783082020 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783082453 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783084475 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783086099 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 95be2d825bb20a7e8da3f9769f6baca5
1783324630 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 54fd5ecf7de1ad514bddce3a84b3ba84
1783325022 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 54fd5ecf7de1ad514bddce3a84b3ba84
1783325358 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 54fd5ecf7de1ad514bddce3a84b3ba84
1783326575 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 54fd5ecf7de1ad514bddce3a84b3ba84
1783326879 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 54fd5ecf7de1ad514bddce3a84b3ba84
1783327185 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 54fd5ecf7de1ad514bddce3a84b3ba84
1783328386 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 54fd5ecf7de1ad514bddce3a84b3ba84
1783330045 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 54fd5ecf7de1ad514bddce3a84b3ba84
1783330347 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 54fd5ecf7de1ad514bddce3a84b3ba84
1783330803 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 54fd5ecf7de1ad514bddce3a84b3ba84
1783339984 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 54fd5ecf7de1ad514bddce3a84b3ba84
1783340426 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 54fd5ecf7de1ad514bddce3a84b3ba84
1783340964 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 54fd5ecf7de1ad514bddce3a84b3ba84
1783343640 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 54fd5ecf7de1ad514bddce3a84b3ba84
1783412001 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 92e7ac686d24957a8ae6c14eae744048
1783414131 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 92e7ac686d24957a8ae6c14eae744048
1783414846 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 92e7ac686d24957a8ae6c14eae744048
1783415201 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 92e7ac686d24957a8ae6c14eae744048
1783415618 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 92e7ac686d24957a8ae6c14eae744048
1783416268 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 92e7ac686d24957a8ae6c14eae744048
1783416854 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 92e7ac686d24957a8ae6c14eae744048
1783417434 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 92e7ac686d24957a8ae6c14eae744048
1783417782 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 92e7ac686d24957a8ae6c14eae744048
1783418083 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 92e7ac686d24957a8ae6c14eae744048
1783420075 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 92e7ac686d24957a8ae6c14eae744048
1783421978 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 92e7ac686d24957a8ae6c14eae744048
1783422295 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 92e7ac686d24957a8ae6c14eae744048
1783422641 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 92e7ac686d24957a8ae6c14eae744048
1783422995 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 92e7ac686d24957a8ae6c14eae744048
1783423665 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 92e7ac686d24957a8ae6c14eae744048
1783426418 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 92e7ac686d24957a8ae6c14eae744048
1783505092 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 f09cd5795c67872cb7e9b7e4833c2c5f
1783505450 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 f09cd5795c67872cb7e9b7e4833c2c5f
1783506030 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 f09cd5795c67872cb7e9b7e4833c2c5f
1783506642 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 f09cd5795c67872cb7e9b7e4833c2c5f
1783507176 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 f09cd5795c67872cb7e9b7e4833c2c5f
1783507543 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 f09cd5795c67872cb7e9b7e4833c2c5f
1783507874 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 f09cd5795c67872cb7e9b7e4833c2c5f
1783508449 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 f09cd5795c67872cb7e9b7e4833c2c5f
1783509443 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 f09cd5795c67872cb7e9b7e4833c2c5f
1783509744 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 f09cd5795c67872cb7e9b7e4833c2c5f
1783511727 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 f09cd5795c67872cb7e9b7e4833c2c5f
1783513047 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 f09cd5795c67872cb7e9b7e4833c2c5f
1783670826 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783671409 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783671984 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783673097 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783673413 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783673778 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783674140 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783674441 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783674765 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783675088 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783675546 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783675900 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783676299 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783676603 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783677015 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783677320 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783677904 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783678459 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783679027 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783679386 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783679717 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783680838 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783681616 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783682729 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783683069 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783683411 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783683730 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783684063 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783684461 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783684958 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783686956 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783688216 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783688696 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783689824 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783690749 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783691399 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783691713 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783692999 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783693501 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783694538 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783694850 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4a553d582a4db542c4b7b2fadeac0141
1783928696 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 bb97bc2e05e22ab90382ce569784a719
1783931110 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 bb97bc2e05e22ab90382ce569784a719
1783931804 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 bb97bc2e05e22ab90382ce569784a719
1783932113 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 bb97bc2e05e22ab90382ce569784a719
1783932417 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 bb97bc2e05e22ab90382ce569784a719
1783932725 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 bb97bc2e05e22ab90382ce569784a719
1783933107 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 bb97bc2e05e22ab90382ce569784a719
1783934029 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 bb97bc2e05e22ab90382ce569784a719
1783934429 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 bb97bc2e05e22ab90382ce569784a719
1783935222 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 bb97bc2e05e22ab90382ce569784a719
1783936021 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 bb97bc2e05e22ab90382ce569784a719
1783936832 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 bb97bc2e05e22ab90382ce569784a719
1783938869 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1783939181 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1783939526 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1783940662 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1783943198 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1783943552 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1783944224 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1783944890 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1783945211 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1783945737 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1783946078 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1783947018 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1783947455 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1783948125 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1783948495 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1783948950 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1783949357 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1783949754 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1783950081 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1783950712 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1783951162 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1783954778 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784012276 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784012756 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784014107 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784015980 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784017720 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784018889 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784019202 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784019539 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784019926 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784020495 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784022027 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784022348 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784022705 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784024152 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784024464 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784024776 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784025126 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784025445 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784025751 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784026370 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784026671 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784026990 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784027292 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784027615 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784027916 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784028457 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784028952 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784029399 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784029860 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784030169 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784030538 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784030846 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784067670 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784068133 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784068472 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784068813 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784069149 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784069399 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784069456 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784069601 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784069790 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784069860 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784070327 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 7e63a71c7855cf8001a8a415221a4a3b
1784103111 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 e6861ac6087bcc433fdf372de50627c0
1784103759 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 e6861ac6087bcc433fdf372de50627c0
1784104645 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 e6861ac6087bcc433fdf372de50627c0
1784107943 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 e6861ac6087bcc433fdf372de50627c0
1784109308 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 e6861ac6087bcc433fdf372de50627c0
1784109617 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 e6861ac6087bcc433fdf372de50627c0
1784109690 172.20.0.1 2 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 eb51b751bac641ff615d40d71f01edad
1784113347 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 e6861ac6087bcc433fdf372de50627c0
1784128154 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 e6861ac6087bcc433fdf372de50627c0
1784130058 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 e6861ac6087bcc433fdf372de50627c0
1784131286 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 e6861ac6087bcc433fdf372de50627c0
1784131767 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 e6861ac6087bcc433fdf372de50627c0
1784133257 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 e6861ac6087bcc433fdf372de50627c0
1784133604 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 e6861ac6087bcc433fdf372de50627c0
1784133905 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 e6861ac6087bcc433fdf372de50627c0
1784134234 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 e6861ac6087bcc433fdf372de50627c0
1784134750 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 e6861ac6087bcc433fdf372de50627c0
1784196371 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784196860 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784197465 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784197766 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784198486 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784198836 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784199146 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784200243 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784200760 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784202836 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784203342 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784203692 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784204158 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784204532 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784205644 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784207501 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784208530 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784208832 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784209788 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784210426 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784211177 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784214237 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784217480 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784219040 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784219241 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784219597 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784271261 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784271942 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784273575 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784274047 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784274520 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784275050 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784275352 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784275819 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784276186 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784276841 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784277182 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784277488 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784278350 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784279025 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784280320 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784280708 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784281021 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784281350 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784281698 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784282089 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784282407 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784283002 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784283368 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784283674 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784283985 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784284293 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784285508 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784285809 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784285991 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784286016 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784286110 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784287038 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784287038 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784287172 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784287451 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784287602 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784287781 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784287997 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784288102 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784288311 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784288427 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784288670 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784288744 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784289054 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784289054 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784289506 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784289506 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784289816 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784289816 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784290195 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784290195 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784290637 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784290637 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784290963 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784290963 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784291514 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784291514 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784292264 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784292264 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784292730 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784292730 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784293114 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784293114 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784293416 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784293416 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784294129 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784294129 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 457b2e79cc17b30244e5ba0d514a3cb5
1784533840 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784534147 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784534895 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784534937 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784534965 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784535245 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784535337 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784535810 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784535810 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784536404 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784536404 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784536880 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784536880 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784540724 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784546411 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784547461 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784547768 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784548072 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784548437 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784548847 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784549159 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784549800 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784550211 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784550930 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784551244 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784551864 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784552292 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784552675 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784553692 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784554277 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784554582 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784555051 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784555409 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784555940 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784556252 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784558425 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784558756 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784560165 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784562445 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784570352 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784573965 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 4147053cbd1638d11969bbf7f731f46d
1784624985 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 dc36f17258b03a9ed93057d578901f74
1784625387 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 dc36f17258b03a9ed93057d578901f74
1784625859 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 dc36f17258b03a9ed93057d578901f74
1784625956 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 dc36f17258b03a9ed93057d578901f74
1784626292 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 dc36f17258b03a9ed93057d578901f74
1784626722 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 dc36f17258b03a9ed93057d578901f74
1784627024 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 dc36f17258b03a9ed93057d578901f74
1784627625 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 dc36f17258b03a9ed93057d578901f74
1784627926 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 dc36f17258b03a9ed93057d578901f74
1784628229 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 dc36f17258b03a9ed93057d578901f74
1784628566 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 dc36f17258b03a9ed93057d578901f74
1784629008 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 dc36f17258b03a9ed93057d578901f74
1784629327 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 dc36f17258b03a9ed93057d578901f74
1784629815 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 dc36f17258b03a9ed93057d578901f74
1784630154 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 dc36f17258b03a9ed93057d578901f74
1784631694 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 dc36f17258b03a9ed93057d578901f74
1784633974 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 dc36f17258b03a9ed93057d578901f74
1784652380 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 dc36f17258b03a9ed93057d578901f74
1784652687 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 dc36f17258b03a9ed93057d578901f74
1784653110 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 dc36f17258b03a9ed93057d578901f74
1784653396 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 dc36f17258b03a9ed93057d578901f74
1784653684 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 dc36f17258b03a9ed93057d578901f74
1784717796 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784719164 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784719554 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784719574 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784724401 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784725678 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784726084 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784726566 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784727237 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784727563 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784728319 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784728644 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784728987 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784729367 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784729408 172.20.0.1 6 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8c6c04ec0f68609b4333e0189beb2e75
1784729607 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784729630 172.20.0.1 6 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8c6c04ec0f68609b4333e0189beb2e75
1784730084 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784730084 172.20.0.1 6 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8c6c04ec0f68609b4333e0189beb2e75
1784731778 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784731779 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784736809 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784736853 172.20.0.1 7 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 ad69ba6d6eaea5bb3f5ccc4d7932bb15
1784736983 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784737662 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784737694 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784737733 172.20.0.1 7 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 ad69ba6d6eaea5bb3f5ccc4d7932bb15
1784737748 172.20.0.1 7 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 ad69ba6d6eaea5bb3f5ccc4d7932bb15
1784737764 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784738084 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784738084 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784738509 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784738509 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784738813 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784738813 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784739353 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784739353 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784758194 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784758740 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784759044 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784759345 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784759671 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784760029 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784760342 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784760648 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784761034 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784761335 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784761478 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784800200 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784800520 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784800832 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784801138 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784801312 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784801618 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784801925 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784802231 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 8aaf95359af70433db3c174312c79db6
1784886593 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784886902 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784889877 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784890224 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784891482 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784891495 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784891988 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784891988 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784892290 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784892290 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784892964 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784892964 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784893297 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784893297 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784893599 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784893599 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784894587 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784894587 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784897745 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784897745 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784898164 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784898164 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784898702 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784898702 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784899101 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784899101 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784899472 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784899472 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784899788 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784899788 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784900212 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784900212 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784900514 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784900514 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784900838 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784900838 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784901223 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1784901223 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 1be975848acd41c6752a7cb10c1b3ba5
1785142067 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785143715 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785144139 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785144478 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785144880 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785145181 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785145504 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785145831 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785146138 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785146444 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785146763 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785147099 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785150935 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785180524 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785183353 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785183353 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785183923 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785183923 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785185426 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785185426 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785185851 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785185851 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785186334 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785186334 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785186740 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785186740 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785221482 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785221509 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785221784 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785222113 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785223054 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785223916 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785225183 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785225756 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785226148 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785226292 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785226450 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785226943 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785226943 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785227430 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785228055 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 12b2fbebd02e9e45b9fbd16eacd34dd8
1785245921 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785246401 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785249577 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785250057 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785331809 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785332340 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785333275 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785336147 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785337107 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785350924 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785351751 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785353542 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785354602 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785355001 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785355307 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785355750 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785356171 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785356561 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785356813 172.20.0.1 8 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 647b7290afe9637abc2e6255b64a0d72
1785356876 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785357114 172.20.0.1 8 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 647b7290afe9637abc2e6255b64a0d72
1785357177 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785357479 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785357479 172.20.0.1 8 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 647b7290afe9637abc2e6255b64a0d72
1785357786 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785357786 172.20.0.1 8 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 647b7290afe9637abc2e6255b64a0d72
1785357822 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785360391 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785360391 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785360785 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785360785 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785362411 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785362411 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785362712 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785362712 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785363157 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785363157 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785363458 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785364227 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785364581 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785364914 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785365255 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785365559 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785366082 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785366214 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785409064 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785409408 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785410002 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785410315 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785410619 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785411032 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785411333 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785411659 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785411976 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785413381 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785413711 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785414026 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785414342 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785414660 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785414962 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785415647 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785416543 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785418707 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785420147 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785438347 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785438672 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785439408 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785441055 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785441371 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785442186 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785442487 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785442740 172.20.0.1 9 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 9256a35d88f488f829819d0d883c0dcc
1785443214 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785443215 172.20.0.1 9 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 9256a35d88f488f829819d0d883c0dcc
1785443537 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785443963 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785443963 172.20.0.1 9 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 9256a35d88f488f829819d0d883c0dcc
1785444375 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785444375 172.20.0.1 9 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 9256a35d88f488f829819d0d883c0dcc
1785444536 172.20.0.1 9 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 9256a35d88f488f829819d0d883c0dcc
1785444629 172.20.0.1 9 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 9256a35d88f488f829819d0d883c0dcc
1785444739 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785444975 172.20.0.1 9 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 9256a35d88f488f829819d0d883c0dcc
1785445231 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785445273 172.20.0.1 9 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 9256a35d88f488f829819d0d883c0dcc
1785445306 172.20.0.1 9 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 9256a35d88f488f829819d0d883c0dcc
1785445641 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785445845 172.20.0.1 9 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 9256a35d88f488f829819d0d883c0dcc
1785445873 172.20.0.1 9 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 9256a35d88f488f829819d0d883c0dcc
1785445952 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 b06788404926a12ea74b80812e06429b
1785445978 172.20.0.1 9 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 9256a35d88f488f829819d0d883c0dcc
1785445990 172.20.0.1 9 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 9256a35d88f488f829819d0d883c0dcc
1785479649 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 25c6793c0bc3001a13e8b9481dbe2d36
1785480878 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 25c6793c0bc3001a13e8b9481dbe2d36
1785481179 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 25c6793c0bc3001a13e8b9481dbe2d36
1785481489 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 25c6793c0bc3001a13e8b9481dbe2d36
1785481498 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 25c6793c0bc3001a13e8b9481dbe2d36
1785481806 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 25c6793c0bc3001a13e8b9481dbe2d36
1785481806 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 25c6793c0bc3001a13e8b9481dbe2d36
1785482255 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 25c6793c0bc3001a13e8b9481dbe2d36
1785482255 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 25c6793c0bc3001a13e8b9481dbe2d36
1785482691 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 25c6793c0bc3001a13e8b9481dbe2d36
1785482691 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 25c6793c0bc3001a13e8b9481dbe2d36
1785482996 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 25c6793c0bc3001a13e8b9481dbe2d36
1785482996 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 25c6793c0bc3001a13e8b9481dbe2d36
1785483586 172.20.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 25c6793c0bc3001a13e8b9481dbe2d36
1785483586 172.20.0.1 1 0 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36 25c6793c0bc3001a13e8b9481dbe2d36
1788999246 172.21.0.1 1 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/152.0.0.0 Safari/537.36 84c111b213753e1a6ff8e7374cad5862

View File

@ -0,0 +1,61 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Dumping routines for database 'maison_alexandra_lv'
--
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
/*!50003 SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO' */ ;
ALTER DATABASE `maison_alexandra_lv` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
/*!50003 SET character_set_client = utf8mb4 */ ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` FUNCTION `nextnum`(`seq_name` VARCHAR(100), `skip` INT) RETURNS bigint(20)
BEGIN
DECLARE
cur_val int;
SELECT
next_index INTO cur_val
FROM
mod_sequences
WHERE
name = seq_name;
IF skip IS NULL THEN
set skip = 1;
END IF;
IF cur_val IS NOT NULL THEN
UPDATE mod_sequences SET next_index = cur_val+skip WHERE name = seq_name;
ELSE
set cur_val = skip;
INSERT INTO mod_sequences (name, next_index) VALUES (seq_name, 2);
END IF;
RETURN cur_val;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
/*!50003 SET character_set_client = @saved_cs_client */ ;
/*!50003 SET character_set_results = @saved_cs_results */ ;
/*!50003 SET collation_connection = @saved_col_connection */ ;
ALTER DATABASE `maison_alexandra_lv` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci ;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:45

View File

@ -0,0 +1,53 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_articles`
--
DROP TABLE IF EXISTS `mod_articles`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_articles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`a_npk` int(11) NOT NULL,
`a_title` varchar(360) NOT NULL,
`a_date` int(11) NOT NULL,
`a_type` int(11) NOT NULL,
`a_cl_id` int(11) NOT NULL DEFAULT 0 COMMENT 'Linked classificators id',
`a_cat` int(11) NOT NULL COMMENT 'for sub categories',
`a_unique_name` varchar(360) NOT NULL DEFAULT '""',
`a_link` varchar(690) DEFAULT '''''',
`a_created` int(11) NOT NULL,
`a_modified` int(11) NOT NULL,
`a_disabled` enum('1','0') NOT NULL DEFAULT '1' COMMENT '1 for disabled',
PRIMARY KEY (`id`),
KEY `a_type` (`a_type`),
KEY `a_cat` (`a_cat`),
KEY `a_npk` (`a_npk`),
KEY `a_disabled` (`a_disabled`)
) ENGINE=InnoDB AUTO_INCREMENT=102 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:45

View File

@ -0,0 +1,44 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_articles_files`
--
DROP TABLE IF EXISTS `mod_articles_files`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_articles_files` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ref_id` int(11) NOT NULL,
`file_name` varchar(690) NOT NULL,
`file_link` varchar(360) NOT NULL,
`file_disabled` enum('1','0') NOT NULL,
`file_order` int(11) NOT NULL,
`file_type` int(11) NOT NULL COMMENT 'Witch file type ( carousel/button/cnt file ) ',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:45

View File

@ -0,0 +1,49 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_articles_records`
--
DROP TABLE IF EXISTS `mod_articles_records`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_articles_records` (
`a_id` int(11) NOT NULL,
`a_title` varchar(400) NOT NULL,
`a_link` varchar(800) NOT NULL,
`a_v` varchar(400) NOT NULL DEFAULT '',
`a_url_alias_id` int(11) NOT NULL DEFAULT 0,
`a_shtml` mediumtext NOT NULL,
`a_lhtml` mediumtext NOT NULL,
`a_int_1` float DEFAULT NULL COMMENT 'Fields for int values',
`a_int_2` float DEFAULT NULL COMMENT 'Fields for int values',
`a_lang_id` int(11) NOT NULL,
KEY `a_id` (`a_id`),
KEY `a_url_alias_id` (`a_url_alias_id`),
KEY `a_lang_id` (`a_lang_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:45

View File

@ -0,0 +1,52 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_classificators`
--
DROP TABLE IF EXISTS `mod_classificators`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_classificators` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cl_type` smallint(6) NOT NULL,
`cl_name` varchar(1000) NOT NULL,
`cl_data` mediumtext NOT NULL,
`cl_order` int(11) NOT NULL,
`cl_blocked` enum('0','1') NOT NULL DEFAULT '0',
`cl_created` int(11) NOT NULL,
`cl_modified` int(11) NOT NULL,
`cl_shop_filter` enum('0','1') NOT NULL DEFAULT '0',
`cl_has_translations` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `cl_name` (`cl_name`(250)),
KEY `cl_type` (`cl_type`),
KEY `cl_order` (`cl_order`),
KEY `cl_has_translations` (`cl_has_translations`),
KEY `cl_blocked` (`cl_blocked`)
) ENGINE=InnoDB AUTO_INCREMENT=1472 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:45

View File

@ -0,0 +1,42 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_classificators_translations`
--
DROP TABLE IF EXISTS `mod_classificators_translations`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_classificators_translations` (
`cl_id` int(11) NOT NULL,
`cl_lang_id` int(11) NOT NULL,
`cl_value` varchar(1000) NOT NULL,
`cl_description` mediumtext NOT NULL,
KEY `cl_id` (`cl_id`),
KEY `cl_lang_id` (`cl_lang_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:45

View File

@ -0,0 +1,46 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_delivery`
--
DROP TABLE IF EXISTS `mod_delivery`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_delivery` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`t_title` varchar(690) NOT NULL DEFAULT '',
`t_cms` varchar(690) NOT NULL DEFAULT '',
`t_order` int(11) NOT NULL DEFAULT 0,
`t_cost` float NOT NULL DEFAULT 0,
`t_desc` text NOT NULL,
`t_enabled` enum('1','0') NOT NULL DEFAULT '0',
`t_default` enum('1','0') NOT NULL DEFAULT '0',
`t_modified` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:45

View File

@ -0,0 +1,44 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_items_attr`
--
DROP TABLE IF EXISTS `mod_items_attr`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_items_attr` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`p_type` int(11) DEFAULT NULL COMMENT 'cl type',
`p_status` enum('1','0') NOT NULL DEFAULT '0',
`p_default` enum('0','1') NOT NULL DEFAULT '0',
`p_created` int(11) NOT NULL DEFAULT 0,
`p_modified` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `p_type` (`p_type`)
) ENGINE=InnoDB AUTO_INCREMENT=2709 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:45

View File

@ -0,0 +1,41 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_items_attr_translations`
--
DROP TABLE IF EXISTS `mod_items_attr_translations`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_items_attr_translations` (
`t_id` int(11) NOT NULL,
`t_title` varchar(120) NOT NULL DEFAULT '',
`t_lang_id` int(11) NOT NULL DEFAULT 0,
KEY `t_id` (`t_id`),
KEY `t_lang_id` (`t_lang_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:45

View File

@ -0,0 +1,43 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_mail_constructor`
--
DROP TABLE IF EXISTS `mod_mail_constructor`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_mail_constructor` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`mail_type` int(11) NOT NULL COMMENT 'mail clasificator type',
`mail_created` int(11) NOT NULL,
`mail_disabled` enum('0','1') NOT NULL DEFAULT '0',
`mail_modified` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `mail_type` (`mail_type`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:45

View File

@ -0,0 +1,42 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_mail_constructor_data`
--
DROP TABLE IF EXISTS `mod_mail_constructor_data`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_mail_constructor_data` (
`mail_id` int(11) NOT NULL,
`mail_title` varchar(1000) NOT NULL,
`mail_data` mediumtext NOT NULL,
`mail_lang_id` int(11) NOT NULL,
KEY `mail_id` (`mail_id`),
KEY `mail_lang_id` (`mail_lang_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:45

View File

@ -0,0 +1,59 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_mail_outgoing`
--
DROP TABLE IF EXISTS `mod_mail_outgoing`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_mail_outgoing` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`mail_server_type` enum('0','1') NOT NULL DEFAULT '0' COMMENT '0 - zemturu 18, 1 - zutenis internal',
`mail_lang_id` int(11) NOT NULL DEFAULT 0,
`mail_template_id` int(11) NOT NULL DEFAULT 0,
`mail_owner` varchar(100) NOT NULL DEFAULT '',
`mail_owner_cc` varchar(100) NOT NULL DEFAULT '',
`mail_sender` varchar(100) NOT NULL DEFAULT '',
`mail_title` varchar(200) NOT NULL DEFAULT '',
`mail_content` mediumtext NOT NULL,
`mail_attachment` varchar(1000) NOT NULL DEFAULT '',
`mail_inserted` int(11) NOT NULL,
`mail_priority` enum('1','2','3') NOT NULL DEFAULT '1',
`mail_send_atempt` enum('0','1','2','3','4') NOT NULL DEFAULT '0',
`mail_disabled` enum('0','1') NOT NULL DEFAULT '0',
`mail_locked` enum('0','1') NOT NULL DEFAULT '0',
`mail_modified` int(11) NOT NULL DEFAULT 0,
`mail_marker` varchar(32) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `mail_lang_id` (`mail_lang_id`),
KEY `mail_template_id` (`mail_template_id`),
KEY `mail_owner` (`mail_owner`),
KEY `mail_disabled` (`mail_disabled`),
KEY `mail_marker` (`mail_marker`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:45

View File

@ -0,0 +1,59 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_mail_sent`
--
DROP TABLE IF EXISTS `mod_mail_sent`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_mail_sent` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`mail_server_type` enum('0','1') NOT NULL DEFAULT '0' COMMENT '0 - zemturu 18, 1 - zutenis internal',
`mail_oid` int(11) NOT NULL,
`mail_lang_id` int(11) NOT NULL,
`mail_template_id` int(11) NOT NULL,
`mail_owner` varchar(100) NOT NULL,
`mail_owner_cc` varchar(100) NOT NULL,
`mail_sender` varchar(100) NOT NULL,
`mail_title` varchar(200) NOT NULL,
`mail_content` mediumtext NOT NULL,
`mail_attachment` varchar(1000) NOT NULL,
`mail_inserted` int(11) NOT NULL,
`mail_sent` int(11) NOT NULL,
`mail_read` enum('0','1') NOT NULL DEFAULT '0',
`mail_priority` enum('1','2','3') NOT NULL DEFAULT '1',
`mail_send_atempt` enum('0','1','2','3','4') NOT NULL DEFAULT '0',
`mail_modified` int(11) NOT NULL,
`mail_marker` varchar(32) NOT NULL,
PRIMARY KEY (`id`),
KEY `mail_owner` (`mail_owner`),
KEY `mail_template_id` (`mail_template_id`),
KEY `mail_lang_id` (`mail_lang_id`),
KEY `mail_marker` (`mail_marker`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:45

View File

@ -0,0 +1,48 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_messages`
--
DROP TABLE IF EXISTS `mod_messages`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_messages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`first_name` varchar(69) NOT NULL DEFAULT '',
`last_name` varchar(69) NOT NULL DEFAULT '',
`email` varchar(90) NOT NULL DEFAULT '',
`phone` varchar(120) NOT NULL DEFAULT '',
`subject` varchar(260) NOT NULL DEFAULT '',
`message` mediumtext NOT NULL,
`ip_from` varchar(16) NOT NULL DEFAULT '',
`user_agent` mediumtext NOT NULL,
`created` int(11) NOT NULL DEFAULT 0,
`modified` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:45

View File

@ -0,0 +1,52 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_orders`
--
DROP TABLE IF EXISTS `mod_orders`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_orders` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`o_nr` varchar(32) NOT NULL DEFAULT '',
`o_date` int(11) NOT NULL DEFAULT 0,
`o_mail` varchar(60) NOT NULL DEFAULT '',
`o_payment_met` int(11) NOT NULL DEFAULT 0 COMMENT 'payment method cl id',
`o_delivery_met` int(11) NOT NULL DEFAULT 0 COMMENT 'delivery method cl id',
`o_input_data` mediumtext NOT NULL,
`o_type` int(11) NOT NULL DEFAULT 0 COMMENT 'type if user has come from other links like kurpirtk/gudriem',
`o_mid` int(11) NOT NULL DEFAULT 0 COMMENT 'Mail link id -1 sent directly, + through list',
`o_mreceipt_id` varchar(100) NOT NULL DEFAULT '' COMMENT 'Sent mail from orders table - with receipt pdf',
`o_user` int(11) DEFAULT NULL COMMENT 'Registered user id that placed the order',
`o_edited` enum('0','1') NOT NULL DEFAULT '0',
`o_locked` enum('0','1') NOT NULL DEFAULT '0',
`o_deleted` enum('0','1') NOT NULL DEFAULT '0',
`o_modified` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:45

View File

@ -0,0 +1,45 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_orders_addresses`
--
DROP TABLE IF EXISTS `mod_orders_addresses`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_orders_addresses` (
`o_id` int(11) NOT NULL,
`o_type` enum('0','1') NOT NULL DEFAULT '0' COMMENT '0 - primary, 1 - delivery',
`o_addr_name` varchar(60) NOT NULL DEFAULT '',
`o_addr_lastname` varchar(60) NOT NULL DEFAULT '',
`o_addr_phone` varchar(60) NOT NULL DEFAULT '',
`o_addr_address` varchar(400) NOT NULL DEFAULT '',
`o_addr_city` varchar(30) NOT NULL DEFAULT '',
`o_addr_country` varchar(30) NOT NULL DEFAULT '',
`o_addr_zip` varchar(10) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:45

View File

@ -0,0 +1,43 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_orders_data`
--
DROP TABLE IF EXISTS `mod_orders_data`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_orders_data` (
`o_id` int(11) NOT NULL DEFAULT 0,
`p_id` int(11) NOT NULL DEFAULT 0,
`p_row_id` int(11) NOT NULL DEFAULT 0 COMMENT 'count to class table id',
`p_price` float NOT NULL DEFAULT 0,
`p_count` smallint(6) NOT NULL DEFAULT 0,
`p_type1` int(11) NOT NULL DEFAULT 0,
`p_type2` int(11) NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:45

View File

@ -0,0 +1,48 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_orders_data_edited`
--
DROP TABLE IF EXISTS `mod_orders_data_edited`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_orders_data_edited` (
`o_id` int(11) NOT NULL DEFAULT 0,
`row_nr` int(11) NOT NULL DEFAULT 1,
`p_id` int(11) NOT NULL DEFAULT 0,
`p_row_id` int(11) NOT NULL DEFAULT 0 COMMENT 'count to class table id',
`p_cl1` int(11) NOT NULL DEFAULT 0,
`p_cl2` int(11) NOT NULL DEFAULT 0,
`p_price` float NOT NULL DEFAULT 0,
`p_count` smallint(6) NOT NULL DEFAULT 0,
`p_name` varchar(1200) NOT NULL DEFAULT '',
KEY `o_id` (`o_id`),
KEY `p_id` (`p_id`),
KEY `p_row_id` (`p_row_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:45

View File

@ -0,0 +1,41 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_orders_deleted_nr`
--
DROP TABLE IF EXISTS `mod_orders_deleted_nr`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_orders_deleted_nr` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`order_nr` varchar(32) NOT NULL DEFAULT '' COMMENT 'deleted order number ready to be used again',
`reserved` enum('0','1') NOT NULL DEFAULT '0' COMMENT '1 when reserved for use',
`time` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:45

View File

@ -0,0 +1,64 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_orders_edited`
--
DROP TABLE IF EXISTS `mod_orders_edited`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_orders_edited` (
`o_id` int(11) NOT NULL DEFAULT 0,
`o_nr` varchar(32) NOT NULL DEFAULT '0',
`o_date` int(11) NOT NULL DEFAULT 0,
`a_p_amount_words` varchar(1200) NOT NULL DEFAULT '',
`a_desc` varchar(1200) NOT NULL DEFAULT '',
`a_desc_transaction` varchar(1200) NOT NULL DEFAULT '',
`a_term_of_payment` int(11) NOT NULL DEFAULT 0,
`a_payment_met` varchar(1200) NOT NULL DEFAULT '',
`a_shipping_met` varchar(1200) NOT NULL DEFAULT '',
`a_info` varchar(1200) NOT NULL DEFAULT '',
`a_supplier` varchar(990) NOT NULL DEFAULT '',
`a_sup_reg_nr` varchar(14) NOT NULL DEFAULT '',
`a_sup_domicile` varchar(1200) NOT NULL DEFAULT '',
`a_sup_pvn_reg_nr` varchar(360) NOT NULL DEFAULT '',
`a_sup_sett_details` varchar(1200) NOT NULL DEFAULT '',
`a_sup_cont_nr` varchar(169) NOT NULL DEFAULT '',
`a_sup_phone` varchar(120) NOT NULL DEFAULT '',
`a_sup_email` varchar(120) NOT NULL DEFAULT '',
`a_beneficiary` varchar(990) NOT NULL DEFAULT '',
`a_ben_reg_nr` varchar(14) NOT NULL DEFAULT '''''',
`a_ben_domicile` varchar(1200) NOT NULL DEFAULT '',
`a_ben_pvn_reg_nr` varchar(360) NOT NULL DEFAULT '',
`a_ben_sett_details` varchar(1200) NOT NULL DEFAULT '',
`a_ben_cont_nr` varchar(169) NOT NULL DEFAULT '',
`a_ben_phone` varchar(120) NOT NULL DEFAULT '',
`a_ben_email` varchar(120) NOT NULL DEFAULT '',
`a_modified` int(11) NOT NULL DEFAULT 0,
KEY `o_id` (`o_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:45

View File

@ -0,0 +1,46 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_permissions`
--
DROP TABLE IF EXISTS `mod_permissions`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_permissions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`p_name` varchar(200) NOT NULL DEFAULT '',
`p_type_id` enum('0','1') NOT NULL DEFAULT '0',
`p_description` mediumtext NOT NULL,
`p_blocked` enum('0','1') NOT NULL DEFAULT '0',
`p_modified` int(11) NOT NULL,
`p_created` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `p_name` (`p_name`),
KEY `p_type_id` (`p_type_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,45 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_permissions_groups`
--
DROP TABLE IF EXISTS `mod_permissions_groups`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_permissions_groups` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`group_name` varchar(200) NOT NULL,
`group_description` mediumtext NOT NULL,
`group_type` enum('0','1') NOT NULL DEFAULT '0' COMMENT 'If group shows in public side or not',
`group_blocked` enum('0','1') NOT NULL DEFAULT '0',
`group_modified` int(11) NOT NULL,
`group_created` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `group_name` (`group_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,65 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_products`
--
DROP TABLE IF EXISTS `mod_products`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_products` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`prod_nr` varchar(20) NOT NULL,
`prod_price` float NOT NULL DEFAULT 0,
`prod_vat` smallint(6) NOT NULL DEFAULT 0,
`prod_model` varchar(40) NOT NULL DEFAULT '',
`prod_new_price` float NOT NULL DEFAULT 0,
`prod_buy_per_pers` smallint(6) NOT NULL DEFAULT 100 COMMENT 'Max prod buy by person',
`prod_available` int(11) NOT NULL DEFAULT 0,
`prod_order` smallint(6) NOT NULL DEFAULT 0,
`prod_comp_link_id` int(11) NOT NULL DEFAULT 0 COMMENT 'Linked company to this product',
`prod_disabled` enum('0','1') NOT NULL DEFAULT '0',
`prod_attribute` enum('0','1') NOT NULL DEFAULT '0',
`prod_created` int(11) NOT NULL DEFAULT 0,
`prod_created_by` int(11) NOT NULL DEFAULT 0,
`prod_modified` int(11) NOT NULL DEFAULT 0,
`prod_modified_by` int(11) NOT NULL DEFAULT 0,
`prod_deleted` enum('0','1') NOT NULL DEFAULT '0',
`prod_discount_value` float NOT NULL DEFAULT 0,
`prod_discount` enum('0','1') NOT NULL DEFAULT '0' COMMENT 'Product is on discount or not',
`prod_featured` enum('0','1') NOT NULL DEFAULT '0' COMMENT 'Is product displayed as featured or not',
PRIMARY KEY (`id`),
KEY `prod_nr` (`prod_nr`),
KEY `prod_price` (`prod_price`),
KEY `prod_new_price` (`prod_new_price`),
KEY `prod_order` (`prod_order`),
KEY `prod_deleted` (`prod_deleted`),
KEY `prod_disabled` (`prod_disabled`),
KEY `prod_modified_by` (`prod_modified_by`),
KEY `prod_created_by` (`prod_created_by`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,43 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_products_files`
--
DROP TABLE IF EXISTS `mod_products_files`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_products_files` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`prod_id` int(11) NOT NULL DEFAULT 0,
`file_name` varchar(690) NOT NULL DEFAULT '',
`file_link` varchar(360) NOT NULL DEFAULT '',
`file_disabled` enum('1','0') NOT NULL DEFAULT '0',
`file_order` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,42 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_products_images`
--
DROP TABLE IF EXISTS `mod_products_images`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_products_images` (
`prod_id` int(11) NOT NULL,
`img_path` varchar(1000) NOT NULL DEFAULT '',
`img_alt` varchar(200) NOT NULL DEFAULT '',
`img_title` varchar(200) NOT NULL DEFAULT '',
`img_order` smallint(6) NOT NULL DEFAULT 0,
`img_blocked` enum('0','1') NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,45 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_products_info`
--
DROP TABLE IF EXISTS `mod_products_info`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_products_info` (
`prod_id` int(11) NOT NULL,
`lang_id` int(11) NOT NULL DEFAULT 0,
`prod_key` char(100) NOT NULL DEFAULT '',
`prod_name` varchar(300) NOT NULL DEFAULT '',
`prod_description` mediumtext NOT NULL,
`prod_sdescription` mediumtext NOT NULL,
`prod_keywords` mediumtext NOT NULL,
KEY `prod_id` (`prod_id`),
KEY `lang_id` (`lang_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,40 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_products_to_categories`
--
DROP TABLE IF EXISTS `mod_products_to_categories`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_products_to_categories` (
`prod_id` int(11) NOT NULL,
`cat_id` int(11) NOT NULL,
KEY `prod_id` (`prod_id`),
KEY `cat_id` (`cat_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,58 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_products_to_count`
--
DROP TABLE IF EXISTS `mod_products_to_count`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_products_to_count` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`prod_id` int(11) NOT NULL,
`row_id` int(11) NOT NULL,
`cl1_id` int(11) NOT NULL DEFAULT 0,
`cl2_id` int(11) NOT NULL DEFAULT 0,
`count` int(11) NOT NULL DEFAULT 0,
`price_sold` float NOT NULL DEFAULT 0 COMMENT 'Price sold with vat',
`note` varchar(1000) NOT NULL DEFAULT '' COMMENT 'Sold note',
`op_type` enum('1','2','3','4') DEFAULT '1' COMMENT '1 - orders send, 2 - orders delete, 3 - storage module, 4 - buys module',
`op_date` int(11) NOT NULL DEFAULT 0 COMMENT 'date when operation was made ( same as modified ) ',
`user_id` int(11) NOT NULL DEFAULT 0 COMMENT 'Same as created_by',
`date` int(11) NOT NULL DEFAULT 0,
`modified` int(11) NOT NULL DEFAULT 0,
`modified_by` int(11) NOT NULL DEFAULT 0,
`created` int(11) NOT NULL DEFAULT 0,
`created_by` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `prod_id` (`prod_id`),
KEY `row_id` (`row_id`),
KEY `cl1_id` (`cl1_id`),
KEY `cl2_id` (`cl2_id`),
KEY `date` (`date`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,50 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_products_to_count_and_classificators`
--
DROP TABLE IF EXISTS `mod_products_to_count_and_classificators`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_products_to_count_and_classificators` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`prod_id` int(11) NOT NULL,
`prod_cl_id` int(11) NOT NULL DEFAULT 0,
`prod_cl_id_2` int(11) NOT NULL DEFAULT 0,
`prod_count` int(11) NOT NULL DEFAULT 0,
`prod_incoming_price` float NOT NULL DEFAULT 0 COMMENT 'Sensitive information - Don''t use/show this in public side',
`prod_price` float NOT NULL DEFAULT 0,
`prod_disabled` enum('0','1','2') DEFAULT '0' COMMENT '0 - enabled / 1 - disabled / 2 - deleted',
PRIMARY KEY (`id`),
KEY `id` (`id`),
KEY `prod_id` (`prod_id`),
KEY `prod_cl_id` (`prod_cl_id`),
KEY `prod_cl_id_2` (`prod_cl_id_2`),
KEY `prod_disabled` (`prod_disabled`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,38 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_products_to_delivery`
--
DROP TABLE IF EXISTS `mod_products_to_delivery`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_products_to_delivery` (
`prod_id` int(11) NOT NULL,
`dev_id` int(11) NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,40 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_products_to_filters`
--
DROP TABLE IF EXISTS `mod_products_to_filters`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_products_to_filters` (
`prod_id` int(11) NOT NULL,
`filter_id` int(11) NOT NULL DEFAULT 0,
KEY `prod_id` (`prod_id`),
KEY `filter_id` (`filter_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,40 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_products_to_payments`
--
DROP TABLE IF EXISTS `mod_products_to_payments`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_products_to_payments` (
`prod_id` int(11) NOT NULL,
`paym_id` int(11) NOT NULL DEFAULT 0,
KEY `prod_id` (`prod_id`),
KEY `paym_id` (`paym_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,40 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_sequences`
--
DROP TABLE IF EXISTS `mod_sequences`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_sequences` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(200) NOT NULL,
`next_index` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,62 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_users`
--
DROP TABLE IF EXISTS `mod_users`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(200) NOT NULL,
`user_surname` varchar(200) NOT NULL,
`user_login` varchar(60) NOT NULL,
`user_email` varchar(60) NOT NULL,
`user_phone` varchar(30) DEFAULT NULL,
`user_password` varchar(255) NOT NULL,
`user_img` varchar(390) NOT NULL DEFAULT '',
`user_lang_id` int(11) NOT NULL DEFAULT 0,
`user_last_ip` varchar(15) NOT NULL DEFAULT '',
`user_last_login` int(11) NOT NULL DEFAULT 0,
`user_last_location_url` varchar(1000) NOT NULL DEFAULT '',
`user_cfg` mediumtext NOT NULL COMMENT 'User cfg serialized',
`user_fchange` enum('0','1') NOT NULL DEFAULT '0' COMMENT 'Force change password',
`user_2fa_secret_enabled` varchar(40) NOT NULL DEFAULT '',
`user_created` int(11) NOT NULL,
`user_modified` int(11) NOT NULL,
`user_activated` enum('0','1') NOT NULL DEFAULT '1' COMMENT 'Indicates if user is activated ( 0 inactive, 1 active ), by default all users are activated',
`user_blocked` enum('0','1') NOT NULL DEFAULT '0',
`user_deleted` enum('0','1') NOT NULL DEFAULT '0',
`user_admin` enum('0','1') NOT NULL DEFAULT '0',
`user_pwdtime` int(11) NOT NULL DEFAULT 0,
`user_newpwd` varchar(60) NOT NULL DEFAULT '',
`user_modified_by` int(11) NOT NULL,
`user_created_by` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,39 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_users_permissions`
--
DROP TABLE IF EXISTS `mod_users_permissions`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_users_permissions` (
`user_id` int(11) NOT NULL,
`groups_id` int(11) NOT NULL DEFAULT 0,
`permissions_id` int(11) NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,45 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_users_subscription_mails`
--
DROP TABLE IF EXISTS `mod_users_subscription_mails`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_users_subscription_mails` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`email` varchar(90) NOT NULL,
`email_sub` enum('1','0') NOT NULL,
`email_sub_ip` varchar(16) NOT NULL COMMENT 'Ip address from where subscribed',
`email_sub_language` int(11) NOT NULL DEFAULT 0,
`email_reg_user_agent` mediumtext NOT NULL COMMENT 'User agent when subscribed',
`email_added` int(11) NOT NULL COMMENT 'time when subscribed',
`email_modified` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,43 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `mod_users_whishlist`
--
DROP TABLE IF EXISTS `mod_users_whishlist`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `mod_users_whishlist` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`product_id` int(11) NOT NULL,
`created_at` int(11) DEFAULT NULL COMMENT 'Unix timestamp',
PRIMARY KEY (`id`),
UNIQUE KEY `unique_user_product` (`user_id`,`product_id`),
KEY `idx_user` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,40 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `site_cms_msg`
--
DROP TABLE IF EXISTS `site_cms_msg`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `site_cms_msg` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`msg_message` varchar(4000) NOT NULL,
PRIMARY KEY (`id`),
KEY `msg_message` (`msg_message`(250))
) ENGINE=InnoDB AUTO_INCREMENT=4581 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,41 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `site_cms_msg_translations`
--
DROP TABLE IF EXISTS `site_cms_msg_translations`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `site_cms_msg_translations` (
`msg_id` int(11) NOT NULL,
`msg_lang_id` int(11) NOT NULL,
`msg_translation` mediumtext NOT NULL,
KEY `msg_id` (`msg_id`),
KEY `msg_lang_id` (`msg_lang_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,46 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `site_ipaccess`
--
DROP TABLE IF EXISTS `site_ipaccess`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `site_ipaccess` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`access_start_ip` int(10) unsigned DEFAULT NULL,
`access_end_ip` int(10) unsigned NOT NULL,
`access_title` varchar(200) NOT NULL,
`access_blocked` enum('0','1') NOT NULL DEFAULT '0',
`access_created` int(11) NOT NULL,
`access_modified` int(11) NOT NULL,
`access_global_filter` enum('0','1') NOT NULL DEFAULT '0',
`access_description` mediumtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,51 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `site_languages`
--
DROP TABLE IF EXISTS `site_languages`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `site_languages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` enum('0','1') NOT NULL DEFAULT '0',
`order` smallint(6) NOT NULL,
`default` enum('0','1') NOT NULL DEFAULT '0',
`lang_code` varchar(2) NOT NULL,
`lang_country` varchar(200) NOT NULL,
`lang_title` varchar(20) NOT NULL,
`lang_locale` varchar(5) DEFAULT NULL,
`lang_cms_e` enum('0','1') NOT NULL DEFAULT '1' COMMENT 'Enabled in cms',
`lang_blocked` enum('0','1') NOT NULL DEFAULT '0',
`lang_created` int(11) NOT NULL,
`lang_modified` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `lang_code` (`lang_code`),
KEY `type` (`type`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,80 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `site_map`
--
DROP TABLE IF EXISTS `site_map`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `site_map` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`p_url` varchar(400) NOT NULL,
`p_title` varchar(65) NOT NULL,
`p_fulltitle` varchar(65) DEFAULT NULL,
`p_full_url` varchar(4000) NOT NULL,
`p_redirect_url` varchar(4000) DEFAULT NULL,
`p_keywords` mediumtext DEFAULT NULL,
`p_description` mediumtext DEFAULT NULL,
`p_parent` int(11) NOT NULL DEFAULT 0,
`p_sdata` mediumtext DEFAULT NULL,
`p_type` int(11) NOT NULL DEFAULT 3,
`p_lang_id` int(11) NOT NULL,
`p_lang_ref_id` int(11) NOT NULL DEFAULT 0,
`p_login` enum('0','1') NOT NULL DEFAULT '0',
`p_req_login` int(11) NOT NULL DEFAULT 0,
`p_login_redirect` mediumtext DEFAULT NULL,
`p_created` int(11) NOT NULL,
`p_modified` int(11) NOT NULL,
`p_modified_user_id` int(11) NOT NULL,
`p_order` int(11) NOT NULL,
`p_template_id` int(11) NOT NULL DEFAULT 0,
`p_permission` int(11) DEFAULT NULL,
`p_menus` enum('0','1') NOT NULL DEFAULT '0',
`p_enabled` enum('0','1') NOT NULL DEFAULT '1',
`p_visible` enum('0','1') NOT NULL,
`p_skipurl` enum('0','1') NOT NULL,
`p_sitemap` enum('0','1') NOT NULL DEFAULT '1',
`p_404` enum('0','1') NOT NULL DEFAULT '0',
`p_default` enum('0','1') NOT NULL DEFAULT '0',
`p_inc_by_default` enum('0','1') NOT NULL DEFAULT '0' COMMENT 'Include in menus & show by default in case selected lang url not found',
`p_delete_time` int(11) NOT NULL DEFAULT 0,
`p_deleted` enum('0','1') NOT NULL DEFAULT '0',
`p_autocache` enum('0','1') NOT NULL DEFAULT '0',
`p_st_cnt` enum('0','1') NOT NULL COMMENT 'static content',
`p_2fa` enum('0','1') NOT NULL DEFAULT '0' COMMENT 'Request 2FA',
PRIMARY KEY (`id`),
KEY `p_url` (`p_url`(250)),
KEY `p_lang_id` (`p_lang_id`),
KEY `p_lang_ref_id` (`p_lang_ref_id`),
KEY `p_full_url` (`p_full_url`(250)),
KEY `p_redirect_url` (`p_redirect_url`(250)),
KEY `p_parent` (`p_parent`),
KEY `p_type` (`p_type`),
KEY `p_order` (`p_order`)
) ENGINE=InnoDB AUTO_INCREMENT=911 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,44 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `site_map_menus`
--
DROP TABLE IF EXISTS `site_map_menus`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `site_map_menus` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`map_id` int(11) NOT NULL,
`menu_id` int(11) NOT NULL,
`menu_type` enum('0','1') NOT NULL DEFAULT '0' COMMENT '0 - link, 1 - load',
PRIMARY KEY (`id`),
KEY `map_id` (`map_id`),
KEY `menu_id` (`menu_id`),
KEY `menu_type` (`menu_type`)
) ENGINE=InnoDB AUTO_INCREMENT=8627 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,48 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `site_map_modules`
--
DROP TABLE IF EXISTS `site_map_modules`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `site_map_modules` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`mod_type` int(11) NOT NULL,
`mod_code` varchar(200) NOT NULL,
`mod_map_id` int(11) NOT NULL,
`mod_primary` enum('0','1') NOT NULL DEFAULT '0',
`mod_set_byname` enum('0','1') NOT NULL DEFAULT '0',
`mod_call_method` varchar(200) DEFAULT NULL,
`mod_use_tmpl` varchar(200) NOT NULL,
`mod_load_order` smallint(6) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `mod_map_id` (`mod_map_id`),
KEY `mod_type` (`mod_type`)
) ENGINE=InnoDB AUTO_INCREMENT=73296 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,40 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `site_map_types`
--
DROP TABLE IF EXISTS `site_map_types`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `site_map_types` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`m_name` varchar(200) NOT NULL,
`m_description` mediumtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,52 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `site_map_urls`
--
DROP TABLE IF EXISTS `site_map_urls`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `site_map_urls` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`url_p_id` int(11) NOT NULL DEFAULT 0 COMMENT 'Url parent id for tree structure',
`url_fname` varchar(4000) NOT NULL DEFAULT '' COMMENT 'Url full name',
`url_alias_id` int(11) DEFAULT 0 COMMENT 'Url alias module id in site_map',
`url_type` int(11) NOT NULL DEFAULT 0 COMMENT 'Url clasificator type',
`url_lang_ref_id` int(11) NOT NULL DEFAULT 0 COMMENT 'Base copy node id within url lang range',
`url_lang_id` int(11) DEFAULT 0,
`url_item_id` int(11) NOT NULL DEFAULT 0 COMMENT 'Linked item id for reference',
PRIMARY KEY (`id`),
KEY `url_fname` (`url_fname`(250)),
KEY `url_alias_id` (`url_alias_id`),
KEY `url_lang_ref_id` (`url_lang_ref_id`),
KEY `url_lang_id` (`url_lang_id`),
KEY `url_type` (`url_type`),
KEY `url_item_id` (`url_item_id`),
KEY `url_p_id` (`url_p_id`)
) ENGINE=InnoDB AUTO_INCREMENT=172 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,47 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `site_menus`
--
DROP TABLE IF EXISTS `site_menus`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `site_menus` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`menu_name` varchar(200) NOT NULL,
`menu_description` mediumtext NOT NULL,
`menu_blocked` enum('0','1') NOT NULL DEFAULT '0',
`menu_created` int(11) NOT NULL,
`menu_modified` int(11) NOT NULL,
`menu_load_subs` enum('0','1') NOT NULL DEFAULT '0',
`menu_pub_side` enum('1','0') NOT NULL DEFAULT '0',
`menu_allowed_sub_ids` varchar(400) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `menu_name` (`menu_name`)
) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,40 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `site_module_types`
--
DROP TABLE IF EXISTS `site_module_types`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `site_module_types` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type_name` varchar(200) NOT NULL,
`type_description` mediumtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,46 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `site_permissions`
--
DROP TABLE IF EXISTS `site_permissions`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `site_permissions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`p_name` varchar(200) NOT NULL DEFAULT '',
`p_type_id` int(11) NOT NULL DEFAULT 0,
`p_description` mediumtext NOT NULL,
`p_blocked` enum('0','1') NOT NULL DEFAULT '0',
`p_created` int(11) NOT NULL DEFAULT 0,
`p_modified` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `p_name` (`p_name`),
KEY `p_type_id` (`p_type_id`)
) ENGINE=InnoDB AUTO_INCREMENT=499 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,39 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `site_pub_msg`
--
DROP TABLE IF EXISTS `site_pub_msg`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `site_pub_msg` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`msg_message` mediumtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=769 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,43 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `site_pub_msg_translations`
--
DROP TABLE IF EXISTS `site_pub_msg_translations`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `site_pub_msg_translations` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`msg_id` int(11) NOT NULL,
`msg_lang_id` int(11) NOT NULL,
`msg_translation` mediumtext NOT NULL,
PRIMARY KEY (`id`),
KEY `msg_id` (`msg_id`),
KEY `msg_lang_id` (`msg_lang_id`)
) ENGINE=InnoDB AUTO_INCREMENT=769 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,40 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `site_settings`
--
DROP TABLE IF EXISTS `site_settings`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `site_settings` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`param` varchar(100) NOT NULL,
`value` mediumtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,46 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `site_update`
--
DROP TABLE IF EXISTS `site_update`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `site_update` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`u_date` int(11) NOT NULL,
`u_remote_file` varchar(2000) NOT NULL,
`u_2fa_code` varchar(2000) NOT NULL,
`u_remote_status` varchar(2000) NOT NULL,
`u_version` varchar(40) NOT NULL,
`u_old_version` varchar(40) NOT NULL,
`u_response` mediumtext NOT NULL,
`u_status` enum('0','1','2','3','4') NOT NULL COMMENT '0 - error, 1 - initiated, 2 - cron accepted, 3 - updated, 4 - canceled',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,55 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `site_users`
--
DROP TABLE IF EXISTS `site_users`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `site_users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(200) NOT NULL,
`user_surname` varchar(200) NOT NULL,
`user_login` varchar(60) NOT NULL,
`user_email` varchar(60) NOT NULL,
`user_password` varchar(255) NOT NULL,
`user_2fa_secret_enabled` varchar(40) NOT NULL DEFAULT '',
`user_lang_id` int(11) NOT NULL DEFAULT 1,
`user_last_ip` varchar(15) DEFAULT '',
`user_last_login` int(11) NOT NULL DEFAULT 0,
`user_last_location_url` varchar(1000) NOT NULL DEFAULT '',
`user_cfg` mediumtext NOT NULL DEFAULT '' COMMENT 'User cfg serialized',
`user_fchange` enum('0','1') NOT NULL DEFAULT '0' COMMENT 'Force change password',
`user_created` int(11) NOT NULL DEFAULT 0,
`user_modified` int(11) NOT NULL DEFAULT 0,
`user_blocked` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `user_login` (`user_login`),
KEY `user_password` (`user_password`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,44 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `site_users_groups`
--
DROP TABLE IF EXISTS `site_users_groups`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `site_users_groups` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`group_name` varchar(200) NOT NULL,
`group_description` mediumtext NOT NULL,
`group_blocked` enum('0','1') NOT NULL DEFAULT '0',
`group_created` int(11) NOT NULL DEFAULT 0,
`group_modified` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `group_name` (`group_name`)
) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,40 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `site_users_ipaccess`
--
DROP TABLE IF EXISTS `site_users_ipaccess`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `site_users_ipaccess` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`range_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,44 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `site_users_permissions`
--
DROP TABLE IF EXISTS `site_users_permissions`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `site_users_permissions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`groups_id` int(11) NOT NULL DEFAULT 0,
`permissions_id` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
KEY `groups_id` (`groups_id`),
KEY `permissions_id` (`permissions_id`)
) ENGINE=InnoDB AUTO_INCREMENT=9735 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,49 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `sys_modules`
--
DROP TABLE IF EXISTS `sys_modules`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `sys_modules` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`mod_class_name` varchar(360) NOT NULL,
`mod_title` varchar(360) NOT NULL,
`mod_db_name` varchar(300) NOT NULL DEFAULT '',
`mod_p_name` varchar(90) NOT NULL DEFAULT '' COMMENT 'Module permission name',
`mod_type` enum('1','2','3') NOT NULL DEFAULT '1' COMMENT '1 - pub, 2 - cms, 3 - sys',
`mod_permission_sql` mediumtext NOT NULL COMMENT 'Permission insert/delete multi sql',
`mod_table_sql` mediumtext NOT NULL COMMENT 'Db Table structure sql',
`mod_modified` int(11) NOT NULL,
`mod_modified_by` int(11) NOT NULL,
`mod_created` int(11) NOT NULL,
`mod_created_by` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,44 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `temp_access_tokens`
--
DROP TABLE IF EXISTS `temp_access_tokens`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `temp_access_tokens` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sid` varchar(64) NOT NULL COMMENT 'sha1 session id',
`stime` int(11) NOT NULL COMMENT 'time active till',
`stoken` varchar(64) NOT NULL COMMENT 'access token',
PRIMARY KEY (`id`),
KEY `sid` (`sid`),
KEY `stime` (`stime`),
KEY `stoken` (`stoken`)
) ENGINE=InnoDB AUTO_INCREMENT=1746 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,42 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `temp_action_log`
--
DROP TABLE IF EXISTS `temp_action_log`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `temp_action_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL DEFAULT 0,
`time` int(11) NOT NULL,
`action` varchar(200) NOT NULL,
`value` varchar(4000) NOT NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,46 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `temp_cache_exp`
--
DROP TABLE IF EXISTS `temp_cache_exp`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `temp_cache_exp` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`key` varchar(60) NOT NULL,
`inserted` int(11) NOT NULL,
`expires` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `key` (`key`),
KEY `inserted` (`inserted`),
KEY `expires` (`expires`),
KEY `expires_2` (`expires`),
KEY `key_2` (`key`)
) ENGINE=InnoDB AUTO_INCREMENT=3417 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Site Apc cache expire time table';
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,40 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `temp_cms_msg_links`
--
DROP TABLE IF EXISTS `temp_cms_msg_links`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `temp_cms_msg_links` (
`msg_id` int(11) NOT NULL,
`map_id` int(11) NOT NULL,
KEY `map_id` (`map_id`),
KEY `msg_id` (`msg_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,49 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `temp_map_links`
--
DROP TABLE IF EXISTS `temp_map_links`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `temp_map_links` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`map_id` int(11) NOT NULL,
`map_ref_id` int(11) NOT NULL,
`map_link_id` int(11) NOT NULL,
`map_base_uri` enum('0','1') NOT NULL DEFAULT '0',
`map_lang_id` int(11) NOT NULL,
`map_type` enum('0','1') NOT NULL DEFAULT '0' COMMENT '0 - site_map link, 1 - site map urls link',
PRIMARY KEY (`id`),
KEY `map_id` (`map_id`),
KEY `map_ref_id` (`map_ref_id`),
KEY `map_link_id` (`map_link_id`),
KEY `map_lang_id` (`map_lang_id`),
KEY `map_type` (`map_type`)
) ENGINE=InnoDB AUTO_INCREMENT=11123 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,40 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `temp_pub_msg_links`
--
DROP TABLE IF EXISTS `temp_pub_msg_links`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `temp_pub_msg_links` (
`msg_id` int(11) NOT NULL,
`map_id` int(11) NOT NULL,
KEY `msg_id` (`msg_id`),
KEY `map_id` (`map_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,42 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `temp_users_online`
--
DROP TABLE IF EXISTS `temp_users_online`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `temp_users_online` (
`o_time` int(11) NOT NULL COMMENT 'Online time inserted',
`o_ip` varchar(16) NOT NULL COMMENT 'User IP',
`o_user_id` int(11) NOT NULL COMMENT 'User id',
`o_type` enum('0','1') NOT NULL DEFAULT '0' COMMENT '0 - pub side, 1 - cms side',
`o_user_agent` varchar(400) NOT NULL,
`o_user_md5_key` varchar(64) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,43 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.5.29-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: maison_alexandra_lv
-- ------------------------------------------------------
-- Server version 10.5.29-MariaDB-ubu2004
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Final view structure for view `view_products_count`
--
/*!50001 DROP VIEW IF EXISTS `view_products_count`*/;
/*!50001 SET @saved_cs_client = @@character_set_client */;
/*!50001 SET @saved_cs_results = @@character_set_results */;
/*!50001 SET @saved_col_connection = @@collation_connection */;
/*!50001 SET character_set_client = utf8mb4 */;
/*!50001 SET character_set_results = utf8mb4 */;
/*!50001 SET collation_connection = utf8mb4_unicode_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `view_products_count` AS select `tc`.`prod_id` AS `prod_id`,`tc`.`row_id` AS `row_id`,`tc`.`cl1_id` AS `cl1_id`,`tc`.`cl2_id` AS `cl2_id`,sum(`tc`.`count`) AS `count`,`cc`.`prod_price` AS `price` from (`mod_products_to_count` `tc` left join `mod_products_to_count_and_classificators` `cc` on(`tc`.`prod_id` = `cc`.`prod_id` and `tc`.`row_id` = `cc`.`id`)) group by `tc`.`prod_id`,`tc`.`row_id`,`tc`.`cl1_id`,`tc`.`cl2_id` */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 SET collation_connection = @saved_col_connection */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-07-22 19:50:46

View File

@ -0,0 +1,484 @@
#!/usr/bin/env bash
# ---------------------------------------------------------------------------------------------------------------------
# SCRIPT EXEC LOCATION: /opt/update
# ---------------------------------------------------------------------------------------------------------------------
# Usage: ./export_project.sh -project=maisonalexandra.lv -branch="release/legacy-system-php74"=
git_repository=""
www_project_dir=""
git_clone_dir=""
project_title=""
export_branch=""
backup_cfg_file_location_check=""
Red='\033[31m'
Green='\033[0;32m'
Color_Off='\033[0m'
script_dir="/opt/update/project_updates"
for i in "$@"; do
case $i in
-project=*|--update_project=*) project_title="${i#*=}" ;;
-branch=*|--export_branch=*) export_branch="${i#*=}" ;;
*) echo "Unknown parameter passed: $i"; exit 1 ;;
esac
done
# Override Script dir for testing for maisonalexandra.local.test
if [[ "$project_title" == "maisonalexandra.local.test" ]]; then
script_dir="/var/www/html/development/scripts/temp"
script_dir="/Users/marekskeiss/Projects/brsystems/git/MAISON ALEXANDRA/development/scripts/temp"
fi
statusOkMessageOutput() {
local msg=$1
local status=$2
local dashes="------------------------------------------------------------"
echo -e "$msg ${dashes:1:60-${#msg}}> ${Green}$status${Color_Off}"
}
dirOperationFailure() {
echo -e "\n${Red}ABORTING: ${Color_Off}An error occured while executing cd command...${Red}\n"
echo -e "${Red}$1${Color_Off}\n"
exit 0
}
# Check if base data provided
if [[ -z "$project_title" || -z "$export_branch" ]]; then
echo "Base data not provided...."
exit 0
fi
# Declare configuration for export
declare -a repoConfiguration
repoConfiguration[0]="maisonalexandra.lv;ssh://git@gitea.brsystems.lv:2020/brs/MAISON ALEXANDRA.git;MAISON ALEXANDRA;/var/www;system-brs-core/config/init.cfg.ini"
repoConfiguration[1]="maisonalexandra.local.test;ssh://git@gitea.brsystems.lv:2020/brs/MAISON ALEXANDRA.git;MAISON ALEXANDRA;$script_dir/www;system-brs-core/config/init.cfg.ini"
repoConfiguration[3]="domain.fr;fr;http"
for page in "${repoConfiguration[@]}"
do
# turn e.g. 'domain.de;de;https' into
# array ['domain.de', 'de', 'https']
IFS=";" read -r -a arr <<< "${page}"
site="${arr[0]}" # maisonalexandra.lv
if [[ "$project_title" == "$site" ]]; then
git_repository="${arr[1]}" # ssh://git@gitea.brsystems.lv:2020/brs/MAISON ALEXANDRA.git
git_clone_dir="${arr[2]}" # MAISON ALEXANDRA
www_project_dir="${arr[3]}" # /var/www
backup_cfg_file_location_check="${arr[4]}" # system-brs-core/config/init.cfg.ini
break
fi
done
# Check if base structure found in cfg
if [[ -z "$git_clone_dir" || -z "$git_repository" || -z "$www_project_dir" || ! -d "$script_dir" || ! -d "$www_project_dir/$project_title" || ! -d "$www_project_dir/$project_title" ]]; then
echo "Base configuration not found...."
exit 0
fi
statusOkMessageOutput "Base configuration load & check" "OK"
# Create copy of current project state
temp_dir_title=$(date +%Y.%m.%d)_${project_title}_update_$(date +%H%M%S)
working_dir="$script_dir/$temp_dir_title"
# if directory exists exit
if [[ -d "$working_dir" ]]; then
echo "Project already exists ahead of backup creation - try again a bit later..."
exit 0
fi
mkdir "$working_dir"
cd "$working_dir" || dirOperationFailure "$working_dir"
statusOkMessageOutput "Working directory configuration" "OK"
# Create backup copy of original code
mkdir -p "$working_dir/backup/${project_title}"
cp -rip "$www_project_dir/$project_title" "$working_dir/backup"
if [[ ! -d "$working_dir/backup/${project_title}" || ! -d "$working_dir/backup/${project_title}/files" || ! -f "$working_dir/backup/${project_title}/${backup_cfg_file_location_check}" ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}Backup copy creation failed!\n"
exit 0
fi
statusOkMessageOutput "Backup copy created" "OK"
statusOkMessageOutput "Zipping project backup data - SLOW!!!" "Zipping"
# Zip backup for easier access
cd "$working_dir/backup/" || dirOperationFailure "$working_dir/backup/"
zip -r "${project_title}.zip" "${project_title}" >/dev/null
if [[ ! -f "${project_title}.zip" ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}Backup copy zip creation failed!\n"
exit 0
fi
echo -e "Backup .zip location: $working_dir/backup/${project_title}.zip"
statusOkMessageOutput "Backup copy zipped for easier access" "OK"
# Extract new code from git
cd "$working_dir" || dirOperationFailure "$working_dir"
git clone "$git_repository"
cd "$git_clone_dir" || dirOperationFailure "$git_clone_dir"
statusOkMessageOutput "Git repository cloned" "OK"
# Check that the correct branch exists
# -q quiet output, not to output found string
# -i option, short for –ignore-case
# -c option tells grep to count its total number of occurrences
# by default exit status is 0 (true) if the pattern was found; otherwise blank string.
if [[ $(git branch -a | grep -ic "$export_branch") -eq 0 ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}Specified branch not found...${Red}\n"
echo -e "${Red}$export_branch${Color_Off}\n"
exit 0
fi
if [[ $(git branch -a | grep -ic "$export_branch") -gt 1 ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}More than one export branch found:${Red}\n"
git branch -a | grep -i "$export_branch"
echo -e "\n${Color_Off}"
exit 0
fi
# Checkout desired branch
git checkout "$export_branch"
# Check that the correct branch has been exported
if [[ ! $(git branch | grep -ic "$export_branch") -eq 1 ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}Branch checkout failure! :${Red}\n"
echo -e "$export_branch${Color_Off}"
exit 0
fi
statusOkMessageOutput "Switched to correct branch" "OK"
# Create git archive for update
git archive --format zip --output "$working_dir/export.zip" "$export_branch"
if [[ ! -f "$working_dir/export.zip" ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}Zip archive not found!${Red}\n"
exit 0
fi
statusOkMessageOutput "Archive .zip created successfully" "OK"
cd "$working_dir" || dirOperationFailure "$working_dir"
unzip export.zip -d "$working_dir/new_version_data" >/dev/null
cd "$working_dir/new_version_data" || dirOperationFailure "$working_dir/new_version_data"
statusOkMessageOutput "Archive successfully unzipped" "OK"
# Data / folder movement according to each specific project
case $project_title in
#--------------------------------------------------------------------------------------
# ZUTENIS GIT BASE DEPLOYMENT
#--------------------------------------------------------------------------------------
"zutenis.lv"|"zutenis.local.test")
su_user_pass='$2y$11$nM7tTu3k/rQGswhREUXlsOUJoZdbumlcoQG07YiCFbQGFTqcYY3Di'
su_user_key='3HMZGRH7JEC2OBPR'
# Moving & renaming WWW
mv "$working_dir/new_version_data/www" "$working_dir/new_$project_title"
if [[ ! -d "$working_dir/new_$project_title" ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}WWW DIR movement failed!${Red}\n"
exit 0
fi
cd "$working_dir/new_$project_title" || dirOperationFailure "$working_dir/new_$project_title"
rm -Rf "files"
rm -f "system-brs-core/config/init.cfg.ini"
cp "$www_project_dir/$project_title/system-brs-core/config/init.cfg.ini" "system-brs-core/config/init.cfg.ini"
cp -r "$www_project_dir/$project_title/files" "files"
# Validate that the directories are all in place
if [[ ! -f "system-brs-core/config/init.cfg.ini" || ! -d "files" ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}Some files are not copied correctly!"
exit 0
fi
statusOkMessageOutput "File update / movement" "OK"
cd "$working_dir/new_$project_title" || dirOperationFailure "$working_dir/new_$project_title"
twoFactor='3HMZGRH7JEC2OBPR'
password='$2y$11$nM7tTu3k\/rQGswhREUXlsOUJoZdbumlcoQG07YiCFbQGFTqcYY3Di'
sed -i "s/^ CONST suUserPassword.*/ CONST suUserPassword = '$password';/" system-brs-core/app/pubUsers/inc/pubUsersController.php
sed -i "s/^ CONST sSUser2FASecret.*/ CONST sSUser2FASecret = '$twoFactor';/" system-brs-core/app/pubUsers/inc/pubUsersController.php
statusOkMessageOutput "Sed replacement operations" "OK"
chown apache:apache -R "$working_dir/new_$project_title"
cd "$working_dir/new_$project_title" || dirOperationFailure "$working_dir/new_$project_title"
find . -type f -exec chmod 0644 {} \;
find . -type d -exec chmod 0755 {} \;
statusOkMessageOutput "Directory permission [chown/chmod] setup" "OK"
chcon -t httpd_sys_content_t "$working_dir/new_$project_title" -R
chcon -t httpd_sys_rw_content_t "$working_dir/new_$project_title/cache" -R
chcon -t httpd_sys_rw_content_t "$working_dir/new_$project_title/files" -R
chcon -t httpd_sys_rw_content_t "$working_dir/new_$project_title/logs" -R
statusOkMessageOutput "SElinux Permission [httpd_sys_rw_content_t] setup" "OK"
# Check if destination already doesn't have new folder
if [[ -d "$www_project_dir/new_$project_title" ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}Movement to base WWW dir failed!"
echo -e "\n${Red}$www_project_dir/new_$project_title ${Color_Off}already exists!\n"
exit 0
fi
# Update COMPOSER library location - each project might contain its own copy
# - so it will reside inside project folder
#--------------------------------------------------------------------------------------
cd "$working_dir/new_$project_title" || dirOperationFailure "$working_dir/new_$project_title"
sed -i "s#^ include './../vendor/autoload.php';# include './vendor/autoload.php';#" ./index.php
# Copy composer files to directory
cp "$working_dir/new_version_data/composer.json" "$working_dir/new_$project_title/composer.json"
cp "$working_dir/new_version_data/composer.lock" "$working_dir/new_$project_title/composer.lock"
# Modify composer file autoload paths
sed -i 's#^ "BRSystems\\\\Core\\\\Cms\\\\" : "www/system-brs-core/cms/",# "BRSystems\\\\Core\\\\Cms\\\\" : "system-brs-core/cms/",#' "$working_dir/new_$project_title/composer.json"
sed -i 's#^ "BRSystems\\\\Core\\\\App\\\\" : "www/system-brs-core/app/",# "BRSystems\\\\Core\\\\App\\\\" : "system-brs-core/app/",#' "$working_dir/new_$project_title/composer.json"
sed -i 's#^ "BRSystems\\\\Core\\\\Sys\\\\" : "www/system-brs-core/sys/",# "BRSystems\\\\Core\\\\Sys\\\\" : "system-brs-core/sys/",#' "$working_dir/new_$project_title/composer.json"
sed -i 's#^ "BRSystems\\\\Core\\\\Config\\\\" : "www/system-brs-core/config/",# "BRSystems\\\\Core\\\\Config\\\\" : "system-brs-core/config/",#' "$working_dir/new_$project_title/composer.json"
sed -i 's#^ "BRSystems\\\\Core\\\\Library\\\\" : "www/system-brs-core/library/",# "BRSystems\\\\Core\\\\Library\\\\" : "system-brs-core/library/",#' "$working_dir/new_$project_title/composer.json"
sed -i 's#^ "BRSystems\\\\Core\\\\Helpers\\\\" : "www/system-brs-core/functions/"# "BRSystems\\\\Core\\\\Helpers\\\\" : "system-brs-core/functions/"#' "$working_dir/new_$project_title/composer.json"
# Validate copied files
if [[ ! -f "composer.json" || ! -f "composer.lock" ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}Composer cfg files are not copied correctly!"
exit 0
fi
statusOkMessageOutput "Composer cfg files copied" "OK"
statusOkMessageOutput "Composer install - SLOW!!!" "installing"
# Override composer install for testing for maisonalexandra.local.test
# TODO BRS: Be great to create a separate container with same server structure and testing ground
if [[ "$project_title" == "maisonalexandra.local.test" ]]; then
if [[ $(docker exec -i maisonalexandra_php bash -c "cd /var/www/html/development/scripts/temp/$temp_dir_title/new_$project_title; composer install --no-dev" 2>&1 | grep -ic "autoload") -eq 0 ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}Composer installation failed...${Red}\n"
exit 0
fi
else
# Install composer library
if [[ $(COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev 2>&1 | grep -ic "autoload") -eq 0 ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}Composer installation failed...${Red}\n"
exit 0
fi
fi
# Check some dirs exists in vendor folder
if [[ ! -d "vendor" || ! -d "vendor/dompdf" || ! -d "vendor/twig" ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}Composer package not installed correctly!"
exit 0
fi
statusOkMessageOutput "Composer installed into new dir" "OK"
# Copy FONT to DomPdf & Install "Muli" font
#--------------------------------------------------------------------------------------
cd "$working_dir/new_$project_title" || dirOperationFailure "$working_dir/new_$project_title"
# Check some dirs exists in vendor folder
if [[ ! -d "vendor/dompdf" ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}Dompdf package is missing, failed installing Muli font!"
exit 0
fi
# Copy font loader and data to package location
cp "$working_dir/new_$project_title/system-brs-core/library/cPdfFromHTML/load_font.php" \
"$working_dir/new_$project_title/vendor/dompdf/load_font.php"
mv "$working_dir/new_$project_title/system-brs-core/library/cPdfFromHTML/FONTS" \
"$working_dir/new_$project_title/vendor/dompdf/FONTS"
# Navigate to font dir
cd "$working_dir/new_$project_title/vendor/dompdf" || dirOperationFailure "$working_dir/new_$project_title/vendor/dompdf"
if [[ ! -d "FONTS" || ! -f "load_font.php" ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}Dompdf font installation data are missing!"
exit 0
fi
# Add permissions
chmod +x "$working_dir/new_$project_title/vendor/dompdf/load_font.php"
chmod +x -R "$working_dir/new_$project_title/vendor/dompdf/FONTS"
chcon -t httpd_sys_rw_content_t "$working_dir/new_$project_title/vendor/dompdf/load_font.php"
chcon -t httpd_sys_rw_content_t "$working_dir/new_$project_title/vendor/dompdf/FONTS" -R
# Install the font - FONT LOADER FAILS, NEED TO CALL MANUALLY !!!!!
php load_font.php 'Muli' ./FONTS/Muli/static/Muli-Regular.ttf ./FONTS/Muli/static/Muli-Bold.ttf ./FONTS/Muli/static/Muli-Italic.ttf ./FONTS/Muli/static/Muli-BoldItalic.ttf >/dev/null
# Check Muli font in new location
cd "dompdf/lib/fonts" || dirOperationFailure "dompdf/lib/fonts"
if [[ ! -f "Muli-Bold.ufm" || ! -f "Muli-Bold.ttf" || ! -f "Muli-Regular.ttf" || ! -f "Muli-Regular.ufm" ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}Dompdf font installation failed - new font not found!"
exit 0
fi
statusOkMessageOutput "Dompdf Muli font installation successful" "OK"
# Final movement before DEPLOYMENT
#--------------------------------------------------------------------------------------
mv "$working_dir/new_$project_title" "$www_project_dir/new_$project_title"
if [[ ! -d "$www_project_dir/new_$project_title" ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}Movement to base WWW dir failed!"
exit 0
fi
statusOkMessageOutput "Pre-deployment status check" "OK"
# Deploy new Version
mv "$www_project_dir/$project_title" "$www_project_dir/old_$project_title"
mv "$www_project_dir/new_$project_title" "$www_project_dir/$project_title"
if [[ -d "$www_project_dir/new_$project_title" || ! -d "$www_project_dir/old_$project_title" ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}DEPLOYMENT within WWW dir failed!!!!!!!!"
exit 0
fi
statusOkMessageOutput "Project $project_title deployment successful" "OK"
# Cleanup
rm -Rf "$working_dir/${git_clone_dir:?}"
rm -Rf "$working_dir/new_version_data"
rm -Rf "$www_project_dir/old_${project_title:?}"
if [[ -d "$working_dir/$git_clone_dir" || -d "$working_dir/new_version_data" || -d "$www_project_dir/old_$project_title" ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}Data CLEANUP failed!"
exit 0
fi
statusOkMessageOutput "Project $project_title CLEANUP successful" "OK"
# Clearing cache folder
rm -Rf "$www_project_dir/$git_clone_dir/cache/*"
statusOkMessageOutput "Cache clear successful" "OK"
;;
#--------------------------------------------------------------------------------------
# DSDDELUXE.EU GIT BASE DEPLOYMENT
#--------------------------------------------------------------------------------------
"dsddeluxe.eu")
# Moving & renaming WWW
mv "$working_dir/new_version_data/www" "$working_dir/new_$project_title"
if [[ ! -d "$working_dir/new_$project_title" ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}WWW DIR movement failed!${Red}\n"
exit 0
fi
cd "$working_dir/new_$project_title" || dirOperationFailure "$working_dir/new_$project_title"
rm -Rf "files"
rm -f "system/config/main.cfg.php"
cp "$www_project_dir/$project_title/system/config/main.cfg.php" "system/config/main.cfg.php"
cp -r "$www_project_dir/$project_title/files" "files"
# Validate that the directories are all in place
if [[ ! -f "system/config/main.cfg.php" || ! -d "files" ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}Some files are not copied correctly!"
exit 0
fi
statusOkMessageOutput "File update / movement" "OK"
chown apache:apache -R "$working_dir/new_$project_title"
cd "$working_dir/new_$project_title" || dirOperationFailure "$working_dir/new_$project_title"
find . -type f -exec chmod 0644 {} \;
find . -type d -exec chmod 0755 {} \;
statusOkMessageOutput "Directory permission [chown/chmod] setup" "OK"
chcon -t httpd_sys_content_t "$working_dir/new_$project_title" -R
chcon -t httpd_sys_rw_content_t "$working_dir/new_$project_title/cache" -R
chcon -t httpd_sys_rw_content_t "$working_dir/new_$project_title/files" -R
chcon -t httpd_sys_rw_content_t "$working_dir/new_$project_title/logs" -R
chcon -t httpd_sys_rw_content_t "$working_dir/new_$project_title/system/library/vendor/dompdf/dompdf/lib/fonts" -R
chcon -t httpd_sys_rw_content_t "$working_dir/new_$project_title/system/library/smarty/cache" -R
chcon -t httpd_sys_rw_content_t "$working_dir/new_$project_title/system/library/smarty/templates_c" -R
statusOkMessageOutput "SElinux Permission [httpd_sys_rw_content_t] setup" "OK"
# Check if destination already doesn't have new folder
if [[ -d "$www_project_dir/new_$project_title" ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}Movement to base WWW dir failed!"
echo -e "\n${Red}$www_project_dir/new_$project_title ${Color_Off}already exists!\n"
exit 0
fi
# Final movement before DEPLOYMENT
mv "$working_dir/new_$project_title" "$www_project_dir/new_$project_title"
if [[ ! -d "$www_project_dir/new_$project_title" ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}Movement to base WWW dir failed!"
exit 0
fi
statusOkMessageOutput "Pre-deployment status check" "OK"
# Deploy new Version
mv "$www_project_dir/$project_title" "$www_project_dir/old_$project_title"
mv "$www_project_dir/new_$project_title" "$www_project_dir/$project_title"
if [[ -d "$www_project_dir/new_$project_title" || ! -d "$www_project_dir/old_$project_title" ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}DEPLOYMENT within WWW dir failed!!!!!!!!"
exit 0
fi
statusOkMessageOutput "Project $project_title deployment successful" "OK"
# Cleanup
rm -Rf "$working_dir/${git_clone_dir:?}"
rm -Rf "$working_dir/new_version_data"
rm -Rf "$www_project_dir/old_${project_title:?}"
if [[ -d "$working_dir/$git_clone_dir" || -d "$working_dir/new_version_data" || -d "$www_project_dir/old_$project_title" ]]; then
echo -e "\n${Red}ABORTING: ${Color_Off}Data CLEANUP failed!"
exit 0
fi
statusOkMessageOutput "Project $project_title CLEANUP successful" "OK"
# Clearing cache folder
rm -Rf "$www_project_dir/$git_clone_dir/cache/*"
rm -Rf "$www_project_dir/$git_clone_dir/system/library/smarty/cache/*"
rm -Rf "$www_project_dir/$git_clone_dir/system/library/smarty/templates_c/*"
statusOkMessageOutput "Cache clear successful" "OK"
;;
#--------------------------------------------------------------------------------------
# OMEGAONLINE.LV GIT BASE DEPLOYMENT
#--------------------------------------------------------------------------------------
"omegaonline.lv")
echo -e "Romanian"
;;
#--------------------------------------------------------------------------------------
# UNSUPPORTED PROJECT - EXIT !
#--------------------------------------------------------------------------------------
*)
echo -e "\n${Red}ABORTING: ${Color_Off}Project folder setup not found / not defined!"
exit 0
;;
esac
exit 1

Binary file not shown.

109
docker-compose.yaml Normal file
View File

@ -0,0 +1,109 @@
version: "3.8"
services:
php_74:
build:
context: .
dockerfile: docker/development/php-apache.DockerFile
container_name: maisonalexandra_php
environment:
TZ: "Europe/Riga"
WEB_DOCUMENT_ROOT: "/var/www/html/www"
ports:
- "80:80"
volumes:
# Mount folders
# :delegated - when docker container performs changes, host is in read only mode.
# :cached - when the host performs changes, the container is in read only mode.
- .:/var/www/html
# Mount Environment configuration
- ./docker/development/php.ini:/opt/docker/etc/php/php.ini
networks:
maisonalexandra-network:
aliases:
- local.maisonalexandra.lv
extra_hosts:
- "host.docker.internal:host-gateway"
mysql:
#image: mysql:5.7
image: mariadb:10.5
container_name: maisonalexandra_mysql
ports:
- "3306:3306"
volumes:
- ./development/database:/opt
- ./docker/development/mysql-config-file.cnf:/etc/mysql/conf.d/config-file.cnf
environment:
TZ: "Europe/Riga"
MYSQL_ROOT_PASSWORD: 'root'
networks:
- maisonalexandra-network
mailhog:
image: mailhog/mailhog
container_name: maisonalexandra_mailhog
ports:
- "1025:1025"
- "8025:8025"
networks:
- maisonalexandra-network
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: maisonalexandra_phpmyadmin
environment:
TZ: "Europe/Riga"
PMA_HOST: maisonalexandra_mysql
PMA_PORT: 3306
UPLOAD_LIMIT: 40M
ports:
- "8888:80"
networks:
- maisonalexandra-network
# Selenium Hub & Browser Nodes
selenium_hub:
container_name: maisonalexandra_selenium_hub
image: selenium/hub:3.141.59
ports:
- "4444:4444"
restart: always
networks:
- maisonalexandra-network
volumes:
- ./tests:/var/www
environment:
- GRID_UNREGISTER_IF_STILL_DOWN_AFTER=300
firefox_node:
container_name: maisonalexandra_selenium_firefox_node
image: selenium/node-firefox-debug:3.141.59
ports:
- "5902:5900"
restart: always
networks:
- maisonalexandra-network
volumes:
- ./temp:/var/www/temp
environment:
- HUB_HOST=maisonalexandra_selenium_hub
- HUB_PORT=4444
chrome_node:
container_name: maisonalexandra_selenium_chrome_node
image: selenium/node-chrome-debug:3.141.59
ports:
- "5901:5900"
restart: always
networks:
- maisonalexandra-network
volumes:
- ./temp:/var/www/temp
environment:
- HUB_HOST=maisonalexandra_selenium_hub
- HUB_PORT=4444
networks:
maisonalexandra-network:

View File

@ -0,0 +1,4 @@
deb http://archive.debian.org/debian/ buster main non-free contrib
deb-src http://archive.debian.org/debian/ buster main non-free contrib
deb http://archive.debian.org/debian-security/ buster/updates main non-free contrib
deb-src http://archive.debian.org/debian-security/ buster/updates main non-free contr

View File

@ -0,0 +1 @@
0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58 * * * * wget -q -O /var/www/html/www/logs/cron_call.log http://local.elixirvault.lv/cron/ctp:ZUTENIS-A94A8FE5CCB19BA61C4C0873D391E987982FBBD3/ct:check

View File

@ -0,0 +1,3 @@
[mysqld]
secure-file-priv = ""
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

View File

@ -0,0 +1,50 @@
# GoLang image - For MailHog
#FROM golang:1.13.4-buster AS mailhogBuilder
#RUN go get github.com/mailhog/mhsendmail \
# && cp /go/bin/mhsendmail /usr/bin/mhsendmail
# Apple silicon setup
FROM golang:1.15 AS mailhogBuilder
RUN go get -d -v github.com/mailhog/mhsendmail \
&& cd /go/src/github.com/mailhog/mhsendmail/ \
&& GOOS=linux GOARCH=arm64 go build -o mhsendmail .
# For M1 support use this image:
FROM formatdgmbh/webdevops-php-apache-dev:7.4
# Copy new Debian archive sources list to fix APT
COPY ./docker/development/config/sources.list /etc/apt/sources.list
RUN apt-get update &&\
apt-get install --no-install-recommends --assume-yes --quiet ca-certificates vim screen poppler-utils cron
RUN rm -rf /var/lib/apt/lists/*
# Add php to default path as shell
ENV PATH="${PATH}:/usr/local/bin/php"
WORKDIR /var/www/html/www
# Configure the cron
# Copy file to the cron.d directory
RUN touch /var/log/cron.log
COPY ./docker/development/cron_job /etc/cron.d/cron_job
# Give execution rights on the cron job
RUN chmod 0644 /etc/cron.d/cron_job
# Apply cron job
RUN crontab /etc/cron.d/cron_job
# Disable sendmail_path from php.webdevops.ini cfg file which overrider php.ini
RUN sed -i "s/^sendmail_path/;sendmail_path/" /opt/docker/etc/php/php.webdevops.ini
RUN sed -i "s/^php_admin_value\[sendmail_path\]/;php_admin_value\[sendmail_path\]/" /opt/docker/etc/php/fpm/pool.d/application.conf
COPY ./docker/development/php.ini /opt/docker/etc/php/php.ini
# Copy the Mailhog executable from the GoLang image to the PHP image
#COPY --from=mailhogBuilder /usr/bin/mhsendmail /usr/bin/mhsendmail
# Apple silicon support
COPY --from=mailhogBuilder /go/src/github.com/mailhog/mhsendmail/mhsendmail /usr/bin/mhsendmail

View File

@ -0,0 +1,27 @@
; Maximum allowed size for uploaded files.
upload_max_filesize = 40M
; Must be greater than or equal to upload_max_filesize
post_max_size = 40M
xdebug.max_nesting_level="1000"
xdebug.idekey="docker"
xdebug.discover_client_host="0"
xdebug.mode="develop,debug,coverage"
xdebug.start_with_request="trigger"
xdebug.client_host="host.docker.internal"
xdebug.client_port="9003"
memory_limit=-1
;error_reporting=-1
;log_errors_max_len=0
;zend.assertions=1
;assert.exception=1
xdebug.show_exception_trace=0
[mail function]
SMTP = elixirvault_mailhog
smtp_port = 1025
mail.add_x_header = On
sendmail_path = /usr/bin/mhsendmail -oi -t --smtp-addr elixirvault_mailhog:1025
php_admin_value[sendmail_path] = /usr/bin/mhsendmail -oi -t --smtp-addr elixirvault_mailhog:1025
mail.log = /var/www/html/www/logs/mail_log.log

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,93 @@
Copyright (c) 2016 The Muli Project Authors (contact@sansoxygen.com)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

View File

@ -0,0 +1,77 @@
Muli Variable Font
==================
This download contains Muli as both variable fonts and static fonts.
Muli is a variable font with this axis:
wght
This means all the styles are contained in these files:
Muli-VariableFont:wght.ttf
Muli-Italic-VariableFont:wght.ttf
If your app fully supports variable fonts, you can now pick intermediate styles
that aren’t available as static fonts. Not all apps support variable fonts, and
in those cases you can use the static font files for Muli:
static/Muli-ExtraLight.ttf
static/Muli-Light.ttf
static/Muli-Regular.ttf
static/Muli-Medium.ttf
static/Muli-SemiBold.ttf
static/Muli-Bold.ttf
static/Muli-ExtraBold.ttf
static/Muli-Black.ttf
static/Muli-ExtraLightItalic.ttf
static/Muli-LightItalic.ttf
static/Muli-Italic.ttf
static/Muli-MediumItalic.ttf
static/Muli-SemiBoldItalic.ttf
static/Muli-BoldItalic.ttf
static/Muli-ExtraBoldItalic.ttf
static/Muli-BlackItalic.ttf
Get started
-----------
1. Install the font files you want to use
2. Use your app's font picker to view the font family and all the
available styles
Learn more about variable fonts
-------------------------------
https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts
https://variablefonts.typenetwork.com
https://medium.com/variable-fonts
In desktop apps
https://theblog.adobe.com/can-variable-fonts-illustrator-cc
https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts
Online
https://developers.google.com/fonts/docs/getting_started
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide
https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts
Installing fonts
MacOS: https://support.apple.com/en-us/HT201749
Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux
Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows
Android Apps
https://developers.google.com/fonts/docs/android
https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts
License
-------
Please read the full license text (OFL.txt) to understand the permissions,
restrictions and requirements for usage, redistribution, and modification.
Commercial usage is allowed for any purpose, in any medium, but some
requirements apply in some situations. Always read your font licenses and
understand what they mean.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,10 @@
# PDF fonts
###Installation of additional fonts for PDF generation utf support
In normal case fonts are copied by the setup script upon composer installation, if manual instal required note that font utility is required after which please run the specific terminal command, by specifying correct font paths & file locations
`php load_font.php 'Muli' ./FONTS/Muli/static/Muli-Regular.ttf ./FONTS/Muli/static/Muli-Bold.ttf ./FONTS/Muli/static/Muli-Italic.ttf ./FONTS/Muli/static/Muli-BoldItalic.ttf`
php load_font.php 'Muli' ./FONTS/Muli/static/Muli-Regular.ttf ./FONTS/Muli/static/Muli-Bold.ttf ./FONTS/Muli/static/Muli-Italic.ttf ./FONTS/Muli/static/Muli-BoldItalic.ttf
./FONTS/Muli/static/Muli-SemiBold.ttf ./FONTS/Muli/static/Muli-Bold.ttf ./FONTS/Muli/static/Muli-Italic.ttf ./FONTS/Muli/static/Muli-BoldItalic.ttf

10
docker/production/info.md Normal file
View File

@ -0,0 +1,10 @@
# **Upon migration:**
* Add `Muli` font for `dompdf` pdf exports, copy vendor folder to its location & run copy `Mule` font command - if `composer` is reinstalled add `font_load.php`, `FONTS/Muli` dir & load `Muli` font;
* Enable selinux `setsebool -P httpd_can_network_connect 1`;
* Check gd has png support;
* Update MySql server to disable group by `sql_mode=` does not have `ONLY_FULL_GROUP_BY` - edit `my.cnf`, under `[mysqld]` section set `sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION`;
* Update CRON calls for outgoing mails;
* Update CRON for backup generation & update NAS access;
* Check Apcu enabled on Rocky Linux 9 for php74 - `sudo dnf update && sudo dnf install php74-php-pecl-apcu-bc.x86_64`;
* Regenerate SSL certificates;

117
phpunit.xml Normal file
View File

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.5/phpunit.xsd"
bootstrap="vendor/autoload.php"
cacheResultFile=".phpunit.cache/test-results"
colors="true"
executionOrder="depends,defects"
forceCoversAnnotation="false"
processIsolation="false"
beStrictAboutCoversAnnotation="true"
beStrictAboutOutputDuringTests="true"
beStrictAboutTodoAnnotatedTests="true"
convertDeprecationsToExceptions="true"
failOnRisky="true"
failOnWarning="true"
verbose="true">
<php>
<ini name="session.use_cookies" value="0" />
<ini name="session.use_only_cookies" value="0" />
<ini name="session.use_trans_sid" value="0" />
<ini name="session.cache_limiter" value="" />
</php>
<testsuites>
<testsuite name="Unit">
<directory>tests/UnitTests</directory>
</testsuite>
<testsuite name="Selenium">
<directory>tests/SeleniumTests</directory>
</testsuite>
</testsuites>
<coverage processUncoveredFiles="true">
<include>
<!-- APP -->
<directory suffix=".php">./www/system-brs-core/app/e404</directory>
<directory suffix=".php">./www/system-brs-core/app/index</directory>
<directory suffix=".php">./www/system-brs-core/app/pubDocuments</directory>
<directory suffix=".php">./www/system-brs-core/app/pubObjects</directory>
<directory suffix=".php">./www/system-brs-core/app/pubPartners</directory>
<directory suffix=".php">./www/system-brs-core/app/pubReports</directory>
<directory suffix=".php">./www/system-brs-core/app/pubSysDashboard</directory>
<directory suffix=".php">./www/system-brs-core/app/pubUnifiedObjects</directory>
<directory suffix=".php">./www/system-brs-core/app/pubUserManager</directory>
<directory suffix=".php">./www/system-brs-core/app/pubUsers</directory>
<!-- CMS -->
<directory suffix=".php">./www/system-brs-core/cms/cmsClassificators</directory>
<directory suffix=".php">./www/system-brs-core/cms/cmsMailEngine</directory>
<directory suffix=".php">./www/system-brs-core/cms/cmsMailEngineSent</directory>
<directory suffix=".php">./www/system-brs-core/cms/cmsMailsConstructor</directory>
<directory suffix=".php">./www/system-brs-core/cms/cmsMessages</directory>
<directory suffix=".php">./www/system-brs-core/cms/cmsPermissionGroups</directory>
<directory suffix=".php">./www/system-brs-core/cms/cmsPermissions</directory>
<directory suffix=".php">./www/system-brs-core/cms/cmsPubUsers</directory>
<directory suffix=".php">./www/system-brs-core/cms/cmsSubscriptions</directory>
<directory suffix=".php">./www/system-brs-core/cms/cmsTextManager</directory>
<!-- SYS -->
<directory suffix=".php">./www/system-brs-core/sys/sysActionLog</directory>
<directory suffix=".php">./www/system-brs-core/sys/sysApcOverview</directory>
<directory suffix=".php">./www/system-brs-core/sys/sysEmpty</directory>
<directory suffix=".php">./www/system-brs-core/sys/sysIpFilter</directory>
<directory suffix=".php">./www/system-brs-core/sys/sysLanguages</directory>
<directory suffix=".php">./www/system-brs-core/sys/sysMenus</directory>
<directory suffix=".php">./www/system-brs-core/sys/sysPermissionGroups</directory>
<directory suffix=".php">./www/system-brs-core/sys/sysPermissions</directory>
<directory suffix=".php">./www/system-brs-core/sys/sysSiteMap</directory>
<directory suffix=".php">./www/system-brs-core/sys/sysSiteModules</directory>
<directory suffix=".php">./www/system-brs-core/sys/sysTranslations</directory>
<directory suffix=".php">./www/system-brs-core/sys/sysTranslationsPub</directory>
<directory suffix=".php">./www/system-brs-core/sys/sysUsers</directory>
<directory suffix=".php">./www/system-brs-core/sys/sysUsersLogin</directory>
<directory suffix=".php">./www/system-brs-core/sys/sysUsersManager</directory>
<!-- FUNCTIONS -->
<directory suffix=".php">./www/system-brs-core/functions</directory>
<!-- CONFIG -->
<file>./www/system-brs-core/config/constants.php</file>
<!-- LIBRARY -->
<directory suffix=".php">./www/system-brs-core/library/cApc</directory>
<directory suffix=".php">./www/system-brs-core/library/cCore</directory>
<directory suffix=".php">./www/system-brs-core/library/cCoreSystem</directory>
<directory suffix=".php">./www/system-brs-core/library/cCron</directory>
<directory suffix=".php">./www/system-brs-core/library/cCrypt</directory>
<directory suffix=".php">./www/system-brs-core/library/cDb</directory>
<directory suffix=".php">./www/system-brs-core/library/cDefuseCrypto</directory>
<directory suffix=".php">./www/system-brs-core/library/cINI</directory>
<directory suffix=".php">./www/system-brs-core/library/cJSON</directory>
<directory suffix=".php">./www/system-brs-core/library/cMail</directory>
<directory suffix=".php">./www/system-brs-core/library/cMapUrls</directory>
<directory suffix=".php">./www/system-brs-core/library/cMessages</directory>
<directory suffix=".php">./www/system-brs-core/library/cNumbers</directory>
<directory suffix=".php">./www/system-brs-core/library/cPdfFromHTML</directory>
<directory suffix=".php">./www/system-brs-core/library/cSession</directory>
<directory suffix=".php">./www/system-brs-core/library/cUrl</directory>
<directory suffix=".php">./www/system-brs-core/library/cValidator</directory>
<directory suffix=".php">./www/system-brs-core/library/cView</directory>
<file>./www/system-brs-core/library/cExcel/cExcel.php</file>
<file>./www/system-brs-core/library/cGoogle2FA/cGoogle2FA.php</file>
<file>./www/system-brs-core/library/cPasswordMaster/cPasswordMaster.php</file>
<!-- JS FILE UPLOAD -->
<file>./www/js/fileupload/php/index.php</file>
<!-- CRON -->
<file>./www/cron-c/cron.php</file>
<!-- CRON -->
<directory>./www/ajax-c</directory>
</include>
<exclude>
<file>./www/system-brs-core/library/cPdfFromHTML/load_font.php</file>
</exclude>
</coverage>
</phpunit>

View File

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,48 @@
/************************************* aside css *************************************/
/*====================================
aside-nav css
====================================*/
aside {
left: -300px;
width: 300px;
max-width: 100%;
visibility: hidden;
-webkit-transition: left 0.3s ease-in-out;
transition: left 0.3s ease-in-out;
}
aside.active {
left: 0px;
visibility: visible;
}
@media (min-width: 992px) {
aside {
left: 0;
right: 0;
visibility: unset;
-webkit-transition: unset;
transition: unset;
}
}
aside nav#side-navbar nav.nav a.nav-link.active,
aside nav#side-navbar nav.nav a.nav-link:focus {
color: var(--extra-font-color-light);
background-color: var(--secondary-font-color);
}
/************************************* aside end *************************************/
/************************************* introduction css start *************************************/
/*====================================
intro-feature css
====================================*/
.intro-feature-content ul.intro-feature-ul li.intro-feature-li span {
position: relative;
}
.intro-feature-content ul.intro-feature-ul li.intro-feature-li span::before {
content: "\f3c1";
font-family: remixicon!important;
color: var(--secondary-font-color);
font-size: 10px;
vertical-align: middle;
padding: 0px 10px 0px 0px;
}
/************************************* introduction css end *************************************/

View File

@ -0,0 +1,591 @@
/*====================================
google font
====================================*/
@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');
/*====================================
root
====================================*/
[data-theme="light"] {
--body-font-color: #acacac;
--body-bgcolor: #ffffff;
--paragraph-font-color: #acacac;
--extra-bgcolor: #f7f7f7;
}
[data-theme="dark"] {
--body-font-color: #acacac;
--body-bgcolor: #000000;
--paragraph-font-color: #acacac;
--extra-bgcolor: #131313;
}
:root, [data-theme="dark"] {
/* body */
--body-font-size: 14px;
--body-font-family: "Poppins", sans-serif;
--body-font-weight: 400;
--body-font-style: normal;
--body-font-line-height: normal;
--body-font-letter-spacing: normal;
/* heading */
--heading-font-color: #263978;
--heading-font-family: "Poppins", sans-serif;
--heading-font-weight: 600;
--heading-font-style: normal;
--heading-font-line-height: normal;
/* section-heading */
--section-heading-font-color: #f1592e;
--section-heading-font-family: "Poppins", sans-serif;
--section-heading-font-text: none;
--section-heading-font-weight: 600;
--section-heading-font-style: normal;
--section-heading-font-line-height: 1.2;
/* paragraph */
--paragraph-font-family: "Poppins", sans-serif;
--paragraph-font-line-height: 25px;
/* general color */
--primary-font-color: #f1592e;
--secondary-font-color: #263978;
--extra-font-color-light: #ffffff;
--extra-font-color-dark: #333333;
/* border */
--border-color: 128,128,128;
--border-opacity: 0.1;
--border-radius: 0px;
--border-radius2: 0px;
/* box-shadow */
--box-shadow-outer: 0, 0, 0;
--box-shadow-outer-opacity: 0.15;
}
/*====================================
color css
====================================*/
/* body property css */
.body-color,
.body-primary-color,
.body-secondary-color {
color: var(--body-font-color);
}
.body-primary-color,
.body-secondary-color {
-webkit-transition: color 0.3s ease-in-out;
transition: color 0.3s ease-in-out;
}
.body-primary-color:hover {
color: var(--primary-font-color);
}
.body-secondary-color:hover {
color: var(--secondary-font-color);
}
.body-bg {
background-color: var(--body-bgcolor);
}
/* heading property css */
.heading-color {
color: var(--heading-font-color);
}
.heading-weight {
font-weight: var(--heading-font-weight);
}
.section-heading-weight {
font-weight: var(--section-heading-font-weight);
}
/* general property css */
.primary-color {
color: var(--primary-font-color);
}
.primary-bg {
background-color: var(--primary-font-color);
}
.secondary-color {
color: var(--secondary-font-color);
}
.secondary-bg {
background-color: var(--secondary-font-color);
}
.extra-color-light {
color: var(--extra-font-color-light);
}
.extra-bg-light {
background-color: var(--extra-font-color-light);
}
.extra-bg {
background-color: var(--extra-bgcolor);
}
.primary-btn {
color: var(--extra-font-color-light);
background-color: var(--primary-font-color);
border: 1px solid var(--primary-font-color);
}
.primary-btn:hover {
color: var(--primary-font-color);
background-color: transparent;
}
.secondary-btn {
color: var(--extra-font-color-light);
background-color: var(--secondary-font-color);
border: 1px solid var(--secondary-font-color);
}
.secondary-btn:hover {
color: var(--secondary-font-color);
background-color: transparent;
}
.primary-btn,
.secondary-btn {
-webkit-transition: color 0.3s ease-in-out,background-color 0.3s ease-in-out,border 0.3s ease-in-out;
transition: color 0.3s ease-in-out,background-color 0.3s ease-in-out,border 0.3s ease-in-out;
}
/************************************* 'html', 'body', 'h1 to h6' start *************************************/
@media (prefers-reduced-motion:no-preference) {
:root {
scroll-behavior: auto
}
}
/*=====================================
html css
=====================================*/
html {
scroll-behavior: smooth;
}
/*====================================
body css
====================================*/
body {
color: var(--body-font-color);
font-size: var(--body-font-size);
background-color: var(--body-bgcolor);
font-family: var(--body-font-family);
font-weight: var(--body-font-weight);
font-style: var(--body-font-style);
line-height: var(--body-font-line-height);
letter-spacing: var(--body-font-letter-spacing);
word-break: break-word;
}
/*====================================
heading css
====================================*/
h1, h2, h3, h4, h5, h6 {
color: var(--heading-font-color);
margin: 0;
padding: 0;
font-family: var(--heading-font-family);
font-weight: var(--heading-font-weight);
font-style: var(--heading-font-style);
line-height: var(--heading-font-line-height);
}
/************************************* 'html', 'body', 'h1 to h6' end *************************************/
/************************************* section start *************************************/
/*====================================
section-heading css
====================================*/
.section-heading {
color: var(--section-heading-font-color);
font-size: 20px;
margin-bottom: 30px;
font-family: var(--section-heading-font-family);
text-transform: var(--section-heading-font-text);
font-weight: var(--section-heading-font-weight);
font-style: var(--section-heading-font-style);
line-height: var(--section-heading-font-line-height);
}
/*====================================
section-sub-heading padding css
====================================*/
.section-sub-heading {
font-size: 18px;
margin-bottom: 30px;
}
/*====================================
section padding css
====================================*/
.section-ptb {
padding-top: 60px;
padding-bottom: 60px;
}
.section-pt {
padding-top: 60px;
}
.section-pb {
padding-bottom: 60px;
}
@media (min-width: 576px) {
.section-ptb {
padding-top: 80px;
padding-bottom: 80px;
}
.section-pt {
padding-top: 80px;
}
.section-pb {
padding-bottom: 80px;
}
}
@media (min-width: 1200px) {
.section-ptb {
padding-top: 100px;
padding-bottom: 100px;
}
.section-pt {
padding-top: 100px;
}
.section-pb {
padding-bottom: 100px;
}
}
/************************************* section end *************************************/
/************************************* 'p' start *************************************/
/*====================================
paragraph css
====================================*/
p {
color: var(--paragraph-font-color);
margin: 0;
font-family: var(--paragraph-font-family);
line-height: var(--paragraph-font-line-height);
}
/************************************* 'p' end *************************************/
/************************************* 'container', 'container-fluid' start *************************************/
/*====================================
'container' tag css
====================================*/
.container {
padding: 0px 15px;
}
/*====================================
'container-fluid' tag css
====================================*/
.container-fluid {
padding: 0px 15px;
}
@media (min-width: 1200px) {
.container-fluid {
padding: 0px 30px;
}
}
/************************************* 'container', 'container-fluid' end *************************************/
/************************************* 'row', 'col' start *************************************/
/*====================================
row, col css
====================================*/
.row {
margin-left: -7.5px;
margin-right: -7.5px;
}
.row>* {
padding-left: 7.5px;
padding-right: 7.5px;
}
.row-mtm {
margin-top: -30px;
}
.row-mtm>* {
margin-top: 30px;
}
.row-mtm10 {
margin-top: -10px;
}
.row-mtm10>* {
margin-top: 10px;
}
@media (min-width: 576px) {
.row {
margin-left: -15px;
margin-right: -15px;
}
.row>* {
padding-left: 15px;
padding-right: 15px;
}
}
/************************************* 'row', 'col' end *************************************/
/************************************* 'a' start *************************************/
/*====================================
'a' tag css
====================================*/
a {
color: var(--heading-font-color);
text-decoration: none;
}
a:focus {
outline: none;
box-shadow: none;
}
/************************************* 'a' end *************************************/
/************************************* button start *************************************/
/*====================================
'button' tag css
====================================*/
button {
display: inline-block;
padding: 0px;
background: 0 0;
font-family: var(--body-font-family);
border: none;
line-height: var(--body-font-line-height);
}
button, button:focus {
outline: none;
box-shadow: none;
}
.btn:focus,
.btn:active:focus,
.btn.active:focus {
outline: none;
box-shadow: none;
}
/*====================================
'btn-style' tag css
====================================*/
.btn-style {
display: inline-block;
padding: 10px 30px;
border-radius: var(--border-radius);
}
/*====================================
toggler-wrapper css
====================================*/
button.navbar-toggler {
display: block;
padding: 0px;
border: none;
cursor: pointer;
outline: none;
}
button.navbar-toggler:focus {
box-shadow: none;
}
button.navbar-toggler span.line,
button.navbar-toggler span.line::before,
button.navbar-toggler span.line::after {
display: block;
width: 16px;
height: 2px;
background-color: var(--heading-font-color);
-webkit-transition: background-color 0.3s ease-in-out,top 0.3s ease-in-out,transform 0.3s ease-in-out;
transition: background-color 0.3s ease-in-out,top 0.3s ease-in-out,transform 0.3s ease-in-out;
}
button.navbar-toggler span.line {
position: relative;
}
button.navbar-toggler span.line::before,
button.navbar-toggler span.line::after {
content: "";
position: absolute;
left: 0;
}
button.navbar-toggler span.line::before {
top: -7px;
}
button.navbar-toggler span.line::after {
top: 7px;
}
button.navbar-toggler[aria-expanded="true"] span.line {
background-color: transparent;
}
button.navbar-toggler[aria-expanded="true"] span.line::before,
button.navbar-toggler[aria-expanded="true"] span.line::after {
top: 0;
}
button.navbar-toggler[aria-expanded="true"] span.line::before {
transform: rotate(45deg);
}
button.navbar-toggler[aria-expanded="true"] span.line::after {
transform: rotate(-45deg);
}
/************************************* button end *************************************/
/************************************* ul start *************************************/
/*====================================
'ul', 'li' tag css
====================================*/
ul {
list-style: none;
margin: 0;
padding: 0;
}
/* ul-mt30 css */
.ul-mt30 {
margin-top: -15px;
margin-left: -7.5px;
margin-right: -7.5px;
}
.ul-mt30>* {
margin-top: 15px;
padding-left: 7.5px;
padding-right: 7.5px;
}
@media (min-width: 1200px) {
.ul-mt30 {
margin-top: -30px;
margin-left: -15px;
margin-right: -15px;
}
.ul-mt30>* {
margin-top: 30px;
padding-left: 15px;
padding-right: 15px;
}
}
/************************************* ul end *************************************/
/************************************* b, strong start *************************************/
/*===========================================
'b', 'strong' tag css
===========================================*/
b, strong {
color: var(--heading-font-color);
font-weight: var(--heading-font-weight);
}
/************************************* b, strong end *************************************/
/************************************* back-to-top start *************************************/
/*====================================
back-to-top css
====================================*/
a#top {
font-size: 20px;
bottom: 30px;
right: 15px;
height: 45px;
width: 45px;
-webkit-transition: color 0.3s ease-in-out,background-color 0.3s ease-in-out,opacity 0.3s ease-in-out,visibility 0.3s ease-in-out;
transition: color 0.3s ease-in-out,background-color 0.3s ease-in-out,opacity 0.3s ease-in-out,visibility 0.3s ease-in-out;
}
@media (min-width: 1200px) {
a#top {
right: 30px;
height: 60px;
width: 60px;
}
}
/************************************* back-to-top end *************************************/
/************************************* custom-switch css start *************************************/
/*====================================
custom-switch css
====================================*/
label.cust-switch-label {
width: 28px;
height: 12px;
cursor: pointer;
}
label.cust-switch-label span.cust-switch-slide {
cursor: pointer;
border-radius: 25px;
}
label.cust-switch-label span.cust-switch-slide::before {
content: "";
position: absolute;
left: 0px;
width: 14px;
height: 14px;
transform: translateX(0%);
background-color: var(--heading-font-color);
border-radius: 100%;
line-height: 1;
-webkit-transition: transform 0.3s ease-in-out;
transition: transform 0.3s ease-in-out;
}
label.cust-switch-label.theme-switch span.cust-switch-slide::before {
content: "\f1bf";
font-family: remixicon!important;
color: var(--extra-font-color-dark);
font-size: 12px;
left: 0px;
display: flex;
align-items: center;
justify-content: center;
background-color: var(--extra-font-color-light);
}
label.cust-switch-label input:checked ~ span.cust-switch-slide::before {
transform: translateX(100%);
}
label.cust-switch-label.theme-switch input:checked ~ span.cust-switch-slide::before {
content: "\ef75";
color: var(--extra-font-color-light);
background-color: var(--extra-font-color-dark);
}
/************************************* custom-switch css start *************************************/
/************************************* counter-num css start *************************************/
/*====================================
counter-area css
====================================*/
.counter-area {
counter-reset: section;
}
.counter-area .counter-num h2.section-heading::before {
counter-increment: section;
content: counter(section) ". ";
}
.counter-area .counter-num .counter-sub-num {
counter-reset: subsection;
}
.counter-area .counter-num .counter-sub-num h2.section-sub-heading::before {
counter-increment: subsection;
content: counter(section) "." counter(subsection) " ";
}
.counter-area .counter-num .counter-sub-num .counter-sup-num {
counter-reset: supsection;
}
.counter-area .counter-num .counter-sub-num .counter-sup-num h2.section-sub-heading::before {
counter-increment: supsection;
content: counter(section) "." counter(subsection) "." counter(supsection) " ";
}
/************************************* counter-num css end *************************************/
/************************************* scrollbar css end *************************************/
/*====================================
scrollbar css
====================================*/
aside {
-webkit-scrollbar-width: thin;
scrollbar-width: thin;
}
aside::-webkit-scrollbar {
width: 2px;
}
aside::-webkit-scrollbar-track {
background-color: transparent;
}
aside::-webkit-scrollbar-thumb {
background-color: var(--primary-font-color);
}
/************************************* scrollbar css end *************************************/
/************************************* animation css start *************************************/
/*====================================
animation css
====================================*/
[data-animate] {
opacity: 0
}
[data-animate].animate__animated {
opacity: 1
}
/************************************* animation css end *************************************/

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,155 @@
(function($) {
"use strict";
var $body = $("body"),
$window = $(window),
$document = $(document);
var ST = {
init: function() {
this.headerSticky();
this.sideToggler();
this.switchClick();
this.backTop();
},
headerSticky: function() {
$.fn.fixedHeader = function(options) {
var defaults = {
HeaderTarget: $(this)
};
options = $.extend(defaults, options);
return this.each(function() {
var HeaderTarget = options.HeaderTarget;
var createSticky = function() {
var targetHeight = HeaderTarget.outerHeight();
function updatePadding() {
$("body").css({
"padding-top": targetHeight
});
$("aside").css({
"top": targetHeight
});
}
updatePadding();
$(window).on("resize", function() {
targetHeight = HeaderTarget.outerHeight();
updatePadding();
});
};
createSticky();
});
};
$("header").fixedHeader();
},
sideToggler: function() {
var $sideToggler = $("button.side-toggler"),
$sideMenu = $("aside"),
$sideMenuClose = $("button.side-menu-close-btn");
$sideToggler.on("click", function() {
$sideMenu.addClass("active");
});
$sideMenuClose.on("click", function() {
$sideMenu.removeClass("active");
});
},
switchClick: function() {
var $switchClick = $(".theme-switch");
$switchClick.on("click", function() {
var $themeSwitch = $("#themeSwitch");
if($themeSwitch.is(":checked") == true) {
$(this).parents("html").attr("data-theme","light");
} else {
$(this).parents("html").attr("data-theme","dark");
}
});
},
backTop: function() {
var $back_top = $("#top"),
$html_body = $("html, body");
$window.scroll(function() {
if($(this).scrollTop() > 600) {
$back_top.removeClass("opacity-0 invisible").addClass("opacity-100 visible");
} else {
$back_top.addClass("opacity-0 invisible").removeClass("opacity-100 visible");
}
});
$back_top.click(function() {
$html_body.animate({
scrollTop: 0
}, 100);
return false;
});
}
};
ST.animateTemplate = {
aDelay: 50,
aQueue: [],
aTimer: null,
aBody: null,
init: function() {
var $at = this;
$at.aBody = $body;
$at.aQueue = [];
$at.aTimer = null;
if(typeof aDelay !== 'undefined') {
$at.aDelay = aDelay;
}
$at.aQueue["animate__animated_0"] = [];
$body.find("#main").find(">div, >section").each(function(index) {
$(this).attr("data-animated-id", (index + 1));
$at.aQueue["animate__animated_" + (index + 1)] = [];
});
setTimeout(function() {
$at.registerAnimation();
}, 200);
},
registerAnimation: function() {
var $at = this;
$("[data-animate]:not(.animate__animated)", $at.aBody).waypoint(function() {
var $at_el = this.element ? this.element : this,
$this = $($at_el);
if($this.is(":visible")) {
var $at_animated_wrap = $this.closest("[data-animated-id]"),
$at_animated_id = '0';
if($at_animated_wrap.length) {
$at_animated_id = $at_animated_wrap.data("animated-id");
}
$at.aQueue["animate__animated_" + $at_animated_id].push($at_el);
$at.processItemQueue();
} else {
$this.addClass($this.data("animate")).addClass("animate__animated");
}
}, {
offset: '90%',
triggerOnce: true
});
},
processItemQueue: function() {
var $at = this;
if($at.aTimer) {
return;
}
$at.aTimer = window.setInterval(function() {
var $at_queue = false;
for(var $at_animated_id in $at.aQueue) {
if($at.aQueue[$at_animated_id].length) {
$at_queue = true;
break;
}
}
if($at_queue) {
for(var $at_animated_id in $at.aQueue) {
var $at_item = $($at.aQueue[$at_animated_id].shift());
$at_item.addClass($at_item.data("animate")).addClass("animate__animated");
}
$at.processItemQueue();
} else {
window.clearInterval($at.aTimer);
$at.aTimer = null
}
}, $at.aDelay);
}
};
document.addEventListener("DOMContentLoaded", () => {
ST.init();
ST.animateTemplate.init();
});
})(jQuery);

View File

@ -0,0 +1,829 @@
<!DOCTYPE html>
<html lang="en" data-theme="light">
<head>
<meta charset="utf-8">
<meta http-equiv="Cache-control" content="max-age=31536000">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Welcome to spacingtech - Your Destination for Exceptional Web Design and Development Products</title>
<meta name="description" content="At spacingtech, we take pride in being a leading Web Design and Development Company with a passion for creating stunning online experiences. Our commitment to excellence is showcased through our premium HTML templates, exceptional UI/UX designs, and our proficiency in crafting seamless solutions on platforms like Shopify, WordPress, Prestashop, BigCommerce, and Opencart.">
<meta name="keywords" content="web agency, web design HTML Templates, UI/UX design, e-commerce platforms, innovation, customization, quality, customer approach, support, product, online store, mobile friendly, user friendly, responsive design, SEO, digital marketing, services, idea, stunning, realities, crafting digital experiences, redefining possibilities, one page template, dark mode, light mode">
<meta name="author" content="spacingtech_webify">
<!-- favicon -->
<link rel="icon" type="image/x-icon" href="assets/image/favicon.png">
<!-- plugin css -->
<link rel="stylesheet" type="text/css" href="assets/css/plugin.css">
<!-- theme css -->
<link rel="stylesheet" type="text/css" href="assets/css/theme.css">
<!-- style css -->
<link rel="stylesheet" type="text/css" href="assets/css/style.css">
</head>
<body>
<!-- header start -->
<header id="header" class="position-fixed top-0 start-0 end-0 z-2 body-bg ptb-10 beb">
<div class="container-fluid">
<div class="row align-items-center header-area">
<div class="col-6 col-md-3 header-element header-logo">
<!-- header-logo start -->
<div class="header-theme-logo">
<a href="index.html" class="d-inline-block theme-logo">
<img src="assets/image/logo.png" class="width-120 width-xl-144 img-fluid" alt="logo">
</a>
</div>
<!-- header-logo end -->
</div>
<div class="col-6 col-md-9 d-flex align-items-center justify-content-end header-element header-menu-icon">
<div class="header-menu">
<nav class="navbar-expand-md">
<!-- mainmenu-content start -->
<div class="mainmenu-content collapse navbar-collapse p-absolute p-md-unset top-100 start-0 end-0 body-bg z-2 beb beb-md-none" id="navbar">
<div class="main-menu">
<ul class="main-ul d-md-flex flex-md-wrap align-items-md-center" id="main-menu">
<li class="menu-li bst bst-md-none">
<a href="https://themeforest.net/user/spacingtech_webify/portfolio" class="link-title d-block body-primary-color pst-10 peb-10 psl-15 per-15">Our themes</a>
</li>
<li class="menu-li bst bst-md-none">
<span class="link-title d-block pst-10 pst-xl-0 peb-10 peb-xl-0 psl-15 per-15">
<a href="https://themeforest.net/user/spacingtech_webify/portfolio" class="d-flex align-items-center btn-style secondary-btn" target="_blank">Buy now <i class="ri-arrow-right-line icon-16 msl-5"></i></a>
</span>
</li>
</ul>
</div>
</div>
<!-- mainmenu-content end -->
</nav>
</div>
<div class="header-icon">
<ul class="shop-element d-flex align-items-center">
<!-- side-toggler start -->
<li class="side-wrap side-toggler-wrap d-lg-none">
<button type="button" class="d-block side-toggler secondary-color icon-16 lh-1" aria-label="Side-toggler menu"><i class="ri-contract-left-line"></i></button>
</li>
<!-- side-toggler end -->
<!-- navbar-toggler start -->
<li class="side-wrap toggler-wrap d-md-none msl-15">
<button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbar" aria-expanded="false" aria-label="Toggler menu"><span class="line"></span></button>
</li>
<!-- navbar-toggler end -->
<!-- theme-switch start -->
<li class="side-wrap switch-wrap msl-15">
<label class="cust-switch-label d-block theme-switch position-relative">
<input type="checkbox" id="themeSwitch" name="themeSwitch" class="cust-switch position-absolute top-0 end-0 bottom-0 start-0 h-auto opacity-0" aria-label="Switch" checked>
<span class="cust-switch-slide position-absolute top-0 end-0 bottom-0 start-0 d-flex align-items-center primary-bg"></span>
</label>
</li>
<!-- theme-switch end -->
</ul>
</div>
</div>
</div>
</div>
</header>
<!-- header end -->
<main id="main">
<div class="container-fluid">
<div class="row">
<div class="col-12 col-lg-3 col-xxl-2">
<aside class="col-lg-3 col-xxl-2 position-fixed psl-lg-15 psl-xl-30 z-2 overflow-auto">
<div class="side-menu-close position-sticky top-0 d-lg-none d-flex justify-content-end extra-bg beb">
<button type="button" class="side-menu-close-btn d-block secondary-color icon-16 ptb-15 plr-15 lh-1" aria-label="Close"><i class="ri-close-line"></i></button>
</div>
<nav class="extra-bg" id="side-navbar">
<nav class="nav nav-pills flex-column">
<a href="#item-1" class="nav-link body-secondary-color ptb-15 plr-15 rounded-0"><i class="ri-file-paper-line icon-16 mer-5"></i>Introduction</a>
<nav class="nav nav-pills flex-column">
<a href="#item-1-1" class="nav-link body-secondary-color ptb-15 psl-30 per-15 rounded-0"><i class="ri-flashlight-line icon-16 mer-5"></i>Features</a>
<a href="#item-1-2" class="nav-link body-secondary-color ptb-15 psl-30 per-15 rounded-0"><i class="ri-file-text-line icon-16 mer-5"></i>Files</a>
<nav class="nav nav-pills flex-column">
<a href="#item-1-2-1" class="nav-link body-secondary-color ptb-15 psl-45 per-15 rounded-0"><i class="ri-folder-line icon-16 mer-5"></i>Documentation</a>
<a href="#item-1-2-2" class="nav-link body-secondary-color ptb-15 psl-45 per-15 rounded-0"><i class="ri-folder-line icon-16 mer-5"></i>Theme</a>
</nav>
</nav>
<a href="#item-2" class="nav-link body-secondary-color ptb-15 plr-15 rounded-0"><i class="ri-install-line icon-16 mer-5"></i>Installation</a>
<nav class="nav nav-pills flex-column">
<a href="#item-2-1" class="nav-link body-secondary-color ptb-15 psl-30 per-15 rounded-0"><i class="ri-file-download-line icon-16 mer-5"></i>Download theme</a>
<a href="#item-2-2" class="nav-link body-secondary-color ptb-15 psl-30 per-15 rounded-0"><i class="ri-file-download-line icon-16 mer-5"></i>Install theme</a>
</nav>
<a href="#item-3" class="nav-link body-secondary-color ptb-15 plr-15 rounded-0"><i class="ri-booklet-line icon-16 mer-5"></i>Template structure</a>
<nav class="nav nav-pills flex-column">
<a href="#item-3-1" class="nav-link body-secondary-color ptb-15 psl-30 per-15 rounded-0"><i class="ri-html5-line icon-16 mer-5"></i>HTML5</a>
<a href="#item-3-2" class="nav-link body-secondary-color ptb-15 psl-30 per-15 rounded-0"><i class="ri-css3-line icon-16 mer-5"></i>CSS</a>
<nav class="nav nav-pills flex-column">
<a href="#item-3-2-1" class="nav-link body-secondary-color ptb-15 psl-45 per-15 rounded-0"><i class="ri-file-text-line icon-16 mer-5"></i>Theme.css</a>
<a href="#item-3-2-2" class="nav-link body-secondary-color ptb-15 psl-45 per-15 rounded-0"><i class="ri-file-text-line icon-16 mer-5"></i>Style.css</a>
<a href="#item-3-2-3" class="nav-link body-secondary-color ptb-15 psl-45 per-15 rounded-0"><i class="ri-file-text-line icon-16 mer-5"></i>Plugin.css</a>
</nav>
<a href="#item-3-3" class="nav-link body-secondary-color ptb-15 psl-30 per-15 rounded-0"><i class="ri-font-sans icon-16 mer-5"></i>Font</a>
<nav class="nav nav-pills flex-column">
<a href="#item-3-3-1" class="nav-link body-secondary-color ptb-15 psl-45 per-15 rounded-0"><i class="ri-bookmark-line icon-16 mer-5"></i>Link tag</a>
<a href="#item-3-3-2" class="nav-link body-secondary-color ptb-15 psl-45 per-15 rounded-0"><i class="ri-bookmark-line icon-16 mer-5"></i>@import rule</a>
<a href="#item-3-3-3" class="nav-link body-secondary-color ptb-15 psl-45 per-15 rounded-0"><i class="ri-bookmark-line icon-16 mer-5"></i>Apply font</a>
<a href="#item-3-3-4" class="nav-link body-secondary-color ptb-15 psl-45 per-15 rounded-0"><i class="ri-bookmark-line icon-16 mer-5"></i>Font icon</a>
</nav>
<a href="#item-3-4" class="nav-link body-secondary-color ptb-15 psl-30 per-15 rounded-0"><i class="ri-image-line icon-16 mer-5"></i>Image</a>
<nav class="nav nav-pills flex-column">
<a href="#item-3-4-1" class="nav-link body-secondary-color ptb-15 psl-45 per-15 rounded-0"><i class="ri-file-image-line icon-16 mer-5"></i>Logo sample</a>
</nav>
<a href="#item-3-5" class="nav-link body-secondary-color ptb-15 psl-30 per-15 rounded-0"><i class="ri-javascript-line icon-16 mer-5"></i>JavaScript</a>
<nav class="nav nav-pills flex-column">
<a href="#item-3-5-1" class="nav-link body-secondary-color ptb-15 psl-45 per-15 rounded-0"><i class="ri-file-text-line icon-16 mer-5"></i>Theme.js</a>
<a href="#item-3-5-2" class="nav-link body-secondary-color ptb-15 psl-45 per-15 rounded-0"><i class="ri-file-text-line icon-16 mer-5"></i>Plugin.js</a>
</nav>
</nav>
<a href="#item-4" class="nav-link body-secondary-color ptb-15 plr-15 rounded-0"><i class="ri-file-edit-line icon-16 mer-5"></i>Change contents</a>
<nav class="nav nav-pills flex-column">
<a href="#item-4-1" class="nav-link body-secondary-color ptb-15 psl-30 per-15 rounded-0"><i class="ri-code-s-slash-line icon-16 mer-5"></i>Images</a>
<a href="#item-4-2" class="nav-link body-secondary-color ptb-15 psl-30 per-15 rounded-0"><i class="ri-code-s-slash-line icon-16 mer-5"></i>Color</a>
<a href="#item-4-3" class="nav-link body-secondary-color ptb-15 psl-30 per-15 rounded-0"><i class="ri-code-s-slash-line icon-16 mer-5"></i>Header</a>
<a href="#item-4-4" class="nav-link body-secondary-color ptb-15 psl-30 per-15 rounded-0"><i class="ri-code-s-slash-line icon-16 mer-5"></i>Slider</a>
<nav class="nav nav-pills flex-column">
<a href="#item-4-5-1" class="nav-link body-secondary-color ptb-15 psl-45 per-15 rounded-0"><i class="ri-arrow-left-right-line icon-16 mer-5"></i>Swiper</a>
<a href="#item-4-5-2" class="nav-link body-secondary-color ptb-15 psl-45 per-15 rounded-0"><i class="ri-arrow-left-right-line icon-16 mer-5"></i>Slick slider</a>
</nav>
</nav>
<a href="#item-5" class="nav-link body-secondary-color ptb-15 plr-15 rounded-0"><i class="ri-open-source-line icon-16 mer-5"></i>Sources & credits</a>
<a href="#item-6" class="nav-link body-secondary-color ptb-15 plr-15 rounded-0"><i class="ri-customer-service-line icon-16 icon-16 mer-5"></i>Support</a>
</nav>
</nav>
</aside>
</div>
<div class="col-12 col-lg-9 col-xxl-10">
<div class="scrollspy-example-2" data-bs-spy="scroll" data-bs-target="#side-navbar" data-bs-smooth-scroll="true" tabindex="0">
<section class="ptb-30">
<div class="counter-area row-mtm d-flex flex-column">
<div class="counter-num" id="item-1">
<div class="row-mtm d-flex flex-column">
<div class="counter-margin">
<!-- document start -->
<div class="doc-info peb-30 meb-30 beb">
<h6 class="font-18">Beluxe - Documentation</h6>
</div>
<!-- document end -->
<!-- introduction start -->
<h2 class="section-heading">Introduction</h2>
<div class="intro-content">
<h6 class="font-16">Beluxe - Beauty & Cosmetics eCommerce HTML5 Template</h6>
<div class="mst-20">
<div class="row-mtm10 d-flex flex-column">
<p>Thank you very much for choosing our theme. We truly appreciate and really happy that you'll enjoy our theme!</p>
<p>Beluxe is a <strong>Fully Responsive</strong> HTML5 Theme like modern design website, HTML5 template, responsive design, SEO which has build by bootstrap. It features a clean and responsive design, we blend creativity with functionality to design spaces that inspire.</p>
<p>It has a fully responsive width adjusts automatically to any screen size or resolution. Theme have with lot of option like <strong>Header, Footer, Slider, Banner, Product Grid-list, Timer option, Blog, Article, Root directory option (like body, heading, secton heading, paragraph etc...) Typography option, Preloader, Section padding option, Button option, Animation etc...</strong></p>
</div>
</div>
</div>
<!-- introduction end -->
</div>
<div class="counter-sub-num">
<div class="row-mtm d-flex flex-column">
<div class="counter-sub-margin" id="item-1-1">
<!-- intro-feature start -->
<h2 class="section-sub-heading">Theme features</h2>
<div class="intro-feature-content">
<ul class="row row-mtm10 intro-feature-ul">
<li class="col-6 col-sm-4 col-lg-3 intro-feature-li">
<span class="d-block">HTML5</span>
</li>
<li class="col-6 col-sm-4 col-lg-3 intro-feature-li">
<span class="d-block">CSS3</span>
</li>
<li class="col-6 col-sm-4 col-lg-3 intro-feature-li">
<span class="d-block">Bootstrap 5</span>
</li>
<li class="col-6 col-sm-4 col-lg-3 intro-feature-li">
<span class="d-block">Jquery</span>
</li>
<li class="col-6 col-sm-4 col-lg-3 intro-feature-li">
<span class="d-block">Typography</span>
</li>
<li class="col-6 col-sm-4 col-lg-3 intro-feature-li">
<span class="d-block">Color</span>
</li>
<li class="col-6 col-sm-4 col-lg-3 intro-feature-li">
<span class="d-block">Icon</span>
</li>
<li class="col-6 col-sm-4 col-lg-3 intro-feature-li">
<span class="d-block">Easy to customize</span>
</li>
<li class="col-6 col-sm-4 col-lg-3 intro-feature-li">
<span class="d-block">Fully responsive</span>
</li>
<li class="col-6 col-sm-4 col-lg-3 intro-feature-li">
<span class="d-block">W3C validate</span>
</li>
<li class="col-6 col-sm-4 col-lg-3 intro-feature-li">
<span class="d-block">Dropdown menu</span>
</li>
<li class="col-6 col-sm-4 col-lg-3 intro-feature-li">
<span class="d-block">Clean code</span>
</li>
<li class="col-6 col-sm-4 col-lg-3 intro-feature-li">
<span class="d-block">Clean design</span>
</li>
<li class="col-6 col-sm-4 col-lg-3 intro-feature-li">
<span class="d-block">Grid</span>
</li>
<li class="col-6 col-sm-4 col-lg-3 intro-feature-li">
<span class="d-block">List</span>
</li>
<li class="col-6 col-sm-4 col-lg-3 intro-feature-li">
<span class="d-block">Blog</span>
</li>
<li class="col-6 col-sm-4 col-lg-3 intro-feature-li">
<span class="d-block">Slider</span>
</li>
<li class="col-6 col-sm-4 col-lg-3 intro-feature-li">
<span class="d-block">Social share</span>
</li>
<li class="col-6 col-sm-4 col-lg-3 intro-feature-li">
<span class="d-block">Best rated</span>
</li>
</ul>
</div>
<!-- intro-feature end -->
</div>
<div class="counter-sub-margin" id="item-1-2">
<!-- intro-files start -->
<h2 class="section-sub-heading">Files included</h2>
<div class="intro-files">
<ol class="intro-files-ul row-mtm10 d-flex flex-column meb-0 psl-17">
<li class="intro-files-li">
<span>Documentation</span>
</li>
<li class="intro-files-li">
<span>Template</span>
</li>
</ol>
</div>
<div class="mst-15">
<img src="assets/image/files/files-include.jpg" class="img-fluid" alt="files-include">
</div>
<!-- intro-files end -->
<div class="counter-sup-num mst-30">
<div class="row row-mtm">
<div class="col-12" id="item-1-2-1">
<!-- intro-documentation start -->
<h2 class="section-sub-heading">Documentation</h2>
<div class="row-mtm10 d-flex flex-column">
<p>Documentation folder include whole theme option from strat to end.</p>
<p>Open index file to show the documentation page, Open in browser to show perfect view of the documentation.</p>
</div>
<div class="mst-15">
<img src="assets/image/files/documentation.jpg" class="img-fluid" alt="documentation">
</div>
<!-- intro-documentation end -->
</div>
<div class="col-12" id="item-1-2-2">
<!-- intro-theme start -->
<h2 class="section-sub-heading">Template</h2>
<div class="row-mtm10 d-flex flex-column">
<p>Template folder included file.</p>
<p>Template folder file contain to show file with same as you shown in template with image ratio.</p>
<p>Image ratio means you will may know about the exact image dimension of the HTML template, So you will add that image dimension in your demo file respectively and show your future theme how it look.</p>
</div>
<!-- intro-theme end -->
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="counter-num" id="item-2">
<div class="row-mtm d-flex flex-column">
<div class="counter-margin">
<!-- installation start -->
<h2 class="section-heading">Installation</h2>
<div class="intro-content">
<h6 class="font-16">Package download from <strong>envatomarket</strong></h6>
<div class="mst-20">
<div class="row-mtm10 d-flex flex-column">
<p>Go to the <a href="https://themeforest.net/" class="secondary-color text-decoration-underline" target="_blank">envatomarket</a> website and log in to your account. This is the account you used to make the purchase.</p>
<p>After logging in, look for a <strong>Downloads</strong> tab to download your purchase theme from your <strong>envatomarket</strong> account. The specific wording and location may vary depending on the website's design.</p>
<p>In the <strong>Downloads</strong> tab, you should see the theme you purchased listed there. Click on <strong>Download</strong> button.</p>
</div>
</div>
</div>
<!-- installation end -->
</div>
<div class="counter-sub-num">
<div class="row-mtm d-flex flex-column">
<div class="counter-sub-margin" id="item-2-1">
<!-- download-theme start -->
<h2 class="section-sub-heading">Download the theme</h2>
<div class="row-mtm10 d-flex flex-column">
<p>You will typically be provided with options to download the theme files. Download the files to your computer. The theme files might be in a compressed format like ZIP.</p>
<p>If the theme files are in a compressed format, unzip or extract them to a location on your computer.</p>
</div>
<!-- download-theme end -->
<div class="mst-15">
<img src="assets/image/account.jpg" class="img-fluid" alt="account">
</div>
</div>
<div class="counter-sub-margin" id="item-2-2">
<!-- install-theme start -->
<h2 class="section-sub-heading">Install the theme</h2>
<div class="row-mtm10 d-flex flex-column">
<p>Follow the documentation or instructions provided with the theme to develop an ecommerce big platform like <strong>wordpress, shopify, opencart, prestashop, bigcommerce</strong>.</p>
<p>After Devlope HTML theme in variours platform then installation, activate the theme as per the instructions. This might involve going to your website's admin panel or theme settings and selecting the newly installed theme.</p>
<p>Envaomarket website layout and theme delivery process may change over time, so it's important to follow the specific instructions provided on their website or in the <strong>documentation</strong> that comes with the theme you purchased.</p>
</div>
<!-- install-theme end -->
</div>
</div>
</div>
</div>
</div>
<div class="counter-num" id="item-3">
<div class="row-mtm d-flex flex-column">
<div class="counter-margin">
<!-- template start -->
<h2 class="section-heading">Template structure</h2>
<div class="intro-content">
<h6 class="font-16">Theme folder template package structure</h6>
<div class="mst-20">
<div class="row-mtm10 d-flex flex-column">
<p>There are many types of structure to build template.</p>
<p>We follow below type of structure for <strong>template</strong>.</p>
</div>
<div class="temp-files mst-15">
<ol class="temp-files-ul row-mtm10 d-flex flex-column meb-0 psl-17">
<li class="temp-files-li">
<span>Assets folder</span>
</li>
<li class="temp-files-li">
<span>HTML5 files</span>
</li>
</ol>
<div class="mst-15">
<img src="assets/image/template/structure.jpg" class="img-fluid" alt="structure">
</div>
</div>
</div>
<div class="mst-20">
<div class="row-mtm10 d-flex flex-column">
<p>We follow below type of structure for <strong>assets folder</strong>.</p>
</div>
<div class="temp-files mst-15">
<ol class="temp-files-ul row-mtm10 d-flex flex-column meb-0 psl-17">
<li class="temp-files-li">
<span>CSS files</span>
</li>
<li class="temp-files-li">
<span>Font files</span>
</li>
<li class="temp-files-li">
<span>Image files</span>
</li>
<li class="temp-files-li">
<span>JavaScript files</span>
</li>
</ol>
<div class="mst-15">
<img src="assets/image/template/assets.jpg" class="img-fluid" alt="assets">
</div>
</div>
</div>
</div>
<!-- template end -->
</div>
<div class="counter-sub-num">
<div class="row-mtm d-flex flex-column">
<div class="counter-sub-margin" id="item-3-1">
<!-- HTML5 start -->
<h2 class="section-sub-heading">HTML5 structure</h2>
<div class="row-mtm10 d-flex flex-column">
<p>The main contents are inside the 'body' tag divided into different section & div (i.e. preloader, top-bar, header, main,... footer etc.).</p>
<p>The general template structure is the same throughout the template. Here is the general structure.</p>
</div>
<div class="mst-15">
<img src="assets/image/template/html.jpg" class="img-fluid" alt="html">
</div>
<!-- HTML5 end -->
</div>
<div class="counter-sub-margin" id="item-3-2">
<!-- CSS start -->
<h2 class="section-sub-heading">CSS files structure</h2>
<div class="row-mtm10 d-flex flex-column">
<p>We are using various type of CSS files (i.e. account.css, blog.css, collection.css, other.css, product.css, style.css, theme.css,... etc.) and several vendor css files (i.e. plugin.css).</p>
<p>CSS file structure is as follows:</p>
</div>
<div class="mst-15">
<img src="assets/image/template/css.jpg" class="img-fluid" alt="css">
</div>
<!-- CSS end -->
<div class="counter-sup-num mst-30">
<div class="row row-mtm">
<div class="col-12" id="item-3-2-1">
<!-- theme-css start -->
<div class="col-12">
<h2 class="section-sub-heading">Theme css</h2>
<div class="row-mtm10 d-flex flex-column">
<p>Theme css file include all tag css (i.e. body, heading, anchor link, paragraph, header,... footer etc.).</p>
</div>
<div class="mst-15">
<img src="assets/image/template/theme_css.jpg" class="img-fluid" alt="theme_css">
</div>
<div class="mst-15">
<img src="assets/image/template/theme_css2.jpg" class="img-fluid" alt="theme_css2">
</div>
</div>
<!-- theme-css end -->
</div>
<div class="col-12" id="item-3-2-2">
<!-- style-css start -->
<div class="col-12">
<h2 class="section-sub-heading">Style css</h2>
<div class="row-mtm10 d-flex flex-column">
<p>Style css file include index layout css.</p>
</div>
<div class="mst-15">
<img src="assets/image/template/style_css.jpg" class="img-fluid" alt="style_css">
</div>
</div>
<!-- style-css end -->
</div>
<div class="col-12" id="item-3-2-3">
<!-- plugin-css start -->
<div class="col-12">
<h2 class="section-sub-heading">Plugin css</h2>
<div class="row-mtm10 d-flex flex-column">
<p>Plugin css file include all several vendor css files (i.e. bootstrap, animate, remix-icon, owl-carousel, swiper,... custom etc.).</p>
<p>Custom css is our customize files (i.e. margin, padding, other,... etc.).</p>
</div>
<div class="mst-15">
<img src="assets/image/template/plugin_css.jpg" class="img-fluid" alt="plugin_css">
</div>
</div>
<!-- plugin-css end -->
</div>
</div>
</div>
</div>
<div class="counter-sub-margin" id="item-3-3">
<!-- Font start -->
<h2 class="section-sub-heading">Font files structure</h2>
<div class="row-mtm10 d-flex flex-column">
<p>To use <a href="https://www.google.com/fonts" class="secondary-color text-decoration-underline" target="_blank">Google Fonts Library</a> in an HTML5 template, you can follow these steps.</p>
<p>Google Fonts provides two ways to include fonts in your HTML template:</p>
</div>
<!-- Font end -->
<div class="counter-sup-num mst-30">
<div class="row row-mtm">
<!-- font-head start -->
<div class="col-12" id="item-3-3-1">
<h2 class="section-sub-heading">'Link' tag css (Recommended)</h2>
<div class="row-mtm10 d-flex flex-column">
<p>Google Fonts will provide you with a "link" tag that you should include in the "head" section of your HTML document. It looks like this:</p>
</div>
<div class="mst-15">
<img src="assets/image/template/font_head.jpg" class="img-fluid" alt="font_head">
</div>
</div>
<!-- font-head end -->
<!-- font-css start -->
<div class="col-12" id="item-3-3-2">
<h2 class="section-sub-heading">@import CSS Rule</h2>
<div class="row-mtm10 d-flex flex-column">
<p>If you prefer to include fonts using CSS, Google Fonts also provides a CSS @import rule. It looks like this:</p>
</div>
<div class="mst-15">
<img src="assets/image/template/font_css.jpg" class="img-fluid" alt="font_css">
</div>
</div>
<!-- font-css end -->
<!-- font-css start -->
<div class="col-12" id="item-3-3-3">
<h2 class="section-sub-heading">Apply the font to your HTML elements</h2>
<div class="row-mtm10 d-flex flex-column">
<p>Once you have linked to the google font in your HTML document, you can apply the font to specific HTML elements using CSS. For example, to apply the font to all paragraphs, you can do this in your CSS file</p>
</div>
<div class="mst-15">
<img src="assets/image/template/font_apply.jpg" class="img-fluid" alt="font_apply">
</div>
</div>
<!-- font-css end -->
<!-- font-icon start -->
<div class="col-12" id="item-3-3-4">
<h2 class="section-sub-heading">Font icon rule</h2>
<div class="row-mtm10 d-flex flex-column">
<p>If you want to add any other font icon need to attach that vendor file and download that font and store that font in font files with rendom folder (i.e. eot, ttf, woff, woff2,... etc.). It looks like this:</p>
</div>
<div class="mst-15">
<img src="assets/image/template/font_folder.jpg" class="img-fluid" alt="font_folder">
</div>
<div class="mst-15">
<img src="assets/image/template/font_folder_icon.jpg" class="img-fluid" alt="font_folder_icon">
</div>
</div>
<!-- font-icon end -->
</div>
</div>
</div>
<div class="counter-sub-margin" id="item-3-4">
<!-- Image start -->
<h2 class="section-sub-heading">Image files structure</h2>
<div class="row-mtm10 d-flex flex-column">
<p>Image folder include whole theme image location.</p>
</div>
<div class="mst-15">
<img src="assets/image/template/image.jpg" class="img-fluid" alt="image">
</div>
<!-- Image end -->
<div class="counter-sup-num mst-30">
<div class="row row-mtm">
<!-- logo-sample start -->
<div class="col-12" id="item-3-4-1">
<h2 class="section-sub-heading">Logo sample</h2>
<div class="row-mtm10 d-flex flex-column">
<p>Suppose you want to change the following image file. It looks like this:</p>
</div>
<div class="mst-15">
<img src="assets/image/template/image_logo.jpg" class="img-fluid" alt="image_logo">
</div>
</div>
<!-- logo-sample end -->
</div>
</div>
</div>
<div class="counter-sub-margin" id="item-3-5">
<!-- JavaScript start -->
<h2 class="section-sub-heading">JavaScript files structure</h2>
<div class="row-mtm10 d-flex flex-column">
<p>We are using one custome js files (i.e. theme.js,... etc.) and several vendor css files (i.e. plugin.min.js).</p>
<p>JavaScript file structure is as follows:</p>
</div>
<div class="mst-15">
<img src="assets/image/template/js.jpg" class="img-fluid" alt="js">
</div>
<!-- JavaScript end -->
<div class="counter-sup-num mst-30">
<div class="row row-mtm">
<div class="col-12" id="item-3-5-1">
<!-- theme-css start -->
<div class="col-12">
<h2 class="section-sub-heading">Theme js</h2>
<div class="row-mtm10 d-flex flex-column">
<p>Theme js file include whole template js (i.e. loadpage, imgresize, switchclick, headersticky, navactive, contactform, backtotop, cursorpoint, animatetemplate,... custom etc.).</p>
</div>
<div class="mst-15">
<img src="assets/image/template/theme_js.jpg" class="img-fluid" alt="theme_js">
</div>
</div>
<!-- theme-css end -->
</div>
<div class="col-12" id="item-3-5-2">
<!-- plugin-css start -->
<div class="col-12">
<h2 class="section-sub-heading">Plugin js</h2>
<div class="row-mtm10 d-flex flex-column">
<p>Plugin js file include all several vendor css files (i.e. popper, bootstrap, jquery, jquery-nav, waypoints, owl-carousel, swiper,... custom etc.).</p>
</div>
<div class="mst-15">
<img src="assets/image/template/plugin_js.jpg" class="img-fluid" alt="plugin_js">
</div>
</div>
<!-- plugin-css end -->
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="counter-num" id="item-4">
<div class="row-mtm d-flex flex-column">
<div class="counter-margin">
<!-- template start -->
<h2 class="section-heading">Change contents</h2>
<div class="intro-content">
<h6 class="font-16">Change the content as per your requirements</h6>
<div class="mst-20">
<div class="row-mtm10 d-flex flex-column">
<p>Moslty these type of changes contents follow below like this.</p>
</div>
<div class="content-files mst-15">
<ol class="content-files-ul row-mtm10 d-flex flex-column meb-0 psl-17">
<li class="content-files-li">
<span>Logo & Favicon</span>
</li>
<li class="content-files-li">
<span>Color</span>
</li>
<li class="content-files-li">
<span>Header</span>
</li>
<li class="content-files-li">
<span>Slider</span>
</li>
<li class="content-files-li">
<span>Footer</span>
</li>
</ol>
</div>
</div>
</div>
<!-- template end -->
</div>
<div class="counter-sub-num">
<div class="row-mtm d-flex flex-column">
<div class="counter-sub-margin" id="item-4-1">
<!-- changing-images start -->
<h2 class="section-sub-heading">Changing images (i.e. logo, favicon,... etc.)</h2>
<div class="row-mtm10 d-flex flex-column">
<p>To change any images of the website.</p>
<p>Carefully collect the source name of the image.</p>
<p>Open the file called image.</p>
<p>Find the particular image file.</p>
<p>Replace the file with your image.</p>
<p>Make sure that the file name does not change.The file name should be the same.</p>
<p>Suppose you want to change the following image file.</p>
</div>
<div class="mst-15">
<img src="assets/image/content/change_img_logo.jpg" class="img-fluid" alt="change_img_logo">
</div>
<div class="mst-15">
<img src="assets/image/content/change_img_favicon.jpg" class="img-fluid" alt="change_img_favicon">
</div>
<!-- changing-images end -->
</div>
<div class="counter-sub-margin" id="item-4-2">
<!-- changing-colors start -->
<h2 class="section-sub-heading">Changing default template colors</h2>
<div class="row-mtm10 d-flex flex-column">
<p>We have used root directory in <strong>theme.css</strong> for this project to write css.</p>
<p>If you are familiar with <strong>theme.css</strong> you should customize only the <strong>theme.css</strong> files.</p>
<p>Please make sure you compile the <strong>theme.css</strong> file after you have made changes in any of the <strong>theme.css</strong> files.</p>
<p>Open the <strong>theme.css</strong> file from <strong>assets > css > defaults</strong> folder with a text-editor.</p>
<p>Change the right-side values of the variables to change any default colors of your site.</p>
<p>Save your file.</p>
<p>Have a look at the following image for a visual description:</p>
</div>
<div class="mst-15">
<img src="assets/image/content/change_color.jpg" class="img-fluid" alt="change_color">
</div>
<!-- changing-colors end -->
</div>
<div class="counter-sub-margin" id="item-4-3">
<!-- header-sticky start -->
<h2 class="section-sub-heading">Changing sticky header</h2>
<div class="row-mtm10 d-flex flex-column">
<p>If you don't want sticky header then remove js from <strong>theme.js</strong> files.</p>
<p>Follow instructions in image below:</p>
</div>
<div class="mst-15">
<img src="assets/image/content/change_sticky.jpg" class="img-fluid" alt="change_sticky">
</div>
<!-- header-sticky end -->
</div>
<div class="counter-sub-margin" id="item-4-4">
<!-- slider start -->
<h2 class="section-sub-heading">Changing slider</h2>
<div class="row-mtm10 d-flex flex-column">
<p>We are using two slider now (i.e. swiper, slick... etc.).</p>
<p>These both several vendor css & js files store in <strong>plugin.min.css</strong> & <strong>plugin.min.js</strong> respectively.</p>
<p>If you want to change any features then edit js from <strong>theme.js</strong> files.</p>
</div>
<!-- slider end -->
<div class="counter-sup-num mst-30">
<div class="row row-mtm">
<!-- swiper-slider start -->
<div class="col-12" id="item-4-5-2">
<h2 class="section-sub-heading">Swiper slider</h2>
<div class="row-mtm10 d-flex flex-column">
<p>Swiper slider file structure is as follows:</p>
</div>
<div class="mst-15">
<img src="assets/image/content/change_swiper.jpg" class="img-fluid" alt="change_swiper">
</div>
</div>
<!-- swiper-slider end -->
<!-- slick-slider start -->
<div class="col-12" id="item-4-5-1">
<h2 class="section-sub-heading">Slick slider</h2>
<div class="row-mtm10 d-flex flex-column">
<p>Slickl slider file structure is as follows:</p>
</div>
<div class="mst-15">
<img src="assets/image/content/change_slick.jpg" class="img-fluid" alt="change_slick">
</div>
</div>
<!-- slick-slider end -->
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="counter-num" id="item-5">
<div class="row-mtm d-flex flex-column">
<div class="counter-margin">
<!-- source start -->
<h2 class="section-heading">Sources & credits</h2>
<div class="intro-content">
<h6 class="font-16">Our source has given in below structure</h6>
<div class="mst-20">
<div class="row-mtm10 d-flex flex-column">
<p>We've used the following source as listed.</p>
</div>
<div class="source-files mst-15">
<ol class="source-files-ul row-mtm10 d-flex flex-column meb-0 psl-17">
<li class="source-files-li">
<span>Google fonts</span>
</li>
<li class="source-files-li">
<span>Bootstrap</span>
</li>
<li class="source-files-li">
<span>jQuery</span>
</li>
<li class="source-files-li">
<span>Magnific Popup</span>
</li>
<li class="source-files-li">
<span>Waypoints js</span>
</li>
<li class="source-files-li">
<span>Swiper slider</span>
</li>
<li class="source-files-li">
<span>Slick slider</span>
</li>
<li class="source-files-li">
<span>Smooth scroll</span>
</li>
<li class="source-files-li">
<span>Zoom</span>
</li>
<li class="source-files-li">
<span>Card</span>
</li>
<li class="source-files-li">
<span>Ckeditor5 classic</span>
</li>
<li class="source-files-li">
<span>Html2canvas</span>
</li>
<li class="source-files-li">
<span>Jspdf</span>
</li>
<li class="source-files-li">
<span>Animate</span>
</li>
<li class="source-files-li">
<span>Remix icon</span>
</li>
<li class="source-files-li">
<span>Other custom source css (i.e. color, margin, padding, other-property,... etc.)</span>
</li>
</ol>
</div>
</div>
</div>
<!-- source end -->
</div>
</div>
</div>
<div class="counter-num" id="item-6">
<div class="row-mtm d-flex flex-column">
<div class="counter-margin">
<!-- source start -->
<h2 class="section-heading">Support</h2>
<div class="intro-content">
<h6 class="font-16">Our support always available for our client</h6>
<div class="mst-20">
<div class="row-mtm10 d-flex flex-column">
<p>Thank you for purchasing our template.</p>
<p>If you have any questions that are beyond the scope of this help file, please feel free to open a new ticket at <a href="mailto:spacingtech10@gmail.com" class="secondary-color text-decoration-underline" target="_blank">spacingtech10@gmail.com</a> respectively.</p>
</div>
</div>
</div>
<!-- source end -->
</div>
</div>
</div>
</div>
</section>
</div>
</div>
</div>
</div>
</main>
<!-- footer start -->
<footer id="footer" class="position-sticky bottom-0 body-bg ptb-10 text-center bst">
<div class="container">
<p>Powered by <a href="https://themeforest.net/user/spacingtech_webify/portfolio" class="secondary-color text-decoration-underline">spacingtech</a><sup>TM</sup></p>
</div>
</footer>
<!-- footer end -->
<!-- back-to-top start -->
<a href="#" id="top" class="secondary-btn position-fixed d-flex align-items-center justify-content-center z-1 opacity-0 invisible rounded-circle lh-1" aria-label="Back to top"><i class="ri-arrow-up-line"></i></a>
<!-- back-to-top end -->
<!-- plugin js -->
<script src="assets/js/plugin.js" defer></script>
<!-- theme js -->
<script src="assets/js/theme.js" defer></script>
</body>
</html>

View File

@ -0,0 +1,482 @@
/*----------------------------------[Table of contents]----------------------------------
# root css
# cart-page css
# wishlist-page css
# invoice css
# checkout css
# account-page css
# empty css
# track-page css
# ticket-create-edit css
# ticket-page css
# ticket-info page css
# extra css
---------------------------------------------------------------------------------------*/
/************************************* root css start *************************************/
/*=====================================
root
=====================================*/
:root {
--bs-card-ratio: 58%;
--bs-card-sm-ratio: 49.02%;
--bs-card-md-ratio: 60.61%;
--bs-card-lg-ratio: 72%;
--bs-card-xl-ratio: 59.51%;
}
.jp-card .ratio::before {
padding-top: var(--bs-card-ratio);
}
@media (min-width: 576px) {
.jp-card .ratio::before {
padding-top: var(--bs-card-sm-ratio);
}
}
@media (min-width: 768px) {
.jp-card .ratio::before {
padding-top: var(--bs-card-md-ratio);
}
}
@media (min-width: 992px) {
.jp-card .ratio::before {
padding-top: var(--bs-card-lg-ratio);
}
}
@media (min-width: 1200px) {
.jp-card .ratio::before {
padding-top: var(--bs-card-xl-ratio);
}
}
/************************************* root css end *************************************/
/************************************* cart-page css start *************************************/
/*====================================
cart-page discount css
====================================*/
@media (min-width: 768px) {
.cart-orderview .cart-info .cart-detail .cart-detail-form .cart-detail-field input.cart-dis-input {
border-radius: var(--border-radius) 0px 0px var(--border-radius);
}
.cart-orderview .cart-info .cart-detail .cart-detail-form .cart-detail-field button.cart-dis-btn {
border-radius: 0px var(--border-radius) var(--border-radius) 0px;
}
}
/************************************* cart-page css end *************************************/
/************************************* wishlist-page css start *************************************/
/*====================================
wish-note-cart css
====================================*/
.wish-table .wish-table-data .wish-table-info .wish-note-content .wish-textarea textarea[name].focus {
border-color: var(--primary-font-color);
}
/************************************* wishlist-page css end *************************************/
/************************************* invoice css start *************************************/
/*====================================
invoice css
====================================*/
.invoice .invoice-table {
overflow-x: hidden;
}
.invoice .invoice-table>* {
overflow-x: auto;
scrollbar-width: thin;
-webkit-scrollbar-width: thin;
}
.invoice .invoice-table>*::-webkit-scrollbar-track {
background-color: #eeeeee;
}
.invoice .invoice-table>*::-webkit-scrollbar-thumb {
background-color: #c1c1c1;
}
.invoice .invoice-table>*::-webkit-scrollbar-thumb:hover {
background-color: var(--primary-font-color);
}
@media (min-width: 1200px) {
.invoice .invoice-table>* {
-webkit-scrollbar-width: unset;
scrollbar-width: unset;
max-width: unset;
overflow-x: unset;
}
}
/*====================================
invoice-table-block-row css
====================================*/
.invoice .invoice-table .invoice-table-block .invoice-table-block-row {
width: calc(100% + 33.33%);
}
@media (min-width: 425px) {
.invoice .invoice-table .invoice-table-block .invoice-table-block-row {
width: calc(100% + 0%);
}
}
/*====================================
invoice-print css
====================================*/
@media print {
body {
height: 100%;
padding-top: 0px!important;
}
header, .breadcrumb-area, footer, a#top, .bottom-menu {
display: none!important;
}
.container, .plr-15, .plr-md-30 {
padding-left: 0px;
padding-right: 0px;
}
.container {
max-width: 100%;
}
.section-ptb {
padding-top: 0px;
padding-bottom: 0px;
}
.border-full {
border: none;
}
.invoice .invoice-button {
display: none;
}
}
/************************************* invoice css end *************************************/
/************************************* checkout css start *************************************/
/*====================================
checkout orderview css
====================================*/
.checkout-summary .checkout-orderview h6 span::before {
content: "(";
}
.checkout-summary .checkout-orderview h6 span::after {
content: ")";
}
/* checkout item-img css */
.checkout-summary .checkout-orderview .checkitem-content .checkitem-img span.checkitem-qty {
top: -10px;
right: -10px;
height: 20px;
width: 20px;
}
/*====================================
checkout method css
====================================*/
.check-method .check-method-option .check-method-content .check-method-radio span a.pickup-availability {
border-bottom: 1px solid;
}
/* checkout-method btn css */
.apple-btn, .google-btn, .bank-btn {
color: var(--extra-font-color);
background-color: #000000;
border: 2px solid #000000;
}
.paypal-btn {
color: #003087;
background-color: #ffc439;
border: 2px solid #ffc439;
}
.apple-btn, .google-btn, .bank-btn, .paypal-btn {
gap: 5px;
-webkit-transition: background-color 0.3s ease-in-out,border-color 0.3s ease-in-out;
transition: background-color 0.3s ease-in-out,border-color 0.3s ease-in-out;
}
.apple-btn:hover, .google-btn:hover, .bank-btn:hover {
background-color: #3c4043;
border-color: #3c4043;
}
.paypal-btn:hover {
background-color: #f1a900;
border-color: #f1a900;
}
/*====================================
pickup-availability-modal css
====================================*/
@media (min-width: 768px) {
.pickup-availability-modal .modal-dialog {
max-width: 750px;
}
}
/* pickup-availability-warehouse css */
.pickup-availability-modal .pickup-availability-modal-content .pickup-availability-warehouse .pickup-warehouse-detail .pickup-warehouse-location a span {
border-bottom: 1px solid;
}
.pickup-availability-modal .pickup-availability-modal-content .pickup-availability-warehouse .pickup-warehouse-detail .pickup-warehouse-available {
position: relative;
z-index: 1;
}
.pickup-availability-modal .pickup-availability-modal-content .pickup-availability-warehouse .pickup-warehouse-detail .pickup-warehouse-available::before {
content: "";
position: absolute;
inset: 0;
background-color: var(--primary-font-color);
opacity: 0.1;
z-index: -1;
}
/************************************* checkout css end *************************************/
/************************************* account-page css start *************************************/
/*====================================
account-page author css
====================================*/
.account-page .ap-info .ap-profile a:nth-child(even) {
background-color: var(--extra-bgcolor);
}
.account-page .ap-info .ap-profile a span.ap-count {
width: 20px;
height: 20px;
}
/************************************* account-page css end *************************************/
/************************************* empty css start *************************************/
/*====================================
empty-info css
====================================*/
.empty-info img {
-webkit-filter: grayscale(1) opacity(0.3);
filter: grayscale(1) opacity(0.3);
}
/************************************* empty css end *************************************/
/************************************* track-page css start *************************************/
/*====================================
track-record css
====================================*/
ul.track-ul li.track-li {
padding: 0px 0px 30px;
position: relative;
z-index: 1;
}
ul.track-ul li.track-li:last-child {
padding: 0px;
}
ul.track-ul li.track-li::after {
content: "";
position: absolute;
top: 64px;
left: 30px;
width: 1px;
height: calc(100% - 64px);
background-color: rgba(var(--border-color),var(--border-opacity));
z-index: -1;
}
ul.track-ul li.track-li:last-child::after {
display: none;
}
ul.track-ul li.track-li.active::after {
background-color: var(--primary-font-color);
}
ul.track-ul li.track-li .track-icon-text span.track-icon {
color: var(--heading-font-color);
background-color: var(--body-bgcolor);
border: 1px solid rgba(var(--border-color),var(--border-opacity));
}
ul.track-ul li.track-li.active .track-icon-text span.track-icon {
color: var(--extra-font-color);
background-color: var(--primary-font-color);
border-color: var(--primary-font-color);
}
ul.track-ul li.track-li.active-next .track-icon-text span.track-icon {
color: var(--primary-font-color);
border-color: var(--primary-font-color);
}
/************************************* track-page css end *************************************/
/************************************* ticket-create-edit css start *************************************/
/*====================================
ckeditor css
====================================*/
.editor-creator .ck.ck-toolbar,
.editor-creator .ck.ck-dropdown__panel {
background-color: var(--extra-bgcolor);
}
.editor-creator .ck.ck-editor__main>.ck-editor__editable {
border-top-width: 1px;
}
.editor-creator .ck.ck-toolbar,
.editor-creator .ck.ck-dropdown__panel,
.editor-creator .ck.ck-editor__main>.ck-editor__editable:not(.ck-focused) {
border-color: rgba(var(--border-color),var(--border-opacity));
}
.editor-creator .ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-toolbar,
.editor-creator .ck.ck-editor__top .ck-sticky-panel .ck-toolbar.ck-rounded-corners,
.editor-creator .ck-rounded-corners .ck.ck-dropdown__panel,
.editor-creator .ck.ck-dropdown__panel.ck-rounded-corners,
.editor-creator .ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list,
.editor-creator .ck.ck-dropdown .ck-dropdown__panel .ck-list.ck-rounded-corners,
.editor-creator .ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button,
.editor-creator .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button.ck-rounded-corners,
.editor-creator .ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button,
.editor-creator .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button.ck-rounded-corners,
.editor-creator .ck-rounded-corners .ck.ck-button,
.editor-creator .ck-rounded-corners a.ck.ck-button,
.editor-creator .ck.ck-button.ck-rounded-corners,
.editor-creator a.ck.ck-button.ck-rounded-corners,
.editor-creator .ck-rounded-corners .ck.ck-editor__main>.ck-editor__editable,
.editor-creator .ck.ck-editor__main>.ck-editor__editable.ck-rounded-corners {
border-radius: var(--border-radius);
}
.editor-creator .ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-toolbar,
.editor-creator .ck.ck-editor__top .ck-sticky-panel .ck-toolbar.ck-rounded-corners,
.editor-creator .ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button,
.editor-creator .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button.ck-rounded-corners {
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
.editor-creator .ck.ck-dropdown__panel.ck-dropdown__panel_se,
.editor-creator .ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list,
.editor-creator .ck.ck-dropdown .ck-dropdown__panel .ck-list.ck-rounded-corners,
.editor-creator .ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button,
.editor-creator .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button.ck-rounded-corners {
border-top-left-radius: 0;
}
.editor-creator .ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button,
.editor-creator .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button.ck-rounded-corners,
.editor-creator .ck-rounded-corners .ck.ck-editor__main>.ck-editor__editable,
.editor-creator .ck.ck-editor__main>.ck-editor__editable.ck-rounded-corners {
border-top-left-radius: 0;
border-top-right-radius: 0;
}
.editor-creator .ck.ck-toolbar .ck.ck-toolbar__separator {
background: rgba(var(--border-color),var(--border-opacity));
}
.editor-creator .ck.ck-dropdown__panel,
.editor-creator .ck.ck-editor__editable:not(.ck-editor__nested-editable).ck-focused {
box-shadow: none;
}
.editor-creator .ck.ck-editor__editable_inline {
height: 300px;
padding: 0px 15px;
}
.editor-creator .ck.ck-editor__main p {
margin-top: 10px;
}
.editor-creator .ck.ck-editor__main ul {
list-style: unset;
margin-top: 10px;
padding-left: 16px;
}
/************************************* ticket-create-edit css end *************************************/
/************************************* ticket-page css start *************************************/
/*====================================
ticket-header css
====================================*/
.ticket-content .ticket-header {
position: relative;
}
.ticket-content .ticket-header::before,
.ticket-content .ticket-header::after {
content: "";
position: absolute;
bottom: -15px;
width: 30px;
height: 30px;
background-color: var(--body-bgcolor);
z-index: 1;
border-radius: 100%;
}
.ticket-content .ticket-header::before {
left: -15px;
}
.ticket-content .ticket-header::after {
right: -15px;
}
/*====================================
ticket-body css
====================================*/
.ticket-content .ticket-body {
position: relative;
}
.ticket-content .ticket-body::before {
content: "";
position: absolute;
top: 0px;
left: 0;
right: 0;
height: 1px;
background-image: linear-gradient(90deg, rgba(var(--border-color),var(--border-opacity)), rgba(var(--border-color),var(--border-opacity)) 75%, transparent 75%, transparent 100%);
background-size: 16px 1px;
}
/************************************* ticket-page css end *************************************/
/************************************* ticket-info page css start *************************************/
/*====================================
ticket-view css
====================================*/
.ti-view .ti-view-info .ti-image ul.ti-img-ul li.ti-img-li .ti-ss button {
top: -4px;
right: -4px;
}
.ti-view .ti-view-info .ti-point ul {
list-style-type: disc;
padding-left: 17px;
}
.ti-view .ti-view-info .ti-point ul li {
margin-top: 7px;
}
.ti-view .ti-view-info .ti-point ul li:first-child {
margin-top: 0px;
}
.ti-view .ti-view-info .ti-point ul li::marker {
color: var(--heading-font-color);
}
/*====================================
ticket-chat css
====================================*/
.ti-reply-info .ti-chat .ti-chat-col .ti-chat-reply .ti-content-info .ti-content ul {
list-style-type: disc;
padding-left: 17px;
}
.ti-reply-info .ti-chat .ti-chat-col .ti-chat-reply .ti-content-info .ti-content ul li {
margin-top: 7px;
}
.ti-reply-info .ti-chat .ti-chat-col .ti-chat-reply .ti-content-info .ti-content ul li:first-child {
margin-top: 0px;
}
.ti-reply-info .ti-chat .ti-chat-col .ti-chat-reply .ti-content-info .ti-content ul li::marker {
color: var(--heading-font-color);
}
/************************************* ticket-info page css end *************************************/
/************************************* extra css start *************************************/
/*====================================
st-field-btn css
====================================*/
button.st-field-btn span.st-field-icon {
width: 20px;
height: 20px;
}
/*====================================
st-label css
====================================*/
.st-small-label {
color: var(--extra-font-color);
font-size: 10px;
padding: 3px 5px;
text-transform: uppercase;
border-radius: var(--border-radius);
line-height: 1;
}
.st-big-label {
color: var(--extra-font-color);
font-size: 12px;
min-width: 64px;
padding: 4px 5px;
text-align: center;
text-transform: uppercase;
border-radius: var(--border-radius);
line-height: 1;
}
/************************************* extra css end *************************************/

View File

@ -0,0 +1,94 @@
/*----------------------------------[Table of contents]----------------------------------
# blog-sidebar css
# article css
# search-blog css
---------------------------------------------------------------------------------------*/
/************************************* blog-sidebar css start *************************************/
/*====================================
blog-post-sidebar css
====================================*/
.blog-sidebar-wrap .blog-post-sidebar {
padding-top: 30px;
margin-top: 30px;
border-top: 1px solid rgba(var(--border-color),var(--border-opacity));
}
.blog-sidebar-wrap .blog-post-sidebar:first-child {
padding: 0px;
margin: 0px;
border: none;
}
/*====================================
blog-recent css
====================================*/
.blog-sidebar-wrap .blog-post-sidebar .blog-recent-post .blog-img-content .blog-recent-content span a {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
white-space: normal;
}
/*====================================
blog-tag css
====================================*/
ul.tag-ul li.tag-li a {
-webkit-transition: color 0.3s ease-in-out,background-color 0.3s ease-in-out,border-color 0.3s ease-in-out;
transition: color 0.3s ease-in-out,background-color 0.3s ease-in-out,border-color 0.3s ease-in-out;
}
ul.tag-ul li.tag-li a:hover {
color: var(--extra-font-color);
background-color: var(--secondary-font-color);
border-color: var(--secondary-font-color);
}
ul.tag-ul li.tag-li a::before {
content: "#";
}
/************************************* blog-sidebar css end *************************************/
/************************************* article css start *************************************/
/*====================================
article-comments css
====================================*/
.article-comments form .article-cmt .article-cmt-wrap .article-cmt-wrapper .article-cmt-content .article-cmt-red ul li .article-edit-reply button {
position: relative;
margin-left: 10px;
padding-left: 10px;
}
.article-comments form .article-cmt .article-cmt-wrap .article-cmt-wrapper .article-cmt-content .article-cmt-red ul li .article-edit-reply button:first-child {
margin: 0px;
padding: 0px;
}
.article-comments form .article-cmt .article-cmt-wrap .article-cmt-wrapper .article-cmt-content .article-cmt-red ul li .article-edit-reply button::before {
content: "";
position: absolute;
top: 0;
bottom: 0;
left: 0;
width: 1px;
background-color: rgba(var(--border-color),var(--border-opacity));
}
.article-comments form .article-cmt .article-cmt-wrap .article-cmt-wrapper .article-cmt-content .article-cmt-red ul li .article-edit-reply button:first-child::before {
display: none;
}
/************************************* article css end *************************************/
/************************************* search-blog css start *************************************/
/*====================================
search-blog css
====================================*/
.search-page .search-bar-page form.search-form .section-title h2 span::before {
content: '"';
}
.search-page .search-bar-page form.search-form .section-title h2 span::after {
content: '"';
}
/* search-blog result css */
.blog-post-sidebar .search-bar .search-results ul.search-ul,
.search-page .search-bar .search-results ul.search-ul {
max-height: 153px;
}
/************************************* search-blog css end *************************************/

View File

@ -0,0 +1,94 @@
/*----------------------------------[Table of contents]----------------------------------
# blog-sidebar css
# article css
# search-blog css
---------------------------------------------------------------------------------------*/
/************************************* blog-sidebar css start *************************************/
/*====================================
blog-post-sidebar css
====================================*/
.blog-sidebar-wrap .blog-post-sidebar {
padding-top: 30px;
margin-top: 30px;
border-top: 1px solid rgba(var(--border-color),var(--border-opacity));
}
.blog-sidebar-wrap .blog-post-sidebar:first-child {
padding: 0px;
margin: 0px;
border: none;
}
/*====================================
blog-recent css
====================================*/
.blog-sidebar-wrap .blog-post-sidebar .blog-recent-post .blog-img-content .blog-recent-content span a {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
white-space: normal;
}
/*====================================
blog-tag css
====================================*/
ul.tag-ul li.tag-li a {
-webkit-transition: color 0.3s ease-in-out,background-color 0.3s ease-in-out,border-color 0.3s ease-in-out;
transition: color 0.3s ease-in-out,background-color 0.3s ease-in-out,border-color 0.3s ease-in-out;
}
ul.tag-ul li.tag-li a:hover {
color: var(--extra-font-color);
background-color: var(--secondary-font-color);
border-color: var(--secondary-font-color);
}
ul.tag-ul li.tag-li a::before {
content: "#";
}
/************************************* blog-sidebar css end *************************************/
/************************************* article css start *************************************/
/*====================================
article-comments css
====================================*/
.article-comments form .article-cmt .article-cmt-wrap .article-cmt-wrapper .article-cmt-content .article-cmt-red ul li .article-edit-reply button {
position: relative;
margin-left: 10px;
padding-left: 10px;
}
.article-comments form .article-cmt .article-cmt-wrap .article-cmt-wrapper .article-cmt-content .article-cmt-red ul li .article-edit-reply button:first-child {
margin: 0px;
padding: 0px;
}
.article-comments form .article-cmt .article-cmt-wrap .article-cmt-wrapper .article-cmt-content .article-cmt-red ul li .article-edit-reply button::before {
content: "";
position: absolute;
top: 0;
bottom: 0;
left: 0;
width: 1px;
background-color: rgba(var(--border-color),var(--border-opacity));
}
.article-comments form .article-cmt .article-cmt-wrap .article-cmt-wrapper .article-cmt-content .article-cmt-red ul li .article-edit-reply button:first-child::before {
display: none;
}
/************************************* article css end *************************************/
/************************************* search-blog css start *************************************/
/*====================================
search-blog css
====================================*/
.search-page .search-bar-page form.search-form .section-title h2 span::before {
content: '"';
}
.search-page .search-bar-page form.search-form .section-title h2 span::after {
content: '"';
}
/* search-blog result css */
.blog-post-sidebar .search-bar .search-results ul.search-ul,
.search-page .search-bar .search-results ul.search-ul {
max-height: 153px;
}
/************************************* search-blog css end *************************************/

View File

@ -0,0 +1,94 @@
/*----------------------------------[Table of contents]----------------------------------
# blog-sidebar css
# article css
# search-blog css
---------------------------------------------------------------------------------------*/
/************************************* blog-sidebar css start *************************************/
/*====================================
blog-post-sidebar css
====================================*/
.blog-sidebar-wrap .blog-post-sidebar {
padding-top: 30px;
margin-top: 30px;
border-top: 1px solid rgba(var(--border-color),var(--border-opacity));
}
.blog-sidebar-wrap .blog-post-sidebar:first-child {
padding: 0px;
margin: 0px;
border: none;
}
/*====================================
blog-recent css
====================================*/
.blog-sidebar-wrap .blog-post-sidebar .blog-recent-post .blog-img-content .blog-recent-content span a {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
white-space: normal;
}
/*====================================
blog-tag css
====================================*/
ul.tag-ul li.tag-li a {
-webkit-transition: color 0.3s ease-in-out,background-color 0.3s ease-in-out,border-color 0.3s ease-in-out;
transition: color 0.3s ease-in-out,background-color 0.3s ease-in-out,border-color 0.3s ease-in-out;
}
ul.tag-ul li.tag-li a:hover {
color: var(--extra-font-color);
background-color: var(--secondary-font-color);
border-color: var(--secondary-font-color);
}
ul.tag-ul li.tag-li a::before {
content: "#";
}
/************************************* blog-sidebar css end *************************************/
/************************************* article css start *************************************/
/*====================================
article-comments css
====================================*/
.article-comments form .article-cmt .article-cmt-wrap .article-cmt-wrapper .article-cmt-content .article-cmt-red ul li .article-edit-reply button {
position: relative;
margin-left: 10px;
padding-left: 10px;
}
.article-comments form .article-cmt .article-cmt-wrap .article-cmt-wrapper .article-cmt-content .article-cmt-red ul li .article-edit-reply button:first-child {
margin: 0px;
padding: 0px;
}
.article-comments form .article-cmt .article-cmt-wrap .article-cmt-wrapper .article-cmt-content .article-cmt-red ul li .article-edit-reply button::before {
content: "";
position: absolute;
top: 0;
bottom: 0;
left: 0;
width: 1px;
background-color: rgba(var(--border-color),var(--border-opacity));
}
.article-comments form .article-cmt .article-cmt-wrap .article-cmt-wrapper .article-cmt-content .article-cmt-red ul li .article-edit-reply button:first-child::before {
display: none;
}
/************************************* article css end *************************************/
/************************************* search-blog css start *************************************/
/*====================================
search-blog css
====================================*/
.search-page .search-bar-page form.search-form .section-title h2 span::before {
content: '"';
}
.search-page .search-bar-page form.search-form .section-title h2 span::after {
content: '"';
}
/* search-blog result css */
.blog-post-sidebar .search-bar .search-results ul.search-ul,
.search-page .search-bar .search-results ul.search-ul {
max-height: 153px;
}
/************************************* search-blog css end *************************************/

View File

@ -0,0 +1,94 @@
/*----------------------------------[Table of contents]----------------------------------
# blog-sidebar css
# article css
# search-blog css
---------------------------------------------------------------------------------------*/
/************************************* blog-sidebar css start *************************************/
/*====================================
blog-post-sidebar css
====================================*/
.blog-sidebar-wrap .blog-post-sidebar {
padding-top: 30px;
margin-top: 30px;
border-top: 1px solid rgba(var(--border-color),var(--border-opacity));
}
.blog-sidebar-wrap .blog-post-sidebar:first-child {
padding: 0px;
margin: 0px;
border: none;
}
/*====================================
blog-recent css
====================================*/
.blog-sidebar-wrap .blog-post-sidebar .blog-recent-post .blog-img-content .blog-recent-content span a {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
white-space: normal;
}
/*====================================
blog-tag css
====================================*/
ul.tag-ul li.tag-li a {
-webkit-transition: color 0.3s ease-in-out,background-color 0.3s ease-in-out,border-color 0.3s ease-in-out;
transition: color 0.3s ease-in-out,background-color 0.3s ease-in-out,border-color 0.3s ease-in-out;
}
ul.tag-ul li.tag-li a:hover {
color: var(--extra-font-color);
background-color: var(--secondary-font-color);
border-color: var(--secondary-font-color);
}
ul.tag-ul li.tag-li a::before {
content: "#";
}
/************************************* blog-sidebar css end *************************************/
/************************************* article css start *************************************/
/*====================================
article-comments css
====================================*/
.article-comments form .article-cmt .article-cmt-wrap .article-cmt-wrapper .article-cmt-content .article-cmt-red ul li .article-edit-reply button {
position: relative;
margin-left: 10px;
padding-left: 10px;
}
.article-comments form .article-cmt .article-cmt-wrap .article-cmt-wrapper .article-cmt-content .article-cmt-red ul li .article-edit-reply button:first-child {
margin: 0px;
padding: 0px;
}
.article-comments form .article-cmt .article-cmt-wrap .article-cmt-wrapper .article-cmt-content .article-cmt-red ul li .article-edit-reply button::before {
content: "";
position: absolute;
top: 0;
bottom: 0;
left: 0;
width: 1px;
background-color: rgba(var(--border-color),var(--border-opacity));
}
.article-comments form .article-cmt .article-cmt-wrap .article-cmt-wrapper .article-cmt-content .article-cmt-red ul li .article-edit-reply button:first-child::before {
display: none;
}
/************************************* article css end *************************************/
/************************************* search-blog css start *************************************/
/*====================================
search-blog css
====================================*/
.search-page .search-bar-page form.search-form .section-title h2 span::before {
content: '"';
}
.search-page .search-bar-page form.search-form .section-title h2 span::after {
content: '"';
}
/* search-blog result css */
.blog-post-sidebar .search-bar .search-results ul.search-ul,
.search-page .search-bar .search-results ul.search-ul {
max-height: 153px;
}
/************************************* search-blog css end *************************************/

View File

@ -0,0 +1,94 @@
/*----------------------------------[Table of contents]----------------------------------
# blog-sidebar css
# article css
# search-blog css
---------------------------------------------------------------------------------------*/
/************************************* blog-sidebar css start *************************************/
/*====================================
blog-post-sidebar css
====================================*/
.blog-sidebar-wrap .blog-post-sidebar {
padding-top: 30px;
margin-top: 30px;
border-top: 1px solid rgba(var(--border-color),var(--border-opacity));
}
.blog-sidebar-wrap .blog-post-sidebar:first-child {
padding: 0px;
margin: 0px;
border: none;
}
/*====================================
blog-recent css
====================================*/
.blog-sidebar-wrap .blog-post-sidebar .blog-recent-post .blog-img-content .blog-recent-content span a {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
white-space: normal;
}
/*====================================
blog-tag css
====================================*/
ul.tag-ul li.tag-li a {
-webkit-transition: color 0.3s ease-in-out,background-color 0.3s ease-in-out,border-color 0.3s ease-in-out;
transition: color 0.3s ease-in-out,background-color 0.3s ease-in-out,border-color 0.3s ease-in-out;
}
ul.tag-ul li.tag-li a:hover {
color: var(--extra-font-color);
background-color: var(--secondary-font-color);
border-color: var(--secondary-font-color);
}
ul.tag-ul li.tag-li a::before {
content: "#";
}
/************************************* blog-sidebar css end *************************************/
/************************************* article css start *************************************/
/*====================================
article-comments css
====================================*/
.article-comments form .article-cmt .article-cmt-wrap .article-cmt-wrapper .article-cmt-content .article-cmt-red ul li .article-edit-reply button {
position: relative;
margin-left: 10px;
padding-left: 10px;
}
.article-comments form .article-cmt .article-cmt-wrap .article-cmt-wrapper .article-cmt-content .article-cmt-red ul li .article-edit-reply button:first-child {
margin: 0px;
padding: 0px;
}
.article-comments form .article-cmt .article-cmt-wrap .article-cmt-wrapper .article-cmt-content .article-cmt-red ul li .article-edit-reply button::before {
content: "";
position: absolute;
top: 0;
bottom: 0;
left: 0;
width: 1px;
background-color: rgba(var(--border-color),var(--border-opacity));
}
.article-comments form .article-cmt .article-cmt-wrap .article-cmt-wrapper .article-cmt-content .article-cmt-red ul li .article-edit-reply button:first-child::before {
display: none;
}
/************************************* article css end *************************************/
/************************************* search-blog css start *************************************/
/*====================================
search-blog css
====================================*/
.search-page .search-bar-page form.search-form .section-title h2 span::before {
content: '"';
}
.search-page .search-bar-page form.search-form .section-title h2 span::after {
content: '"';
}
/* search-blog result css */
.blog-post-sidebar .search-bar .search-results ul.search-ul,
.search-page .search-bar .search-results ul.search-ul {
max-height: 153px;
}
/************************************* search-blog css end *************************************/

View File

@ -0,0 +1,362 @@
/*----------------------------------[Table of contents]----------------------------------
# other-swiper-wrap css
# other-tab-title css
# other-tab css
# index css
# about-us css
# about-us2 css
# contact-us css
# faqs css
# store css
# coming-soon css
# keyframes css
---------------------------------------------------------------------------------------*/
/************************************* other-swiper-wrap css start *************************************/
/*========================================
other-swiper-wrap swiper-buttons css
========================================*/
.other-swiper-wrap {
position: relative;
}
.other-swiper-wrap .swiper-buttons {
margin-top: 30px;
text-align: center;
line-height: 0;
}
.other-swiper-wrap .swiper-buttons .swiper-buttons-wrap {
display: inline-flex;
}
@media (min-width: 768px) {
.other-swiper-wrap .swiper-buttons {
margin-top: 0px;
}
.other-swiper-wrap .swiper-buttons .swiper-buttons-wrap {
display: block;
}
}
/* other-swiper-wrap swiper-buttons navigation css */
.other-swiper-wrap .swiper-buttons button {
color: var(--secondary-font-color);
font-size: 16px;
width: 40px;
height: 40px;
background-color: var(--extra-font-color);
margin-right: 10px;
border: 1px solid rgba(var(--border-color),var(--border-opacity));
border-radius: 100%;
box-shadow: rgba(var(--box-shadow-outer),var(--box-shadow-outer-opacity));
-webkit-transition: color 0.3s ease-in-out,background-color 0.3s ease-in-out,border-color 0.3s ease-in-out;
transition: color 0.3s ease-in-out,background-color 0.3s ease-in-out,border-color 0.3s ease-in-out;
}
.other-swiper-wrap .swiper-buttons button:last-child:last-child {
margin: 0px;
}
.other-swiper-wrap .swiper-buttons button:hover {
color: var(--extra-font-color);
background-color: var(--primary-font-color);
border-color: var(--primary-font-color);
}
@media (min-width: 768px) {
.other-swiper-wrap .swiper-buttons button {
position: absolute;
z-index: 1;
margin-right: 0px;
}
.other-swiper-wrap .swiper-buttons button.swiper-prev {
left: 0;
transform: translateX(-50%);
}
.other-swiper-wrap .swiper-buttons button.swiper-next {
right: 0;
transform: translateX(50%);
}
}
@media (min-width: 1200px) {
.other-swiper-wrap .swiper-buttons button {
width: 48px;
height: 48px;
}
}
/*========================================
other-swiper-wrap swiper-dot css
========================================*/
.other-swiper-wrap .swiper-dots {
margin-top: 30px;
line-height: 0;
}
@media (min-width: 1200px) {
.other-swiper-wrap .swiper-dots {
margin-top: 50px;
}
}
/* other-swiper-wrap swiper-dot-pagination css */
.other-swiper-wrap .swiper-dots .swiper-pagination {
width: unset;
position: unset;
display: flex;
flex-wrap: wrap;
justify-content: center;
margin: -5px 0px 0px -5px;
}
.other-swiper-wrap .swiper-dots .swiper-pagination span {
width: 10px;
height: 10px;
background-color: transparent;
margin: 5px 0px 0px 5px;
opacity: 1;
border: 1px solid var(--primary-font-color);
}
.other-swiper-wrap .swiper-dots .swiper-pagination span.swiper-pagination-bullet-active {
background-color: var(--primary-font-color);
border-color: var(--primary-font-color);
}
/************************************* other-swiper-wrap css end *************************************/
/************************************* other-tab-title css start *************************************/
/*====================================
other-tab-title css
====================================*/
.other-tab-title span {
border-bottom: 2px solid;
}
/************************************* other-tab-title css end *************************************/
/************************************* other-tab css start *************************************/
/*====================================
other-tab title css
====================================*/
.other-tab a[aria-expanded="true"] {
color: var(--primary-font-color);
}
.other-tab a[aria-expanded="true"] span.other-tab-icon i::before {
content: "\f1af";
}
/************************************* other-tab css end *************************************/
/************************************* index css start *************************************/
/*====================================
question-index css
====================================*/
.question-index {
counter-reset: Questions;
}
.question-index .question-sub-index::before {
counter-increment: Questions;
content: "Q." counter(Questions) " ";
}
/*====================================
number-index css
====================================*/
.number-index {
counter-reset: number;
}
.number-index .number-sub-index {
counter-reset: sub-number;
}
.number-index .number-sub-index::before {
counter-increment: number;
content: counter(number) ". ";
}
.number-index .p-number::before {
counter-increment: sub-number;
content: counter(number) "."counter(sub-number)" ";
}
/************************************* index css end *************************************/
/************************************* about-us css start *************************************/
/*====================================
about-testimonial css
====================================*/
.about-testimonial {
position: relative;
z-index: 1;
}
.about-testimonial::after {
content: "";
position: absolute;
bottom: 0;
right: 0;
left: 0;
height: var(--section-before-height);
background-color: var(--extra-bgcolor);
z-index: -1;
}
/* about-testimonial swiper css */
.about-testimonial .about-testislider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 100%;
}
/* about-testi-content css */
.about-testimonial .about-testislider p {
line-height: 28px;
}
@media (min-width: 1200px) {
.about-testimonial .about-testislider p {
line-height: 36px;
}
}
/*====================================
about-us-banner css
====================================*/
.about-us-banner {
position: relative;
z-index: 1;
}
.about-us-banner::after {
content: "";
position: absolute;
top: 0;
right: 0;
left: 0;
height: 50%;
background-color: var(--extra-bgcolor);
z-index: -1;
}
/************************************* about-us css end *************************************/
/************************************* about-us2 css start *************************************/
/*====================================
about-story-video css
====================================*/
.about-us .about-story-video {
z-index: 1;
}
.about-us .about-story-video::after {
content: "";
position: absolute;
left: 0;
right: 0;
height: 1px;
background-color: rgba(var(--border-color),var(--border-opacity));
z-index: -1;
}
/************************************* about-us2 css end *************************************/
/************************************* contact-us css start *************************************/
/*====================================
contact-location css
====================================*/
.contact-location.section-overlay {
margin-top: -30px;
}
/* contact-location-location swiper css */
.contact-location .contact-locationslider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 100%;
}
@media (min-width: 768px) {
.contact-location .contact-locationslider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 50%;
}
}
@media (min-width: 1200px) {
.contact-location .contact-locationslider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 33.33%;
}
}
/*====================================
contact-map css
====================================*/
.contact-map iframe {
height: 320px;
}
@media (min-width: 768px) {
.contact-map iframe {
height: 400px;
}
}
@media (min-width: 1200px) {
.contact-map iframe {
height: 500px;
}
}
/************************************* contact-us css start *************************************/
/************************************* faqs css start *************************************/
/*====================================
faqs-collapse-group css
====================================*/
.faqs-collapse-group>* {
border-top: 1px solid rgba(var(--border-color),var(--border-opacity));
}
.faqs-collapse-group>*:first-child {
border-top: none;
}
/************************************* faqs css end *************************************/
/************************************* store css start *************************************/
/*====================================
store css
====================================*/
.store .store-content .store-info {
margin-top: -12px;
}
.store .store-content .store-info>* {
margin-top: 12px;
}
/*====================================
store-alert-msg css
====================================*/
.store .store-search .store-alert-msg {
display: none;
--bs-bg-opacity: 0.1;
--bs-border-opacity: 0.1;
border: 1px solid;
}
.store .store-search .store-alert-msg.active {
display: block;
}
/*====================================
store-data css
====================================*/
.store .store-data {
display: none;
}
.store .store-data.active {
display: block;
}
/************************************* store css end *************************************/
/************************************* coming-soon css start *************************************/
/*====================================
coming-soon-news css
====================================*/
@media (min-width: 768px) {
.coming-news form.coming-form .coming-wrap input.coming-notify-input {
border-radius: var(--border-radius) 0px 0px var(--border-radius);
}
.coming-news form.coming-form .coming-wrap button.coming-notify-btn {
border-radius: 0px var(--border-radius) var(--border-radius) 0px;
}
}
/************************************* coming-soon css end *************************************/
/************************************* keyframes css start *************************************/
/*====================================
blinking keyframes css
====================================*/
.blinking {
-webkit-animation: blinking 2s cubic-bezier(.4, 0, .6, 1) infinite;
animation: blinking 2s cubic-bezier(.4, 0, .6, 1) infinite;
}
@-webkit-keyframes blinking {
50% {
opacity: 0.5;
}
}
@keyframes blinking {
50% {
opacity: 0.5;
}
}
/************************************* keyframes css end *************************************/

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,626 @@
/*----------------------------------[Table of contents]----------------------------------
# product-slider css
# product-detail-info css
# share-modal css
# product-frequently-bought css
# product-detail-tab css
# product-detail-how-to-use css
# product-detail-key-ingredients css
# product-detail-review css
# product-comparison css
# keyframes css
---------------------------------------------------------------------------------------*/
/************************************* product-slider css start *************************************/
/*====================================
product-slider-big swiper css
====================================*/
.product-detail-slider .product-img-big .product-swiper .swiper:not(.swiper-initialized) .swiper-slide:not([style]),
.product-detail-slider .product-img-big.slider-big-h .swiper:not(.swiper-initialized) .swiper-slide:not([style]),
.product-detail-slider .product-img-big.slider-big-v .swiper:not(.swiper-initialized) .swiper-slide:not([style]),
.product-detail-slider .product-img-big.slider-big-s .swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 100%;
}
/*====================================
product-img-big css
====================================*/
/* slider-big product-item-img css */
@media (min-width: 1200px) {
.product-detail-slider .product-img-big .product-swiper-slide .product-item-img:hover span.pro-zoom img.zoomImg {
cursor: crosshair;
}
}
/* slider-big navigation css */
.product-detail-slider .product-img-big .swiper-buttons button.swiper-prev {
left: 15px;
}
.product-detail-slider .product-img-big .swiper-buttons button.swiper-next {
right: 15px;
}
.product-detail-slider .product-img-big .swiper-buttons button[disabled] {
opacity: 0.5;
pointer-events: none;
}
/* slider-big dots css */
.product-detail-slider .product-img-big .swiper-dots .swiper-pagination {
width: unset;
position: unset;
display: flex;
flex-wrap: wrap;
justify-content: center;
margin: -5px 0px 0px -5px;
}
.product-detail-slider .product-img-big .swiper-dots .swiper-pagination span {
width: 10px;
height: 10px;
background-color: transparent;
margin: 5px 0px 0px 5px;
opacity: 1;
border: 1px solid var(--primary-font-color);
}
.product-detail-slider .product-img-big .swiper-dots .swiper-pagination span.swiper-pagination-bullet-active {
background-color: var(--primary-font-color);
border-color: var(--primary-font-color);
}
/*====================================
product-slider-small swiper css
====================================*/
.product-detail-slider .product-img-small.slider-small-h .swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 25%;
}
.product-detail-slider .product-img-small.slider-small-v .swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 25%;
}
@media (min-width: 576px) {
.product-detail-slider .product-img-small.slider-small-v .swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 100%;
}
}
/*====================================
product-img-small css
====================================*/
.product-detail-slider .product-img-small .product-swiper-slide .product-item-img {
border: 1px solid transparent;
}
.product-detail-slider .product-img-small .product-swiper-slide .product-item-img:hover,
.product-detail-slider .product-img-small .product-swiper-slide.swiper-slide-thumb-active .product-item-img {
border-color: var(--heading-font-color);
}
/************************************* product-slider css end *************************************/
/************************************* product-detail-info css start *************************************/
/*====================================
product-ratting css
====================================*/
.product-detail-info .product-ratting a.pro-review span.review-ratting {
margin-left: -2.5px;
margin-right: -2.5px;
}
.product-detail-info .product-ratting a.pro-review span.review-ratting>* {
padding-left: 2.5px;
padding-right: 2.5px;
}
.product-detail-info .product-ratting a.pro-review span.review-ratting span.review-average {
display: inline;
font-size: var(--body-font-size);
}
/*====================================
product-price css
====================================*/
.product-detail-info .product-price .pro-price-box span.discount-price::before {
content: "(";
}
.product-detail-info .product-price .pro-price-box span.discount-price::after {
content: ")";
}
/*====================================
product-stock css
====================================*/
.product-detail-info .product-stock span.stock-fill,
.product-detail-info .product-stock span.stock-empty {
position: relative;
padding-left: 20px;
}
.product-detail-info .product-stock span.stock-fill::before,
.product-detail-info .product-stock span.stock-fill::after,
.product-detail-info .product-stock span.stock-empty::before,
.product-detail-info .product-stock span.stock-empty::after {
content: "";
position: absolute;
--bs-bg-opacity: 1;
border-radius: 50%;
}
.product-detail-info .product-stock span.stock-fill::before,
.product-detail-info .product-stock span.stock-empty::before {
top: 6px;
left: 4px;
width: 8px;
height: 8px;
}
.product-detail-info .product-stock span.stock-fill::after,
.product-detail-info .product-stock span.stock-empty::after {
top: 2px;
left: 0;
width: 16px;
height: 16px;
border: 2px solid;
--bs-border-opacity: 0.3;
}
.product-detail-info .product-stock span.stock-fill::before {
background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity));
}
.product-detail-info .product-stock span.stock-empty::before {
background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity));
}
.product-detail-info .product-stock span.stock-fill::after {
border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity));
}
.product-detail-info .product-stock span.stock-empty::after {
border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity));
}
/* product-stock-bar css */
.product-detail-info .product-stock .product-stock-bar {
position: relative;
width: 100%;
height: 4px;
background-color: rgba(var(--border-color), var(--border-opacity));
--border-opacity: 0.2;
}
.product-detail-info .product-stock .product-stock-bar::after {
content: "";
position: absolute;
inset: 0;
--bs-bg-opacity: 1;
}
.product-detail-info .product-stock .product-stock-bar.product-stock-fill::after {
width: 66%;
background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity));
}
.product-detail-info .product-stock .product-stock-bar.product-stock-empty::after {
width: 9%;
background-color: rgba(var(--bs-danger-rgb),var(--bs-bg-opacity));
}
/*====================================
product-quantity-action css
====================================*/
.product-detail-info .product-quantity-action .product-quantity-wishlist {
margin-top: -15px;
margin-left: -7.5px;
margin-right: -7.5px;
}
.product-detail-info .product-quantity-action .product-quantity-wishlist>* {
margin-top: 15px;
padding-left: 7.5px;
padding-right: 7.5px;
}
.product-detail-info .product-quantity-action .product-quantity-wishlist .product-quantity .js-qty-wrapper .js-qty-wrap {
align-items: center;
}
.product-detail-info .product-quantity-action .product-quantity-wishlist .product-quantity .js-qty-wrapper .js-qty-wrap,
.product-detail-info .product-quantity-action .product-quantity-wishlist .product-quantity .js-qty-wrapper .js-qty-wrap button.js-qty-adjust,
.product-detail-info .product-quantity-action .product-quantity-wishlist .product-quantity .js-qty-wrapper .js-qty-wrap input.js-qty-num {
height: 40px;
}
.product-detail-info .product-quantity-action .product-quantity-wishlist .product-notify-stock a {
padding-left: 0px;
padding-right: 0px;
}
.product-detail-info .product-quantity-action .product-action button,
.product-detail-info .product-quantity-action .product-action a {
padding-left: 15px;
padding-right: 15px;
}
/*====================================
product-preorder css
====================================*/
.product-detail-info .product-preorder {
--bs-bg-opacity: 0.1;
--bs-border-opacity: 0.1;
border: 1px solid;
}
/*====================================
product-service css
====================================*/
.product-detail-info .product-service>*,
.product-detail-service .product-service>* {
position: relative;
z-index: 1;
}
.product-detail-info .product-service>*::before,
.product-detail-info .product-service>*::after,
.product-detail-service .product-service>*::before,
.product-detail-service .product-service>*::after {
content: "";
position: absolute;
top: 34px;
width: calc(50% - 16px);
height: 2px;
background-color: var(--heading-font-color);
z-index: -1;
}
.product-detail-info .product-service>*::before,
.product-detail-service .product-service>*::before {
left: 0;
}
.product-detail-info .product-service>*::after,
.product-detail-service .product-service>*::after {
right: 0;
}
.product-detail-info .product-service>*:first-child::before,
.product-detail-info .product-service>*:last-child::after,
.product-detail-service .product-service>*:first-child::before,
.product-detail-service .product-service>*:last-child::after {
display: none;
}
@media (min-width: 992px) {
.product-detail-service .product-service>*:first-child::before,
.product-detail-service .product-service>*:last-child::after {
display: block;
}
}
/************************************* product-detail-info css end *************************************/
/************************************* share-modal css start *************************************/
/*====================================
share-modal css
====================================*/
@media (min-width: 768px) {
.share-modal .share-modal-content .product-link input {
border-radius: var(--border-radius) 0px 0px var(--border-radius);
}
.share-modal .share-modal-content .product-link button {
border-radius: 0px var(--border-radius) var(--border-radius) 0px;
}
}
/************************************* share-modal css end *************************************/
/************************************* product-frequently-bought css start *************************************/
/*====================================
frequent-image css
====================================*/
.frequent .frequent-group form .frequent-detail .frequent-image ul {
margin-left: -15px;
margin-right: -15px;
}
.frequent .frequent-group form .frequent-detail .frequent-image ul>* {
padding-left: 15px;
padding-right: 15px;
}
.frequent .frequent-group form .frequent-detail .frequent-image ul li {
position: relative;
}
.frequent .frequent-group form .frequent-detail .frequent-image ul li::before {
content: "\f4b2";
font-family: remixicon !important;
font-size: 16px;
position: absolute;
top: 50%;
left: 0;
transform: translate(-50%, -50%);
}
.frequent .frequent-group form .frequent-detail .frequent-image ul li:first-child::before {
display: none;
}
.frequent .frequent-group form .frequent-detail .frequent-image ul li span.freq-img.active img {
border-color: var(--heading-font-color);
}
/*====================================
frequent-info css
====================================*/
.frequent .frequent-group form .frequent-detail .frequent-info .frequent-content a span {
border-bottom: 1px solid var(--heading-font-color);
}
.frequent .frequent-group form .frequent-detail .frequent-info .frequent-content a[aria-expanded="true"] i {
transform: scaleY(-1);
}
/************************************* product-frequently-bought css end *************************************/
/************************************* product-detail-tab css start *************************************/
/*====================================
product-tab-nav css
====================================*/
.product-tab .product-tab-nav ul.nav-tabs {
margin-left: -7.5px;
margin-right: -7.5px;
}
.product-tab .product-tab-nav ul.nav-tabs>* {
padding-left: 7.5px;
padding-right: 7.5px;
}
@media(min-width: 768px) {
.product-tab .product-tab-nav ul.nav-tabs {
margin-left: -15px;
margin-right: -15px;
}
.product-tab .product-tab-nav ul.nav-tabs>* {
padding-left: 15px;
padding-right: 15px;
}
}
/*====================================
horizontal-tab css
====================================*/
.product-tab.horizontal-tab .product-tab-nav ul.nav-tabs {
margin-top: -11px;
}
.product-tab.horizontal-tab .product-tab-nav ul.nav-tabs>* {
margin-top: 11px;
}
.product-tab.horizontal-tab .product-tab-nav ul.nav-tabs li a {
color: var(--heading-font-color);
border-bottom: 2px solid transparent;
-webkit-transition: color 0.3s ease-in-out,border-color 0.3s ease-in-out;
transition: color 0.3s ease-in-out,border-color 0.3s ease-in-out;
}
.product-tab.horizontal-tab .product-tab-nav ul.nav-tabs li a.active {
color: var(--primary-font-color);
border-color: var(--primary-font-color);
}
/*====================================
collapse-tab css
====================================*/
.product-tab .collapse-tab button[aria-expanded="false"] {
color: var(--heading-font-color);
}
.product-tab .collapse-tab button[aria-expanded="true"] {
color: var(--primary-font-color);
}
.product-tab .collapse-tab button[aria-expanded="true"] span.tab-icon i::before {
content: "\f1af";
}
/*====================================
vertical-tab css
====================================*/
.product-tab.vertical-tab .product-tab-nav ul.nav-tabs {
margin-top: -16px;
}
.product-tab.vertical-tab .product-tab-nav ul.nav-tabs>* {
margin-top: 16px;
}
.product-tab.vertical-tab .product-tab-nav ul.nav-tabs li a {
position: relative;
z-index: 1;
}
.product-tab.vertical-tab .product-tab-nav ul.nav-tabs li a span {
color: var(--heading-font-color);
border-bottom: 2px solid transparent;
-webkit-transition: color 0.3s ease-in-out,border-color 0.3s ease-in-out;
transition: color 0.3s ease-in-out,border-color 0.3s ease-in-out;
}
.product-tab.vertical-tab .product-tab-nav ul.nav-tabs li a.active span {
color: var(--primary-font-color);
border-color: var(--primary-font-color);
}
.product-tab.vertical-tab .product-tab-nav ul.nav-tabs li a::after {
content: "";
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 1px;
background-color: rgba(var(--border-color),var(--border-opacity));
z-index: -1;
}
/*====================================
product-tab-title css
====================================*/
.product-tab h6.product-tab-title span {
border-bottom: 2px solid;
}
/************************************* product-detail-tab css end *************************************/
/************************************* product-detail-how-to-use css start *************************************/
/*========================================
product-detail-how-to-use css
========================================*/
.product-how-to-use-info ul {
list-style-type: number;
padding-left: 17px;
}
/************************************* product-detail-how-to-use css end *************************************/
/************************************* product-detail-key-ingredients css start *************************************/
/*========================================
product-detail-key-ingredients css
========================================*/
.product-key-ingredients-info ul {
list-style-type: disc;
padding-left: 17px;
}
/************************************* product-detail-key-ingredients css end *************************************/
/************************************* product-detail-review css start *************************************/
/*====================================
product-review css
====================================*/
.product-review .product-review-count span.product-review-stars {
width: 30px;
}
.product-review .product-review-count span.product-review-progress {
width: calc(100% - 100px);
height: 5px;
position: relative;
z-index: 1;
}
.product-review .product-review-count span.product-review-progress::after {
content: "";
position: absolute;
inset: 0;
background-color: var(--heading-font-color);
z-index: -1;
opacity: 0.2;
}
.product-review .product-review-count span.product-review-number {
width: 50px;
}
/*====================================
product-review-form css
====================================*/
.product-review .product-review-form .product-review-ratting .product-ratting span.review-ratting span.review-star i {
cursor: pointer;
}
/*====================================
product-review-comment css
====================================*/
.product-review .product-review-comment .product-review-detail .product-reviewer-info span {
position: relative;
z-index: 1;
}
.product-review .product-review-comment .product-review-detail .product-reviewer-info span::after {
content: "";
position: absolute;
inset: 0;
background-color: var(--primary-font-color);
opacity: 0.1;
z-index: -1;
}
/************************************* product-detail-review css end *************************************/
/************************************* product-comparison css start *************************************/
/*====================================
product-comparison css
====================================*/
.product-comparison .product-compare-area {
overflow-x: hidden;
}
.product-comparison .product-compare-area>* {
overflow-x: auto;
scrollbar-width: thin;
-webkit-scrollbar-width: thin;
}
.product-comparison .product-compare-area>*::-webkit-scrollbar-track {
background-color: #eeeeee;
}
.product-comparison .product-compare-area>*::-webkit-scrollbar-thumb {
background-color: #c1c1c1;
}
.product-comparison .product-compare-area>*::-webkit-scrollbar-thumb:hover {
background-color: var(--primary-font-color);
}
@media (min-width: 1200px) {
.product-comparison .product-compare-area>* {
-webkit-scrollbar-width: unset;
scrollbar-width: unset;
max-width: unset;
overflow-x: unset;
}
}
/*====================================
product-compare-block-row css
====================================*/
.product-comparison .product-compare-area .product-compare-block .product-compare-block-row {
width: calc(100% + 33.33%);
}
@media (min-width: 420px) {
.product-comparison .product-compare-area .product-compare-block .product-compare-block-row {
width: calc(100% + 0%);
}
}
/*====================================
product-compare-col css
====================================*/
.product-comparison .product-compare-area .product-compare-block .product-compare-row .product-compare-col .flex-nowrap>* {
position: relative;
}
.product-comparison .product-compare-area .product-compare-block .product-compare-row .product-compare-col .flex-nowrap>*::before {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
height: 1px;
background-color: rgba(var(--border-color),var(--border-opacity));
}
/*====================================
compare-modal css
====================================*/
@media (min-width: 768px) {
.compare-modal .modal-dialog {
max-width: 750px;
}
}
/* compare-product-results css */
.compare-modal .compare-search .compare-product-results {
max-height: 386px;
overflow-x: hidden;
overflow-y: auto;
-webkit-scrollbar-width: thin;
scrollbar-width: thin;
}
.compare-modal .compare-search .compare-product-results::-webkit-scrollbar {
width: 2px;
}
.compare-modal .compare-search .compare-product-results::-webkit-scrollbar-track {
background-color: #eeeeee;
}
.compare-modal .compare-search .compare-product-results::-webkit-scrollbar-thumb {
background-color: #c1c1c1;
}
.compare-modal .compare-search .compare-product-results::-webkit-scrollbar-thumb:hover {
background-color: var(--primary-font-color);
}
/* compare-product-label css */
.compare-modal .compare-search .compare-product-results label.compare-product-label {
display: block;
position: relative;
-webkit-user-select: none;
user-select: none;
cursor: pointer;
}
.compare-modal .compare-search .compare-product-results label.compare-product-label input.cust-checkbox {
position: absolute;
top: 0;
left: 0;
width: 0;
height: 0;
opacity: 0;
cursor: pointer;
}
.compare-modal .compare-search .compare-product-results label.compare-product-label:hover .compare-product-content,
.compare-modal .compare-search .compare-product-results label.compare-product-label input.cust-checkbox:checked ~ .compare-product-content {
border-color: var(--primary-font-color);
}
/************************************* product-comparison css end *************************************/
/************************************* keyframes css start *************************************/
/*====================================
blinking keyframes css
====================================*/
.blinking {
-webkit-animation: blinking 2s cubic-bezier(.4, 0, .6, 1) infinite;
animation: blinking 2s cubic-bezier(.4, 0, .6, 1) infinite;
}
@-webkit-keyframes blinking {
50% {
opacity: 0.5;
}
}
@keyframes blinking {
50% {
opacity: 0.5;
}
}
/************************************* keyframes css end *************************************/

View File

@ -0,0 +1,286 @@
/*----------------------------------[Table of contents]----------------------------------
# newsletter-modal css
# home-slider css
# category-slider css
# banner-area css
# service css
# deal-banner css
# testimonial css
---------------------------------------------------------------------------------------*/
/************************************* newsletter-modal css start *************************************/
/*====================================
newsletter-modal css
====================================*/
@media (min-width: 768px) {
.newsletter-modal .newsletter-info .newsletter-content .newsletter-form .news-wrap input {
border-radius: var(--border-radius) 0px 0px var(--border-radius);
}
.newsletter-modal .newsletter-info .newsletter-content .newsletter-form .news-wrap button {
border-radius: 0px var(--border-radius) var(--border-radius) 0px;
}
}
/************************************* newsletter-modal css end *************************************/
/************************************* home-slider css start *************************************/
/*====================================
home-slider swiper css
====================================*/
.slider-content .home-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 100%;
}
/*====================================
slider-content css
====================================*/
.slider-content .home-slider h2 {
line-height: 1.2;
}
/*====================================
slider-content transition css
====================================*/
.slider-content .home-slider.swiper .swiper-slide .slider-image span,
.slider-content .home-slider.swiper .swiper-slide .slider-image h2,
.slider-content .home-slider.swiper .swiper-slide .slider-image a {
opacity: 0;
}
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image span,
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image h2,
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image a {
opacity: 1;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
-webkit-animation-name: fadeInUp;
animation-name: fadeInUp;
}
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image span {
-webkit-animation-delay: 0.3s;
animation-delay: 0.3s;
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
}
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image h2 {
-webkit-animation-delay: 0.6s;
animation-delay: 0.6s;
-webkit-animation-duration: 0.6s;
animation-duration: 0.6s;
}
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image a {
-webkit-animation-delay: 0.9s;
animation-delay: 0.9s;
-webkit-animation-duration: 0.9s;
animation-duration: 0.9s;
}
/*====================================
slider-navigation css
====================================*/
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button {
color: var(--primary-font-color);
position: relative;
z-index: 1;
border-radius: 50%;
overflow: hidden;
-webkit-transition: color 0.3s ease-in-out;
transition: color 0.3s ease-in-out;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-prev {
left: 5px;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-next {
right: 5px;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button:hover {
color: var(--extra-font-color);
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button::after {
content: "";
position: absolute;
inset: 0;
background-color: var(--primary-font-color);
z-index: -1;
opacity: 0.1;
-webkit-transition: opacity 0.3s ease-in-out;
transition: opacity 0.3s ease-in-out;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button:hover::after {
opacity: 1;
}
@media (min-width: 1400px) {
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-prev {
left: 10px;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-next {
right: 10px;
}
}
@media (min-width: 1600px) {
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-prev {
left: 30px;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-next {
right: 30px;
}
}
/*====================================
slider-dot css
====================================*/
.slider-content .home-slider.swiper .swiper-dots .swiper-pagination {
width: unset;
position: unset;
margin: -5px 0px 0px -5px;
}
.slider-content .home-slider.swiper .swiper-dots .swiper-pagination span.swiper-pagination-bullet {
width: 10px;
height: 10px;
background-color: var(--primary-font-color);
margin: 5px 0px 0px 5px;
opacity: 0.1;
border: 1px solid var(--primary-font-color);
}
.slider-content .home-slider.swiper .swiper-dots .swiper-pagination span.swiper-pagination-bullet:hover,
.slider-content .home-slider.swiper .swiper-dots .swiper-pagination span.swiper-pagination-bullet.swiper-pagination-bullet-active {
opacity: 1;
}
/************************************* home-slider css end *************************************/
/************************************* category-slider css start *************************************/
/*====================================
category-slider swiper css
====================================*/
.category-slider .cat-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 50%;
}
@media (min-width: 768px) {
.category-slider .cat-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 33.33%;
}
}
@media (min-width: 992px) {
.category-slider .cat-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 25%;
}
}
@media (min-width: 1200px) {
.category-slider .cat-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 20%;
}
}
/*====================================
cat-block css
====================================*/
.category-slider .cat-slider .cat-block a.cat-img span.cat-icon {
transform: translate(-50%, calc(-50% + 5px));
opacity: 0;
visibility: hidden;
-webkit-transition: transform 0.3s ease-in-out,opacity 0.3s ease-in-out,visibility 0.3s ease-in-out,brightness 0.3s ease-in-out;
transition: transform 0.3s ease-in-out,opacity 0.3s ease-in-out,visibility 0.3s ease-in-out,brightness 0.3s ease-in-out;
}
.category-slider .cat-slider .cat-block:hover a.cat-img span.cat-icon {
transform: translate(-50%, -50%);
opacity: 1;
visibility: visible;
}
.category-slider .cat-slider .cat-block a.cat-img img {
-webkit-transform: translate(-5px, 5px) scale(1);
transform: translate(-5px, 5px) scale(1);
}
.category-slider .cat-slider .cat-block:hover a.cat-img img {
-webkit-transform: translate(0, 0) scale(1.1);
transform: translate(0, 0) scale(1.1);
-webkit-filter: brightness(0.80);
filter: brightness(0.80);
}
/************************************* category-slider css end *************************************/
/************************************* banner-area css start *************************************/
/*====================================
banner-area css
====================================*/
@media (min-width: 992px) {
.banner-area .banner-block img {
object-fit: cover;
object-position: center;
}
}
/************************************* banner-area css end *************************************/
/************************************* service css start *************************************/
/*====================================
service-content css
====================================*/
.service-area .service-content span.service-img {
-webkit-transition: background-color 0.3s ease-in-out,border-color 0.3s ease-in-out;
transition: background-color 0.3s ease-in-out,border-color 0.3s ease-in-out;
}
.service-area .service-content:hover span.service-img {
background-color: var(--primary-font-color);
}
.service-area .service-content span.service-img img {
-webkit-transition: opacity 0.3s ease-in-out,visibility 0.3s ease-in-out;
transition: opacity 0.3s ease-in-out,visibility 0.3s ease-in-out;
}
.service-area .service-content:hover span.service-img img.service-img1,
.service-area .service-content span.service-img img.service-img2 {
opacity: 0;
visibility: hidden;
}
.service-area .service-content:hover span.service-img img.service-img2 {
opacity: 1;
visibility: visible;
}
/************************************* service css end *************************************/
/************************************* deal-banner css start *************************************/
/*====================================
deal-banner css
====================================*/
@media (min-width: 992px) {
.deal-banner .banner-block img {
object-fit: cover;
object-position: center;
}
}
/*====================================
deal-timer css
====================================*/
.deal-banner .deal-timer ul>* {
position: relative;
}
.deal-banner .deal-timer ul>*::before {
content: ":";
color: var(--body-font-color);
font-size: 24px;
position: absolute;
left: -1.5px;
top: 0;
font-weight: var(--heading-font-weight);
line-height: 1;
}
.deal-banner .deal-timer ul>*:first-child::before {
display: none;
}
/************************************* deal-banner css start *************************************/
/************************************* testimonial css start *************************************/
/*====================================
testimonial slider-swiper css
====================================*/
.testimonial .testi-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 100%;
}
@media (min-width: 768px) {
.testimonial .testi-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 50%;
}
}
@media (min-width: 1200px) {
.testimonial .testi-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 33.33%;
}
}
/************************************* testimonial css end *************************************/

View File

@ -0,0 +1,300 @@
/*----------------------------------[Table of contents]----------------------------------
# newsletter-modal css
# home-slider css
# category-slider css
# service css
# home-about-product css
# deal-area css
# testimonial css
---------------------------------------------------------------------------------------*/
/************************************* newsletter-modal css start *************************************/
/*====================================
newsletter-modal css
====================================*/
@media (min-width: 768px) {
.newsletter-modal .newsletter-info .newsletter-content .newsletter-form .news-wrap input {
border-radius: var(--border-radius) 0px 0px var(--border-radius);
}
.newsletter-modal .newsletter-info .newsletter-content .newsletter-form .news-wrap button {
border-radius: 0px var(--border-radius) var(--border-radius) 0px;
}
}
/************************************* newsletter-modal css end *************************************/
/************************************* home-slider css start *************************************/
/*====================================
home-slider swiper css
====================================*/
.slider-content .home-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 100%;
}
/*====================================
slider-content transition css
====================================*/
.slider-content .home-slider.swiper .swiper-slide .slider-image span,
.slider-content .home-slider.swiper .swiper-slide .slider-image h2,
.slider-content .home-slider.swiper .swiper-slide .slider-image a {
opacity: 0;
}
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image span,
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image h2,
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image a {
opacity: 1;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
-webkit-animation-name: fadeInUp;
animation-name: fadeInUp;
}
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image span {
-webkit-animation-delay: 0.3s;
animation-delay: 0.3s;
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
}
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image h2 {
-webkit-animation-delay: 0.6s;
animation-delay: 0.6s;
-webkit-animation-duration: 0.6s;
animation-duration: 0.6s;
}
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image a {
-webkit-animation-delay: 0.9s;
animation-delay: 0.9s;
-webkit-animation-duration: 0.9s;
animation-duration: 0.9s;
}
/*====================================
slider-navigation css
====================================*/
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button {
color: var(--secondary-font-color);
position: relative;
z-index: 1;
border-radius: 50%;
overflow: hidden;
-webkit-transition: color 0.3s ease-in-out;
transition: color 0.3s ease-in-out;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-prev {
left: 5px;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-next {
right: 5px;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button:hover {
color: var(--secondary-font-color);
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button::after {
content: "";
position: absolute;
inset: 0;
background-color: var(--extra-font-color);
z-index: -1;
opacity: 0.3;
-webkit-transition: opacity 0.3s ease-in-out;
transition: opacity 0.3s ease-in-out;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button:hover::after {
opacity: 1;
}
@media (min-width: 1400px) {
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-prev {
left: 10px;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-next {
right: 10px;
}
}
@media (min-width: 1600px) {
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-prev {
left: 30px;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-next {
right: 30px;
}
}
/*====================================
slider-dot css
====================================*/
.slider-content .home-slider.swiper .swiper-dots .swiper-pagination {
width: unset;
position: unset;
margin: -5px 0px 0px -5px;
}
.slider-content .home-slider.swiper .swiper-dots .swiper-pagination span.swiper-pagination-bullet {
width: 10px;
height: 10px;
background-color: var(--secondary-font-color);
margin: 5px 0px 0px 5px;
opacity: 0.1;
border: 1px solid var(--secondary-font-color);
}
.slider-content .home-slider.swiper .swiper-dots .swiper-pagination span.swiper-pagination-bullet:hover,
.slider-content .home-slider.swiper .swiper-dots .swiper-pagination span.swiper-pagination-bullet.swiper-pagination-bullet-active {
opacity: 1;
}
/************************************* home-slider css end *************************************/
/************************************* category-slider css start *************************************/
/*====================================
category-slider swiper css
====================================*/
.category-slider .cat-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 50%;
}
@media (min-width: 768px) {
.category-slider .cat-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 33.33%;
}
}
/************************************* category-slider css end *************************************/
/************************************* service css start *************************************/
/*====================================
service-content css
====================================*/
.service-area .service-content span.service-img img {
-webkit-transition: transform 0.3s ease-in-out;
transition: transform 0.3s ease-in-out;
}
.service-area .service-content:hover span.service-img img {
transform: scaleX(-1);
}
/************************************* service css end *************************************/
/************************************* home-about-product css start *************************************/
/*====================================
home-about-product css
====================================*/
.home-about-product .home-about-product-text ul {
padding-top: 20px;
margin-top: -20px;
}
.home-about-product .home-about-product-text ul>* {
margin-top: 20px;
}
@media (min-width: 768px) {
.home-about-product .home-about-product-text ul {
padding-top: 50px;
margin-top: -30px;
}
.home-about-product .home-about-product-text ul>* {
margin-top: 30px;
}
}
@media (min-width: 1200px) {
.home-about-product .home-about-product-text ul {
padding-top: 100px;
margin-top: -50px;
}
.home-about-product .home-about-product-text ul>* {
margin-top: 50px;
}
}
/*====================================
home-about-product-text css
====================================*/
.home-about-product .home-about-product-text ul li span.home-about-product-line {
position: relative;
height: 1px;
z-index: 1;
background-color: rgba(var(--border-color), var(--border-opacity));
}
.home-about-product .home-about-product-text ul li span.home-about-product-line::after {
content: "\f3c1";
font-family: remixicon;
color: rgba(var(--border-color), 0.4);
font-size: 8px;
position: absolute;
height: 20px;
width: 20px;
background-color: var(--extra-font-color);
display: inline-flex;
align-items: center;
justify-content: center;
z-index: 1;
border: 1px solid rgba(var(--border-color), var(--border-opacity));
border-radius: 50%;
line-height: 1;
}
.home-about-product .home-about-product-text ul.home-about-product-ul-left li span.home-about-product-line::after,
.home-about-product .home-about-product-text ul.home-about-product-ul-right li span.home-about-product-line::after {
left: 0;
}
@media (min-width: 768px) {
.home-about-product .home-about-product-text ul.home-about-product-ul-left li span.home-about-product-line::after {
left: 100%;
}
.home-about-product .home-about-product-text ul.home-about-product-ul-right li span.home-about-product-line::after {
left: auto;
right: 100%;
}
}
/************************************* home-about-product css end *************************************/
/************************************* deal-area css start *************************************/
/*====================================
deal-area css
====================================*/
.deal-area .deal-timer ul>* {
position: relative;
}
.deal-area .deal-timer ul>*::before {
content: ":";
color: var(--heading-font-color);
font-size: 24px;
position: absolute;
top: -1px;
left: -2px;
font-weight: var(--heading-font-weight);
line-height: 1;
}
.deal-area .deal-timer ul>*:first-child::before {
display: none;
}
@media (min-width: 1200px) {
.deal-area .deal-timer ul>*::before {
top: 7px;
}
}
/*====================================
product slider-swiper css
====================================*/
.collection-wrap #deal-product-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 50%;
}
@media (min-width: 768px) {
.collection-wrap #deal-product-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 33.33%;
}
}
@media (min-width: 1200px) {
.collection-wrap #deal-product-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 50%;
}
}
/************************************* deal-area css start *************************************/
/************************************* testimonial css start *************************************/
/*====================================
testimonial slider-swiper css
====================================*/
.testimonial .testi-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 100%;
}
/*====================================
testi-content css
====================================*/
@media (min-width: 1200px) {
.testimonial .testi-slider .testi-content p {
line-height: 30px;
}
}
/************************************* testimonial css end *************************************/

View File

@ -0,0 +1,293 @@
/*----------------------------------[Table of contents]----------------------------------
# newsletter-modal css
# offer-text css
# home-slider css
# category-slider css
# service css
# testimonial css
# newsletter-area css
---------------------------------------------------------------------------------------*/
/************************************* newsletter-modal css start *************************************/
/*====================================
newsletter-modal css
====================================*/
@media (min-width: 768px) {
.newsletter-modal .newsletter-info .newsletter-content .newsletter-form .news-wrap input {
border-radius: var(--border-radius) 0px 0px var(--border-radius);
}
.newsletter-modal .newsletter-info .newsletter-content .newsletter-form .news-wrap button {
border-radius: 0px var(--border-radius) var(--border-radius) 0px;
}
}
/************************************* newsletter-modal css end *************************************/
/************************************* offer-text css start *************************************/
/*====================================
offer-text css
====================================*/
.offer-text a {
-webkit-transition: opacity 0.3s ease-in-out;
transition: opacity 0.3s ease-in-out;
}
.offer-text a:hover {
opacity: 0.7;
}
/*====================================
offer-text-marquee css
====================================*/
.offer-text .offer-text-marquee .offer-text-marquee-row {
-webkit-animation: slide-left 20s linear infinite;
animation: slide-left 20s linear infinite;
}
.offer-text:hover .offer-text-marquee .offer-text-marquee-row,
.offer-text:focus .offer-text-marquee .offer-text-marquee-row {
-webkit-animation-play-state: paused;
animation-play-state: paused
}
/************************************* offer-text css end *************************************/
/************************************* home-slider css start *************************************/
/*====================================
home-slider swiper css
====================================*/
.slider-content .home-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 100%;
}
/*====================================
slider-content css
====================================*/
.slider-content .home-slider h2 {
line-height: 1.06;
}
/*====================================
slider-content transition css
====================================*/
.slider-content .home-slider.swiper .swiper-slide .slider-image h2,
.slider-content .home-slider.swiper .swiper-slide .slider-image a {
opacity: 0;
}
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image h2,
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image a {
opacity: 1;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
-webkit-animation-name: fadeInUp;
animation-name: fadeInUp;
}
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image h2 {
-webkit-animation-delay: 0.3s;
animation-delay: 0.3s;
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
}
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image a {
-webkit-animation-delay: 0.6s;
animation-delay: 0.6s;
-webkit-animation-duration: 0.6s;
animation-duration: 0.6s;
}
/*====================================
slider-navigation css
====================================*/
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button {
color: var(--primary-font-color);
position: relative;
z-index: 1;
border-radius: 50%;
overflow: hidden;
-webkit-transition: color 0.3s ease-in-out;
transition: color 0.3s ease-in-out;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-prev {
left: 5px;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-next {
right: 5px;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button:hover {
color: var(--extra-font-color);
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button::after {
content: "";
position: absolute;
inset: 0;
background-color: var(--primary-font-color);
z-index: -1;
opacity: 0.1;
-webkit-transition: opacity 0.3s ease-in-out;
transition: opacity 0.3s ease-in-out;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button:hover::after {
opacity: 1;
}
@media (min-width: 1400px) {
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-prev {
left: 10px;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-next {
right: 10px;
}
}
@media (min-width: 1600px) {
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-prev {
left: 30px;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-next {
right: 30px;
}
}
/*====================================
slider-dot css
====================================*/
.slider-content .home-slider.swiper .swiper-dots .swiper-pagination {
width: unset;
position: unset;
margin: -5px 0px 0px -5px;
}
.slider-content .home-slider.swiper .swiper-dots .swiper-pagination span.swiper-pagination-bullet {
width: 10px;
height: 10px;
background-color: var(--primary-font-color);
margin: 5px 0px 0px 5px;
opacity: 0.1;
border: 1px solid var(--primary-font-color);
}
.slider-content .home-slider.swiper .swiper-dots .swiper-pagination span.swiper-pagination-bullet:hover,
.slider-content .home-slider.swiper .swiper-dots .swiper-pagination span.swiper-pagination-bullet.swiper-pagination-bullet-active {
opacity: 1;
}
/************************************* home-slider css end *************************************/
/************************************* category-slider css start *************************************/
/*====================================
category-slider swiper css
====================================*/
.category-slider .cat-wrap {
margin: 0px -7.5px;
}
.category-slider .cat-wrap .cat-slider.swiper {
padding: 0px 7.5px;
}
.category-slider .cat-wrap .cat-slider.swiper .swiper-slide {
padding: 15px 0px;
}
.category-slider .cat-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 100%;
}
@media (min-width: 768px) {
.category-slider .cat-wrap {
margin: 0px -15px;
}
.category-slider .cat-wrap .cat-slider.swiper {
padding: 0px 15px;
}
.category-slider .cat-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 50%;
}
}
@media (min-width: 992px) {
.category-slider .cat-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 33.33%;
}
}
/*====================================
cat-block css
====================================*/
.category-slider .cat-slider .cat-block .cat-content span.cat-bgimg {
width: 136px;
}
.category-slider .cat-slider .cat-block .cat-content span.cat-img {
width: 160px;
}
@media (min-width: 1200px) {
.category-slider .cat-slider .cat-block .cat-content span.cat-bgimg {
width: 168px;
}
.category-slider .cat-slider .cat-block .cat-content span.cat-img {
width: 184px;
}
}
@media (min-width: 1400px) {
.category-slider .cat-slider .cat-block .cat-content span.cat-bgimg {
width: 184px;
}
.category-slider .cat-slider .cat-block .cat-content span.cat-img {
width: 224px;
}
}
/************************************* category-slider css end *************************************/
/************************************* service css start *************************************/
/*====================================
service-content css
====================================*/
.service-area .service-content span.service-img img {
-webkit-transition: transform 0.3s ease-in-out;
transition: transform 0.3s ease-in-out;
}
.service-area .service-content:hover span.service-img img {
transform: scaleX(-1);
}
/************************************* service css end *************************************/
/************************************* testimonial css start *************************************/
/*====================================
testimonial slider-swiper css
====================================*/
.testimonial .testi-wrap {
margin: 0px -7.5px;
}
.testimonial .testi-wrap .testi-slider.swiper {
padding: 0px 7.5px;
}
.testimonial .testi-wrap .testi-slider.swiper .swiper-slide {
padding: 15px 0px;
}
.testimonial .testi-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 100%;
}
@media (min-width: 768px) {
.testimonial .testi-wrap {
margin: 0px -15px;
}
.testimonial .testi-wrap .testi-slider.swiper {
padding: 0px 15px;
}
.testimonial .testi-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 50%;
}
}
@media (min-width: 1200px) {
.testimonial .testi-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 33.33%;
}
}
/************************************* testimonial css end *************************************/
/************************************* newsletter-area css start *************************************/
/*====================================
newsletter-title css
====================================*/
.newsletter-area .newsletter-form .section-capture .section-title h2.section-heading {
color: var(--primary-font-color);
}
/*====================================
newsletter-form css
====================================*/
@media (min-width: 768px) {
.newsletter-area .newsletter-form form.news-form .news-wrap input {
border-radius: var(--border-radius) 0px 0px var(--border-radius);
}
.newsletter-area .newsletter-form form.news-form .news-wrap button {
border-radius: 0px var(--border-radius) var(--border-radius) 0px;
}
}
/************************************* newsletter-area css end *************************************/

View File

@ -0,0 +1,296 @@
/*----------------------------------[Table of contents]----------------------------------
# newsletter-modal css
# home-slider css
# category-slider css
# banner-area css
# testimonial css
# brand-logo css
# deal-area css
---------------------------------------------------------------------------------------*/
/************************************* newsletter-modal css start *************************************/
/*====================================
newsletter-modal css
====================================*/
@media (min-width: 768px) {
.newsletter-modal .newsletter-info .newsletter-content .newsletter-form .news-wrap input {
border-radius: var(--border-radius) 0px 0px var(--border-radius);
}
.newsletter-modal .newsletter-info .newsletter-content .newsletter-form .news-wrap button {
border-radius: 0px var(--border-radius) var(--border-radius) 0px;
}
}
/************************************* newsletter-modal css end *************************************/
/************************************* home-slider css start *************************************/
/*====================================
home-slider swiper css
====================================*/
.slider-content .home-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 100%;
}
/*====================================
slider-content transition css
====================================*/
.slider-content .home-slider.swiper .swiper-slide .slider-image span,
.slider-content .home-slider.swiper .swiper-slide .slider-image h2,
.slider-content .home-slider.swiper .swiper-slide .slider-image a {
opacity: 0;
}
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image span,
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image h2,
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image a {
opacity: 1;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
-webkit-animation-name: fadeInUp;
animation-name: fadeInUp;
}
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image span {
-webkit-animation-delay: 0.3s;
animation-delay: 0.3s;
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
}
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image h2 {
-webkit-animation-delay: 0.6s;
animation-delay: 0.6s;
-webkit-animation-duration: 0.6s;
animation-duration: 0.6s;
}
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image a {
-webkit-animation-delay: 0.9s;
animation-delay: 0.9s;
-webkit-animation-duration: 0.9s;
animation-duration: 0.9s;
}
/*====================================
slider-navigation css
====================================*/
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button {
color: var(--primary-font-color);
position: relative;
z-index: 1;
border-radius: 50%;
overflow: hidden;
-webkit-transition: color 0.3s ease-in-out;
transition: color 0.3s ease-in-out;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-prev {
left: 5px;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-next {
right: 5px;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button:hover {
color: var(--extra-font-color);
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button::after {
content: "";
position: absolute;
inset: 0;
background-color: var(--primary-font-color);
z-index: -1;
opacity: 0.1;
-webkit-transition: opacity 0.3s ease-in-out;
transition: opacity 0.3s ease-in-out;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button:hover::after {
opacity: 1;
}
@media (min-width: 1400px) {
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-prev {
left: 10px;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-next {
right: 10px;
}
}
@media (min-width: 1600px) {
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-prev {
left: 30px;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-next {
right: 30px;
}
}
/*====================================
slider-dot css
====================================*/
.slider-content .home-slider.swiper .swiper-dots .swiper-pagination {
width: unset;
position: unset;
margin: -5px 0px 0px -5px;
}
.slider-content .home-slider.swiper .swiper-dots .swiper-pagination span.swiper-pagination-bullet {
width: 10px;
height: 10px;
background-color: var(--primary-font-color);
margin: 5px 0px 0px 5px;
opacity: 0.1;
border: 1px solid var(--primary-font-color);
}
.slider-content .home-slider.swiper .swiper-dots .swiper-pagination span.swiper-pagination-bullet:hover,
.slider-content .home-slider.swiper .swiper-dots .swiper-pagination span.swiper-pagination-bullet.swiper-pagination-bullet-active {
opacity: 1;
}
/************************************* home-slider css end *************************************/
/************************************* category-slider css start *************************************/
/*====================================
category-slider swiper css
====================================*/
.category-slider .cat-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 100%;
}
@media (min-width: 768px) {
.category-slider .cat-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 50%;
}
}
@media (min-width: 1200px) {
.category-slider .cat-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 33.33%;
}
}
/*====================================
cat-block css
====================================*/
.category-slider .cat-slider .cat-block a.cat-img .cat-content {
-webkit-transition: background-color 0.3s ease-in-out;
transition: background-color 0.3s ease-in-out;
}
.category-slider .cat-slider .cat-block:hover a.cat-img .cat-content {
background-color: var(--primary-font-color);
}
.category-slider .cat-slider .cat-block a.cat-img .cat-content h6,
.category-slider .cat-slider .cat-block a.cat-img .cat-content span {
-webkit-transition: color 0.3s ease-in-out;
transition: color 0.3s ease-in-out;
}
.category-slider .cat-slider .cat-block:hover a.cat-img .cat-content h6,
.category-slider .cat-slider .cat-block:hover a.cat-img .cat-content span {
color: var(--extra-font-color);
}
/************************************* category-slider css end *************************************/
/************************************* banner-area css start *************************************/
/*====================================
banner-area css
====================================*/
.banner-area .banner-block a.banner-img .banner-content {
z-index: 1;
}
.banner-area .banner-block a.banner-img img {
-webkit-filter: brightness(0.60);
filter: brightness(0.60);
}
.banner-area .banner-block a.banner-img .banner-content::after {
content: "";
position: absolute;
inset: 0;
background-color: #000000;
opacity: 0.6;
z-index: -1;
}
/************************************* banner-area css end *************************************/
/************************************* testimonial css start *************************************/
/*====================================
testimonial slider-swiper css
====================================*/
.testimonial .testi-wrap {
margin: 0px -7.5px;
}
.testimonial .testi-wrap .testi-slider.swiper {
padding: 0px 7.5px;
}
.testimonial .testi-wrap .testi-slider.swiper .swiper-slide {
padding: 15px 0px;
}
.testimonial .testi-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 100%;
}
@media (min-width: 768px) {
.testimonial .testi-wrap {
margin: 0px -15px;
}
.testimonial .testi-wrap .testi-slider.swiper {
padding: 0px 15px;
}
.testimonial .testi-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 50%;
}
}
@media (min-width: 1200px) {
.testimonial .testi-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 33.33%;
}
}
/************************************* testimonial css end *************************************/
/************************************* brand-logo css start *************************************/
/*====================================
brand-logo swiper css
====================================*/
.brand-logo .brand-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 50%;
}
@media (min-width: 768px) {
.brand-logo .brand-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 33.33%;
}
}
@media (min-width: 1200px) {
.brand-logo .brand-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 25%;
}
}
/*====================================
brand-content css
====================================*/
@media (min-width: 1200px) {
.brand-logo .brand-slider .brand-content span.brand-img img {
-webkit-filter: opacity(0.3) grayscale(1);
filter: opacity(0.3) grayscale(1);
-webkit-transition: filter 0.3s ease-in-out;
transition: filter 0.3s ease-in-out;
}
.brand-logo .brand-slider .brand-content:hover span.brand-img img {
-webkit-filter: opacity(1) grayscale(0);
filter: opacity(1) grayscale(0);
}
}
/************************************* brand-logo css end *************************************/
/************************************* deal-area css start *************************************/
/*====================================
deal-area css
====================================*/
.deal-area .deal-timer ul>* {
position: relative;
}
.deal-area .deal-timer ul>*::before {
content: ":";
color: var(--heading-font-color);
font-size: 24px;
position: absolute;
top: -1px;
left: -2px;
font-weight: var(--heading-font-weight);
line-height: 1;
}
.deal-area .deal-timer ul>*:first-child::before {
display: none;
}
@media (min-width: 1200px) {
.deal-area .deal-timer ul>*::before {
top: 7px;
}
}
/************************************* deal-area css start *************************************/

View File

@ -0,0 +1,253 @@
/*----------------------------------[Table of contents]----------------------------------
# newsletter-modal css
# home-slider css
# category-slider css
# deal-area css
# service css
# testimonial css
---------------------------------------------------------------------------------------*/
/************************************* newsletter-modal css start *************************************/
/*====================================
newsletter-modal css
====================================*/
@media (min-width: 768px) {
.newsletter-modal .newsletter-info .newsletter-content .newsletter-form .news-wrap input {
border-radius: var(--border-radius) 0px 0px var(--border-radius);
}
.newsletter-modal .newsletter-info .newsletter-content .newsletter-form .news-wrap button {
border-radius: 0px var(--border-radius) var(--border-radius) 0px;
}
}
/************************************* newsletter-modal css end *************************************/
/************************************* home-slider css start *************************************/
/*====================================
home-slider swiper css
====================================*/
.slider-content .home-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 100%;
}
/*====================================
slider-image css
====================================*/
.slider-content .home-slider .slider-image .slide-img img {
-webkit-filter: brightness(0.40);
filter: brightness(0.40);
}
/*====================================
slider-content css
====================================*/
.slider-content .home-slider h2 {
line-height: 1.125;
}
/*====================================
slider-content transition css
====================================*/
.slider-content .home-slider.swiper .swiper-slide .slider-image span,
.slider-content .home-slider.swiper .swiper-slide .slider-image h2,
.slider-content .home-slider.swiper .swiper-slide .slider-image a {
opacity: 0;
}
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image span,
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image h2,
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image a {
opacity: 1;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
-webkit-animation-name: fadeInUp;
animation-name: fadeInUp;
}
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image span {
-webkit-animation-delay: 0.3s;
animation-delay: 0.3s;
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
}
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image h2 {
-webkit-animation-delay: 0.6s;
animation-delay: 0.6s;
-webkit-animation-duration: 0.6s;
animation-duration: 0.6s;
}
.slider-content .home-slider.swiper .swiper-slide.swiper-slide-active .slider-image a {
-webkit-animation-delay: 0.9s;
animation-delay: 0.9s;
-webkit-animation-duration: 0.9s;
animation-duration: 0.9s;
}
/*====================================
slider-navigation css
====================================*/
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button {
color: var(--extra-font-color);
position: relative;
z-index: 1;
border-radius: 50%;
overflow: hidden;
-webkit-transition: color 0.3s ease-in-out;
transition: color 0.3s ease-in-out;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-prev {
left: 5px;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-next {
right: 5px;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button:hover {
color: var(--primary-font-color);
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button::after {
content: "";
position: absolute;
inset: 0;
background-color: var(--extra-font-color);
z-index: -1;
opacity: 0.1;
-webkit-transition: opacity 0.3s ease-in-out;
transition: opacity 0.3s ease-in-out;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button:hover::after {
opacity: 1;
}
@media (min-width: 1400px) {
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-prev {
left: 10px;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-next {
right: 10px;
}
}
@media (min-width: 1600px) {
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-prev {
left: 30px;
}
.slider-content .home-slider.swiper .swiper-buttons .swiper-buttons-wrap button.swiper-next {
right: 30px;
}
}
/*====================================
slider-dot css
====================================*/
.slider-content .home-slider.swiper .swiper-dots .swiper-pagination {
width: unset;
position: unset;
margin: -5px 0px 0px -5px;
}
.slider-content .home-slider.swiper .swiper-dots .swiper-pagination span.swiper-pagination-bullet {
width: 10px;
height: 10px;
background-color: var(--extra-font-color);
margin: 5px 0px 0px 5px;
opacity: 0.3;
border: 1px solid var(--extra-font-color);
}
.slider-content .home-slider.swiper .swiper-dots .swiper-pagination span.swiper-pagination-bullet:hover,
.slider-content .home-slider.swiper .swiper-dots .swiper-pagination span.swiper-pagination-bullet.swiper-pagination-bullet-active {
opacity: 1;
}
/************************************* home-slider css end *************************************/
/************************************* category-slider css start *************************************/
/*====================================
category-slider swiper css
====================================*/
.category-slider .cat-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 100%;
}
@media (min-width: 768px) {
.category-slider .cat-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 50%;
}
}
@media (min-width: 1200px) {
.category-slider .cat-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 33.33%;
}
}
/*====================================
cat-block css
====================================*/
.category-slider .cat-slider .cat-block a.cat-img img {
-webkit-clip-path: polygon(60.41% 0, 100% 0, 100% 100%, 33.33% 100%);
clip-path: polygon(60.41% 0, 100% 0, 100% 100%, 33.33% 100%);
}
/************************************* category-slider css end *************************************/
/************************************* deal-area css start *************************************/
/*====================================
deal-area css
====================================*/
.deal-area {
position: relative;
z-index: 1;
}
.deal-area::after {
content: "";
position: absolute;
inset: 0;
background-color: #000000;
z-index: -1;
opacity: 0.6;
}
/************************************* deal-area css end *************************************/
/************************************* service css start *************************************/
/*====================================
service-content css
====================================*/
.service-area .service-content span.service-img img {
-webkit-transition: transform 0.3s ease-in-out;
transition: transform 0.3s ease-in-out;
}
.service-area .service-content:hover span.service-img img {
transform: translateY(-5px);
}
/************************************* service css end *************************************/
/************************************* testimonial css start *************************************/
/*====================================
testimonial slider-swiper css
====================================*/
.testimonial .testi-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 100%;
}
@media (min-width: 768px) {
.testimonial .testi-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 50%;
}
}
@media (min-width: 1200px) {
.testimonial .testi-slider.swiper:not(.swiper-initialized) .swiper-slide:not([style]) {
width: 33.33%;
}
}
/*====================================
testimonial content css
====================================*/
.testimonial .testi-slider .testi-content span.testi-img {
position: relative;
z-index: 1;
}
.testimonial .testi-slider .testi-content span.testi-img::after {
content: "";
position: absolute;
inset: 0;
border: 1px solid rgba(var(--border-color), var(--border-opacity));
border-radius: var(--border-radius2);
transform: translateY(5px);
z-index: -1;
}
@media (min-width: 768px) {
.testimonial .testi-slider .testi-content span.testi-img::after {
transform: translateX(5px);
}
}
/************************************* testimonial css end *************************************/

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 655 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 607 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 914 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 914 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 914 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 914 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 914 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 832 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 607 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 607 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 624 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 624 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,182 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Beluxe - Beauty & Cosmetics eCommerce HTML5 Template</title>
<meta name="description" content="Beluxe is a modern HTML5 beauty eCommerce template built with Bootstrap 5, ideal for cosmetics, skincare, makeup, and salon online stores.">
<meta name="keywords" content="beauty eCommerce template, cosmetics store HTML, skincare shop, makeup online store, Bootstrap 5 beauty theme, responsive beauty website">
<meta name="author" content="spacingtech_webify">
<!-- favicon -->
<link rel="shortcut icon" type="image/favicon" href="assets/image/index/favicon.png">
<!-- plugin css -->
<link rel="stylesheet" type="text/css" href="assets/css/plugin.css">
<!-- theme css -->
<link rel="stylesheet" type="text/css" href="assets/css/theme.css">
<!-- other css -->
<link rel="stylesheet" type="text/css" href="assets/css/other.css">
</head>
<body>
<!-- preloader start -->
<div class="preloader position-fixed top-0 start-0 w-100 h-100 body-bg z-index-5">
<div class="loader-img position-absolute top-0 start-0 w-100 h-100 d-flex align-items-center justify-content-center">
<img src="assets/image/index/logo.png" class="width-88 width-xl-120 img-fluid" alt="logo">
</div>
</div>
<!-- preloader end -->
<main id="main">
<!-- coming-content start -->
<section class="coming-content">
<div class="d-lg-none" data-animate="animate__fadeIn">
<img src="assets/image/other/coming-soon-mobile.jpg" class="w-100 img-fluid" alt="coming-soon-mobile">
</div>
<div class="container d-lg-none section-ptb">
<div class="col-12 col-md-10 mx-md-auto text-center">
<div class="coming-theme-logo section-capture" data-animate="animate__fadeIn">
<a href="index.html" class="d-block theme-logo">
<img src="assets/image/index/logo.png" class="width-88 width-xl-120 img-fluid" alt="logo">
</a>
</div>
<div class="row row-mtm">
<h2 class="font-24 font-sm-32 font-xl-40 lh-1" data-animate="animate__fadeIn">We are coming soon!</h2>
<div class="coming-timer countdown" data-time="2027/12/31 00:00:00">
<div class="row row-mtm15">
<div class="col-3" data-animate="animate__fadeIn">
<div class="coming-timer-content position-relative pbp-100">
<span class="day primary-color font-20 font-sm-24 position-absolute top-0 end-0 bottom-0 start-0 ptb-5 plr-5 d-flex flex-column align-items-center justify-content-center extra-bg heading-weight rounded-circle"></span>
</div>
<span class="d-inline-block heading-color mst-15 text-uppercase">Day</span>
</div>
<div class="col-3" data-animate="animate__fadeIn">
<div class="coming-timer-content position-relative pbp-100">
<span class="hrs primary-color font-20 font-sm-24 position-absolute top-0 end-0 bottom-0 start-0 ptb-5 plr-5 d-flex flex-column align-items-center justify-content-center extra-bg heading-weight rounded-circle"></span>
</div>
<span class="d-inline-block heading-color mst-15 text-uppercase">Hrs</span>
</div>
<div class="col-3" data-animate="animate__fadeIn">
<div class="coming-timer-content position-relative pbp-100">
<span class="min primary-color font-20 font-sm-24 position-absolute top-0 end-0 bottom-0 start-0 ptb-5 plr-5 d-flex flex-column align-items-center justify-content-center extra-bg heading-weight rounded-circle"></span>
</div>
<span class="d-inline-block heading-color mst-15 text-uppercase">Min</span>
</div>
<div class="col-3" data-animate="animate__fadeIn">
<div class="coming-timer-content position-relative pbp-100">
<span class="sec primary-color font-20 font-sm-24 position-absolute top-0 end-0 bottom-0 start-0 ptb-5 plr-5 d-flex flex-column align-items-center justify-content-center extra-bg heading-weight rounded-circle"></span>
</div>
<span class="d-inline-block heading-color mst-15 text-uppercase">Sec</span>
</div>
</div>
</div>
<div class="coming-news">
<p class="font-16 meb-13" data-animate="animate__fadeIn">Be the first, To know when we launch. Promotions, new products and sales. Directly to your inbox.</p>
<form method="post" class="coming-form" data-animate="animate__fadeIn">
<div class="coming-wrap d-md-flex">
<input type="email" id="coming-email-mobile" name="coming-email-mobile" class="coming-notify-input width-100 height-md-auto text-center text-md-start" placeholder="Enter your email" required>
<button type="submit" class="coming-btn coming-notify-btn width-100 width-md-auto btn-style secondary-btn mst-15 mst-md-0 text-nowrap">Notify me</button>
</div>
</form>
</div>
<div class="coming-social">
<ul class="social-ul justify-content-center ul-mt30">
<li class="social-li" data-animate="animate__fadeIn">
<a href="javascript:void(0)" class="d-block body-primary-color icon-16" aria-label="Social link"><i class="ri-facebook-fill d-block lh-1"></i></a>
</li>
<li class="social-li" data-animate="animate__fadeIn">
<a href="javascript:void(0)" class="d-block body-primary-color icon-16" aria-label="Social link"><i class="ri-instagram-fill d-block lh-1"></i></a>
</li>
<li class="social-li" data-animate="animate__fadeIn">
<a href="javascript:void(0)" class="d-block body-primary-color icon-16" aria-label="Social link"><i class="ri-pinterest-fill d-block lh-1"></i></a>
</li>
<li class="social-li" data-animate="animate__fadeIn">
<a href="javascript:void(0)" class="d-block body-primary-color icon-16" aria-label="Social link"><i class="ri-twitter-x-fill d-block lh-1"></i></a>
</li>
<li class="social-li" data-animate="animate__fadeIn">
<a href="javascript:void(0)" class="d-block body-primary-color icon-16" aria-label="Social link"><i class="ri-youtube-fill d-block lh-1"></i></a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="d-none d-lg-flex flex-lg-wrap flex-lg-row-reverse">
<div class="col-12 col-lg-6 bg-img fullscreen" data-bgimg="assets/image/other/coming-soon.jpg" data-animate="animate__fadeIn"></div>
<div class="col-12 col-lg-6 d-flex flex-column align-items-start justify-content-center section-ptb plr-30 fullscreen2">
<div class="coming-desktop col-xl-11 col-xxl-9 mx-xl-auto">
<div class="coming-theme-logo section-capture" data-animate="animate__fadeIn">
<a href="index.html" class="d-block theme-logo">
<img src="assets/image/index/logo.png" class="width-88 width-xl-144 img-fluid" alt="logo">
</a>
</div>
<div class="row row-mtm">
<h2 class="font-24 font-sm-32 font-xl-40 lh-1" data-animate="animate__fadeIn">We are coming soon!</h2>
<div class="coming-timer text-center countdown" data-time="2027/12/31 00:00:00">
<div class="row row-mtm15">
<div class="col-3" data-animate="animate__fadeIn">
<div class="coming-timer-content position-relative pbp-100">
<span class="day primary-color font-20 font-sm-24 position-absolute top-0 end-0 bottom-0 start-0 ptb-5 plr-5 d-flex flex-column align-items-center justify-content-center extra-bg heading-weight rounded-circle"></span>
</div>
<span class="d-inline-block mst-16 text-uppercase">Day</span>
</div>
<div class="col-3" data-animate="animate__fadeIn">
<div class="coming-timer-content position-relative pbp-100">
<span class="hrs primary-color font-20 font-sm-24 position-absolute top-0 end-0 bottom-0 start-0 ptb-5 plr-5 d-flex flex-column align-items-center justify-content-center extra-bg heading-weight rounded-circle"></span>
</div>
<span class="d-inline-block mst-16 text-uppercase">Hrs</span>
</div>
<div class="col-3" data-animate="animate__fadeIn">
<div class="coming-timer-content position-relative pbp-100">
<span class="min primary-color font-20 font-sm-24 position-absolute top-0 end-0 bottom-0 start-0 ptb-5 plr-5 d-flex flex-column align-items-center justify-content-center extra-bg heading-weight rounded-circle"></span>
</div>
<span class="d-inline-block mst-16 text-uppercase">Min</span>
</div>
<div class="col-3" data-animate="animate__fadeIn">
<div class="coming-timer-content position-relative pbp-100">
<span class="sec primary-color font-20 font-sm-24 position-absolute top-0 end-0 bottom-0 start-0 ptb-5 plr-5 d-flex flex-column align-items-center justify-content-center extra-bg heading-weight rounded-circle"></span>
</div>
<span class="d-inline-block mst-16 text-uppercase">Sec</span>
</div>
</div>
</div>
<div class="coming-news">
<p class="font-16 meb-13" data-animate="animate__fadeIn">Be the first, To know when we launch. Promotions, new products and sales. Directly to your inbox.</p>
<form method="post" class="coming-form" data-animate="animate__fadeIn">
<div class="coming-wrap d-md-flex">
<input type="email" id="coming-email" name="coming-email" class="coming-notify-input width-100 height-md-auto text-center text-md-start" placeholder="Enter your email" required>
<button type="submit" class="coming-btn coming-notify-btn width-100 width-md-auto btn-style secondary-btn mst-15 mst-md-0 text-nowrap">Notify me</button>
</div>
</form>
</div>
<div class="coming-social">
<ul class="social-ul ul-mt30">
<li class="social-li" data-animate="animate__fadeIn">
<a href="javascript:void(0)" class="d-block body-primary-color icon-16" aria-label="Social link"><i class="ri-facebook-fill d-block lh-1"></i></a>
</li>
<li class="social-li" data-animate="animate__fadeIn">
<a href="javascript:void(0)" class="d-block body-primary-color icon-16" aria-label="Social link"><i class="ri-instagram-fill d-block lh-1"></i></a>
</li>
<li class="social-li" data-animate="animate__fadeIn">
<a href="javascript:void(0)" class="d-block body-primary-color icon-16" aria-label="Social link"><i class="ri-pinterest-fill d-block lh-1"></i></a>
</li>
<li class="social-li" data-animate="animate__fadeIn">
<a href="javascript:void(0)" class="d-block body-primary-color icon-16" aria-label="Social link"><i class="ri-twitter-x-fill d-block lh-1"></i></a>
</li>
<li class="social-li" data-animate="animate__fadeIn">
<a href="javascript:void(0)" class="d-block body-primary-color icon-16" aria-label="Social link"><i class="ri-youtube-fill d-block lh-1"></i></a>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- coming-content end -->
</main>
<!-- main end -->
<!-- plugin js -->
<script src="assets/js/plugin.js"></script>
<!-- theme js -->
<script src="assets/js/theme.js"></script>
</body>
</html>

14
project-data/update.sql Normal file
View File

@ -0,0 +1,14 @@
/*----------------------------------------------------------------------------------*/
/* AFTER UPDATE DATA MOVED UNDER UPDATE BLOCK */
/* LATEST QUERY AT THE BOTTOM - SO THAT ON SITE */
/* UPDATE ALL CAN BE EXECUTED AT ONCE */
/* ↓↓↓↓↓↓ NEXT UPDATE GOES HERE BELOW ↓↓↓↓↓↓ */
/*----------------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------------*/
/* ↑↑↑ UPDATE END ↑↑↑ */
/*----------------------------------------------------------------------------------*/

625
tests/BasePhpUnitCase.php Normal file
View File

@ -0,0 +1,625 @@
<?php
namespace ElixirAudit\Tests;
use BRSystems\Core\Library\cCoreSystem\cCoreSystem;
use BRSystems\Core\Library\cDb\cDb;
use BRSystems\Core\Library\cDefuseCrypto\cDefuseCrypto;
use BRSystems\Core\Library\cGoogle2FA\cGoogle2FA;
use BRSystems\Core\Library\cINI\cINI;
use BRSystems\Core\Library\cUrl\cUrl;
use Exception;
use Http\Client\Curl\Client;
use MyCLabs\Enum\Enum;
use Nyholm\Psr7\Factory\Psr17Factory;
use PHPUnit\Framework\TestCase;
use BRSystems\Core\App\pubUsers\pubUsers;
use BRSystems\Core\App\pubUsers\inc\pubUsersController;
use ReflectionClass;
use rpkamp\Mailhog\MailhogClient;
use rpkamp\Mailhog\Message\Contact;
use rpkamp\Mailhog\Message\Message;
use rpkamp\Mailhog\NoSuchMessageException;
use BRSystems\Core\Sys\sysUsers\sysUsers;
use ElixirAudit\Tests\DataSetup\Constants\siteMap;
use ElixirAudit\Tests\DataSetup\Constants\siteUsers;
/**
* @method static DbTitleEnum E_ELIXIR()
*/
final class DbTitleEnum extends Enum
{
private const E_ELIXIR = 'elixir';
}
abstract class BasePhpUnitCase extends TestCase
{
/**
* @var cDb
*/
protected cDb $cDb;
/**
* @var String - Mysql DB title
*/
protected string $mysqlName = 'maison_alexandra_lv';
/**
* @var String - Mysql connection user
*/
protected string $mysqlUser = 'dAccGlobal';
/**
* @var String - Mysql connection user password
*/
protected string $mysqlPass = 'dAccGlobal12!@';
/**
* @var String - Mysql connection host
*/
protected string $mysqlHost = 'maisonalexandra_mysql';
/**
* @var String - Mysql connection port
*/
protected string $mysqlPort = '3306';
/**
* @var Int - Mail send delay timeout
*/
protected int $mailSendTimeout = 14;
/**
* @var Int - Server port
*/
protected int $serverPort = 80;
/**
* @var bool - Unit test case
*/
protected bool $unitTestsAreRunning = false;
/**
* @var string
*/
protected string $mailHogAPIRequestUrl = 'http://maisonalexandra_mailhog:8025/';
protected pubUsers $pubUser;
protected sysUsers $cmsUser;
protected function setUp(): void
{
parent::setUp();
/*** define the site path constant ***/
if(!defined('__MDIR__')) {
define('__MDIR__', realpath(__DIR__ . '/../www/') . '/');
}
// Set default
ini_set('date.timezone', 'Europe/Riga');
date_default_timezone_set('Europe/Riga');
ini_set('display_errors', 'On');
ini_set('error_reporting', E_ALL);
// Increase time & memory limit
set_time_limit(60 * 60 * 3);
ini_set('memory_limit', '2048M');
// Define base sql constants for system to use
if (!defined('DB_HOST')) define('DB_HOST', $this->mysqlHost);
if (!defined('DB_USR')) define('DB_USR', $this->mysqlUser);
if (!defined('DB_PWD')) define('DB_PWD', $this->mysqlPass);
if (!defined('DB_PORT')) define('DB_PORT', $this->mysqlPort);
if (!defined('DB_NAME')) define('DB_NAME', $this->mysqlName);
// To be replaced by namespaces later!!!!
include_once(__DIR__ . "/../www/system-brs-core/config/constants.php");
include_once(__DIR__ . "/../www/system-brs-core/functions/com.funct.php");
// Set handler functions
// Setup without namespaces before namespaces ar implemented into project - system autoloader
set_error_handler('errorHandler');
if ($this->unitTestsAreRunning) {
// Set flag while global tests are running
$GLOBALS['coverage_tests_running'] = true;
// Load site configuration file
$oCfg = new cINI(__CFG__ . 'init.cfg.ini');
$oCfg->loadSystemConstants();
// Set default values host, server port, etc.
if (
empty($_SERVER['HTTP_HOST'])
&& $sDefaultHost = $oCfg->getV('system', 'DEFAULT_HOST')
) {
$_SERVER['HTTP_HOST'] = $sDefaultHost;
}
if (empty($_SERVER['SERVER_PORT'])) {
$_SERVER['SERVER_PORT'] = $this->serverPort;
}
foreach (['SERVER_ADDR', 'REQUEST_URI', 'REMOTE_ADDR'] as $key) {
if (empty($_SERVER[$key])) {
$_SERVER[$key] = $this->serverPort;
}
}
// Set request type - while testing POST needs to be specified
$this->setUnitTestRequestType();
}
$this->cDb = cDb::getInstance($this->mysqlHost, $this->mysqlUser, $this->mysqlPass, $this->mysqlPort, $this->mysqlName, 'SeleniumDbConnection');
$this->cDb->disableDispose = true;
// Reload base data tables
$this->reloadDbTables(['mod_users', 'mod_account_manager']);
}
protected function tearDown(): void
{
parent::tearDown();
}
protected function dbSetup(array $files): void
{
try {
foreach ($files as $file) {
$file = __DIR__ . '/DataSetup/' . $file;
if (!file_exists($file)) {
throw new Exception('DB setup file not found: ' . $file);
}
$sql = preg_split('/[.+;][\s]*\n/', file_get_contents($file), -1, PREG_SPLIT_NO_EMPTY);
if (!is_array($sql)) {
continue;
}
foreach ($sql as $query) {
if (empty(trim($query))) {
continue;
}
$this->cDb->query($query);
}
}
} catch (Exception $e) {
$this->fail($e->getMessage());
}
}
protected function reloadDbTables(array $tables = null, DbTitleEnum $baseTable = null): void
{
if (is_null($baseTable)) {
$baseTable = DbTitleEnum::E_ZUTENIS();
}
if (!is_null($tables)) {
foreach ($tables as $table) {
$this->cDb->query("TRUNCATE TABLE `{$baseTable}`.`{$table}`");
$this->cDb->query("LOAD DATA INFILE '/opt/data/{$baseTable}/$table.txt' INTO TABLE `{$baseTable}`.`{$table}`");
}
}
}
/**
* Function to exec insert with a data array
*
* @param string $table - table name
* @param array $data - fields to insert with key to field structure
* @return array|bool - array with ids
*/
protected function insertTestDataMulti(string $table, array $data)
{
if (empty($data)) {
return false;
}
$ids = $this->cDb->_queryInsertArray($table, $data);
return $ids ?: false;
}
protected function updateTestDataMulti(string $table, array $data, string $idColumn = 'id'): bool
{
if (empty($data) || !$idColumn) {
return false;
}
return $this->cDb->_queryUpdateMulti($table, $data, $idColumn);
}
protected function assertExpected(array $expectedData, string $output, bool $convertToLowercase = false): void
{
foreach ($expectedData as $expected) {
if ($convertToLowercase) {
$this->assertStringContainsString(mb_strtolower($expected), mb_strtolower($output));
} else {
$this->assertStringContainsString($expected, $output);
}
}
}
protected function emailHtmlDecode(string $data = ''): string
{
return html_entity_decode($data, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, 'UTF-8');
}
protected function getAndSetStructureForFirstMatchedUrl(int $mapId): array
{
$url = new cUrl();
$urlData = getFirstMatchByMapId($mapId);
$_SERVER['SERVER_PORT'] = 80;
$_SERVER['HTTPS'] = 'off';
$_SERVER['HTTP_HOST'] = 'local.elixir';
$_SERVER['REQUEST_URI'] = $url->rmSlashesIndex($urlData['p_full_url']);
$_SERVER['REMOTE_ADDR'] = '';
$_SERVER['SERVER_ADDR'] = '';
return $urlData;
}
protected function mprint(): void
{
// Get all arguments
$vPassedArguments = func_get_args();
if(!!$vPassedArguments){
$sDebugOutput = PHP_EOL . 'START DEBUG OUTPUT:' . PHP_EOL;
foreach($vPassedArguments as $vData) $sDebugOutput .= PHP_EOL . print_r($vData, true) . PHP_EOL;
die($sDebugOutput . PHP_EOL . 'END OF DEBUG!');
}
die('NO ARGUMENTS PASSED!');
}
function getLoginCredentialsByType(string $userType = siteUsers::loginCmsAdmin): array
{
return siteUsers::loginData[$userType] ?? [];
}
protected function setUnitTestRequestType(bool $isGET = true, bool $isPOST = false): void
{
if ($isPOST) {
$_SERVER['REQUEST_METHOD'] = 'POST';
}
if (!defined('POST_REQ')) define('POST_REQ', $isPOST);
if (!defined('GET_REQ')) define('GET_REQ', $isGET);
}
protected function initBaseClassObjectBySiteMapId(
string $siteMapId = SiteMap::PUB_LOGIN,
?string $loginUser = siteUsers::loginAppSelfEmployed,
bool $security2FAEnabled = true,
int $selYear = 2022,
array $unlockYear = [2026, 2025, 2024, 2023, 2022]
): ?object {
$app = new cCoreSystem();
$this->getAndSetStructureForFirstMatchedUrl($siteMapId);
// Check if from previous test user is not still logged in - otherwise log out user
$this->logOutUnitTestUser();
// System modules requires users to be logged in
if (!is_null($loginUser)) {
$this->loginUnitTestUserForCoverage($loginUser, false, $security2FAEnabled);
}
// Return null on 2FA disabled
if ($security2FAEnabled) {
return $app->launch(true);
} else {
try {
$app->launch(true);
} catch (Exception $error) {
$this->assertExpected(
['Redirected to Location: /ienakt-gramatvedibas-sistema/divu-faktoru-iestatisana'],
$error->getMessage()
);
}
}
return null;
}
protected function loginUnitTestUserForCoverage(
string $loginUser = siteUsers::loginAppSelfEmployed,
bool $isCmsUser = false,
bool $security2FAEnabled = true
): void {
// Simulate user login
if ($isCmsUser) {
$this->cmsUser = new sysUsers(getFirstMatchByMapId(SiteMap::PUB_LOGIN));
} else {
$this->pubUser = new pubUsers(getFirstMatchByMapId(SiteMap::PUB_LOGIN));
// If user already logged in continue
if ($this->pubUser->controller->isLoggedIn()) {
return;
}
$userData = $this->getLoginCredentialsByType($loginUser);
// Log in & catch redirect exception
try {
$this->pubUser->controller->loginUser(
[
'chkTerms' => 1,
'user_login' => $userData['user'],
'user_password' => $userData['password'],
]
);
} catch (Exception $error) {
if ($security2FAEnabled) {
$this->assertExpected(['Redirected to Location'], $error->getMessage());
} else {
$this->assertExpected(
['"jsonok":true,', '"url":"\/gramatvedibas-sistema\/konta-izvele"'],
$error->getMessage()
);
}
}
// Submit 2fa security & catch json send data exception
if ($security2FAEnabled) {
try {
$oGoogle2FA = new cGoogle2FA();
$next2FACode = $oGoogle2FA->getGoogleAuthCode($userData['2fa']);
$_POST['code'] = $next2FACode;
$this->pubUser->controller->set2FAForm();
} catch (Exception $error) {
$this->assertExpected(['"jsonok":true'], $error->getMessage());
}
}
// Check if user company is set
if ($this->pubUser->controller->selCompId) {
return;
}
}
}
protected function logOutUnitTestUser(bool $isCmsUser = false): void
{
try {
if ($isCmsUser) {
$this->cmsUser->controller->logOut();
} else {
if (!isset($this->pubUser)) {
$this->pubUser = new pubUsers(getFirstMatchByMapId(SiteMap::PUB_LOGIN));
}
$this->pubUser->controller->logOut();
}
} catch (Exception $error) {
if ($isCmsUser) {
$this->assertFalse($this->cmsUser->controller->isLoggedIn());
} else {
$this->assertFalse($this->pubUser->controller->isLoggedIn());
}
}
}
protected function resetGetAndPost(array $data = [], bool $destroyPrev = true): void
{
$this->setPost();
$this->setGet();
}
protected function destroyUserSession(): void
{
unset($_SESSION[pubUsersController::USER_SESSION_KEY]);
unset($_SESSION[pubUsersController::USER_2FA_SESSION_KEY]);
unset($_SESSION[pubUsersController::USER_PWD_SESSION_KEY]);
}
protected function setPost(array $data = [], bool $destroyPrev = true): void
{
if ($destroyPrev) {
$_POST = [];
}
if (!!$data) {
foreach ($data as $key => $value) {
$_POST[$key] = $value;
}
}
}
protected function setGet(array $data = [], bool $destroyPrev = true): void
{
if ($destroyPrev) {
$_GET = [];
}
if (!!$data) {
foreach ($data as $key => $value) {
$_GET[$key] = $value;
}
}
}
protected function testModuleLoginRequirement(string $siteMapId = SiteMap::PUB_LOGIN): void
{
try {
$this->logOutUnitTestUser();
// Create new class
$this->initBaseClassObjectBySiteMapId($siteMapId, null);
} catch (Exception $error) {
$this->assertExpected(
['Redirected to Location: /ienakt-gramatvedibas-sistema'],
$error->getMessage()
);
}
}
protected function clearMailHogMessages(): void
{
$client = new MailhogClient(new Client(), new Psr17Factory(), new Psr17Factory(), $this->mailHogAPIRequestUrl);
$client->purgeMessages();
}
protected function awaitEmailFromMailHog(
string $recipient = null,
string $subject = null,
int $timeout = 30,
bool $presumeMailboxIsEmpty = false
): Message {
$reqTime = time() - 5;
// Create connection to MailHog
$client = new MailhogClient(new Client(), new Psr17Factory(), new Psr17Factory(), $this->mailHogAPIRequestUrl);
$time = 0;
$error = null;
while ($time <= $timeout) {
// Init timeout
sleep(1);
$time++;
try {
$messages = $client->getLastMessage();
$messageTime = strtotime($messages->headers->get('date'));
// Ignore older messages and empty mailbox flag is not set
if (!$presumeMailboxIsEmpty && $messageTime < $reqTime) {
continue;
}
# Search for recipient & title
if (!is_null($recipient) && !is_null($subject)) {
if (
$messages->recipients->contains(Contact::fromString($recipient)) &&
$messages->subject == $subject
) {
return $messages;
}
continue;
}
# Search for recipient
if (
!is_null($recipient) &&
$messages->recipients->contains(Contact::fromString($recipient))
) {
return $messages;
}
# Search for title
if (
!is_null($subject) &&
$messages->subject == $subject
) {
return $messages;
}
// Default
if (
is_null($recipient) &&
is_null($subject)
) {
return $messages;
}
} catch (NoSuchMessageException $error) {
// Continue waiting for message
}
}
// Max timeout reached
throw new NoSuchMessageException($error);
}
public function setProtectedProperty($classObject, $property, $value): void
{
$reflection = new ReflectionClass($classObject);
$reflection_property = $reflection->getProperty($property);
$reflection_property->setAccessible(true);
$reflection_property->setValue($classObject, $value);
}
public function setUserPermission(string $permissionKey): void
{
// Add pub user permission without ID
$_SESSION['pub-user']['permissions'][] = $permissionKey;
}
public function lockOrUnlockCompanyDetailsYear(int $year, bool $locked): void
{
// After usage needs to reload table mod_account_manager && clear apc from db
$partners = $this->initBaseClassObjectBySiteMapId(SiteMap::PUB_PARTNERS);
$partners->controller->saveYearsSettings(['id' => $year, 'locked' => $locked ? 1 : 0 ]);
}
public function getSqlDataInjectionCfg(string $tableName = 'some_db_table'): array
{
return [
'SMPOL' => "DROP $tableName;--",
'M' => "DROP $tableName;#",
'M2' => "data' --",
'Bypassing login screens (SMO+)' => "admin' --",
'Bypassing login screens (SMO+) 1' => "admin' #",
'Bypassing login screens (SMO+) 2' => "admin'/*",
'Bypassing login screens (SMO+) 3' => "' or 1=1--",
'Bypassing login screens (SMO+) 4' => "' or 1=1#",
'Bypassing login screens (SMO+) 5' => "' or 1=1/*",
'Bypassing login screens (SMO+) 6' => "') or '1'='1--",
'Bypassing login screens (SMO+) 7' => "') or ('1'='1--",
'Obfuscation' => "test;DROP/*comment*/$tableName",
'Breaking up a keyword to avoid filters' => ";DR/**/OP/*bypass blacklisting*/$tableName",
'Removing space characters' => ";SELECT/*avoid-spaces*/password/**/FROM/**/$tableName",
'ID value' => "10; DROP TABLE $tableName /*",
'ID value 2' => "10; DROP TABLE $tableName --",
'Stacking Queries - MSP' => "1; DROP $tableName--",
'Stacking Queries - MSP ID value' => "10;DROP $tableName --",
'Error-based ways to discover column information' => "' HAVING 1=1",
'Simple INSERT payload' => "'; insert into $tableName values( 1, 'hax0r', 'coolpass', 9 )/*",
'sample insert data' => "''ert'' // */=-+12!@#$%^&*()",
'sample insert data 2' => "āēšģīķļžčņ",
'html' => "<b>test data </b>",
];
}
public function updateCfgStructure(
string $updateText,
array $structure,
array $fields = [],
array $excludeFields = []
): array
{
$updatedFields = $structure;
if (empty($structure) || !strlen($updateText)) {
return $structure;
}
// Keep only the requested fields
if (!empty($fields)) {
$updatedFields = $fields;
}
// Get all fields except the passed excluded
if (!empty($excludeFields)) {
$updatedFields = array_diff_key($updatedFields, array_flip($excludeFields));
}
// Fill data from config
$filledArray = array_fill_keys(array_keys($updatedFields), $updateText);
return array_merge($structure , $filledArray);
}
protected function switchDbSchema(DbTitleEnum $schema)
{
$this->cDb = cDb::getInstance(
$this->mysqlHost,
$this->mysqlUser,
$this->mysqlPass,
$this->mysqlPort,
$schema,
'SeleniumDbConnection',
);
$this->cDb->disableDispose = true;
}
}

View File

@ -0,0 +1,978 @@
<?php
namespace ElixirAudit\Tests;
use BRSystems\Core\Library\cGoogle2FA\cGoogle2FA;
use Exception;
use Facebook\WebDriver\Chrome\ChromeOptions;
use Facebook\WebDriver\Exception\NoSuchElementException;
use Facebook\WebDriver\Exception\TimeOutException;
use Facebook\WebDriver\Firefox\FirefoxDriver;
use Facebook\WebDriver\Firefox\FirefoxProfile;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Remote\RemoteWebElement;
use Facebook\WebDriver\WebDriverBy;
use Facebook\WebDriver\WebDriverDimension;
use Facebook\WebDriver\WebDriverElement;
use Facebook\WebDriver\WebDriverExpectedCondition;
use Facebook\WebDriver\WebDriverSelect;
use PHPUnit\Runner\BaseTestRunner;
use ElixirAudit\Tests\DataSetup\Constants\siteLanguages;
abstract class BasePhpUnitSeleniumCase extends BasePhpUnitCase
{
public const CLASS_NAME = 'className';
public const CSS_SELECTOR = 'cssSelector';
public const ID = 'id';
public const NAME = 'name';
public const LINK_TEXT = 'linkText';
public const PARTIAL_LINK_TEXT = 'partialLinkText';
public const TAG_NAME = 'tagName';
public const XPATH = 'xPath';
/**
* @var RemoteWebDriver
*/
public $webDriver;
/**
* @var string
*/
protected $seleniumHost = 'http://maisonalexandra_selenium_hub:4444/wd/hub';
/**
* @var string
*/
protected $seleniumBrowser = "firefox";
/**
* @var int
*/
protected $timeoutInSeconds = 60;
/**
* @var int
*/
protected int $timeoutWait = 30;
protected int $timeoutWaitInterval = 250;
/**
* @var string
*/
protected $applicationBaseUrl = 'http://local.maisonalexandra.lv/';
/**
* @var string
*/
private $screenshotPath = "build";
/**
* @var bool
*/
private $screenshotOnFailedTest = true;
/**
* @var string
*/
protected $user2FASecureCode = '3HMZGRH7JEC2OBPR';
/**
* @var string
*/
protected $applicationDownloadFolder = '/var/www/temp';
protected $CMSDateFormat = 'd/m/Y';
protected $PUBDateFormat = 'd.m.Y';
protected $PUBTime = 'H:i';
public function __construct()
{
parent::__construct();
}
public function __destruct()
{
}
protected function setUp(): void
{
parent::setUp();
// Get WebDriver Instance
$this->webDriver = RemoteWebDriver::create(
$this->seleniumHost,
$this->buildCapabilities(),
$this->timeoutInSeconds * 1000,
$this->timeoutInSeconds * 1000
);
}
protected function tearDown(): void
{
// Screenshot Failed Test
if (in_array($this->getStatus(), array(BaseTestRunner::STATUS_ERROR, BaseTestRunner::STATUS_FAILURE))) {
$this->screenshotFailedTest();
}
parent::tearDown();
// Quit WebDriver Instance
$this->webDriver->quit();
}
protected function logIntoAdmin($eUserLogin, $waitForDashboard = true): void
{
$loginData = $this->getLoginCredentialsByType($eUserLogin);
$this->url($loginData['url']);
$this->waitUntilDomReadyState();
// Check if we landed on dashboard - default page after login redirect
if ($this->elementExists('dashboard')) {
return;
}
$this->byId("user_login")->sendKeys($loginData['user']);
$this->byId("user_password")->sendKeys($loginData['password']);
$this->byCssSelector("button.btn")->click();
// Wait for form to load 2fa elements & continue with testing
$this->waitFormToLoadBySelector('form#frm_2fa_input');
// Validate code
$oGoogle2FA = new cGoogle2FA();
$next2FACode = $oGoogle2FA->getGoogleAuthCode($loginData['2fa']);
foreach (str_split($next2FACode) as $i => $char) {
$selector = "input.code2fa[tabindex='" . ++$i . "']";
$this->elementWait($selector, self::CSS_SELECTOR);
$this->byCssSelector($selector)->sendKeys($char);
}
if ($waitForDashboard) {
$this->elementWait("dashboard", self::ID);
}
}
protected function logout(bool $useFormButton = true)
{
// Check a way exists to log out
$logoutButton = '#company_menu > ul > li.comp_profile > a';
if (
$useFormButton &&
$this->elementExists($logoutButton, self::CSS_SELECTOR, true) &&
$this->byCssSelector($logoutButton)->isDisplayed()
) {
$this->scrollElementIntoView($logoutButton, self::CSS_SELECTOR);
$this->moveToElement($logoutButton, self::CSS_SELECTOR);
$this->byCssSelector($logoutButton)->click();
$this->elementWait('#comp_menu .logout', self::CSS_SELECTOR);
$this->moveToElement('#comp_menu .logout', self::CSS_SELECTOR);
$this->byCssSelector("#comp_menu .logout")->click();
} else {
$this->url("?logout=1");
}
$this->elementWait('user_login');
}
protected function changeYear(int $year): void
{
$elementSelector = '#company_menu > ul > li.year_select > a';
if (
!$this->elementExists($elementSelector, self::CSS_SELECTOR, true) ||
!$this->byCssSelector($elementSelector)->isDisplayed()
) {
return;
}
$this->scrollIntoViewHoverClick($elementSelector, self::CSS_SELECTOR);
$this->elementWait('#year_menu', self::CSS_SELECTOR);
$this->scrollIntoViewHoverClick('#year_menu a[data-year="' . $year . '"]', self::CSS_SELECTOR);
$this->waitUntilDomReadyState();
}
protected function logoutAdmin(bool $useFormButton = true)
{
// Check a way exists to log out
$logoutButton = '.menu-cnt .settbox li.sett.last > a';
if ($useFormButton && $this->elementExists($logoutButton, self::CSS_SELECTOR)) {
$this->moveToElement($logoutButton, self::CSS_SELECTOR);
$this->elementWait('div.settbox_cnt.sub-menu ul', self::CSS_SELECTOR);
$elementXpath = '//div[contains(@class,"settbox_cnt")]/ul/li/a/div[@class="ico-logout"]/..';
$this->moveToElement($elementXpath, self::XPATH);
$this->byXPath($elementXpath)->click();
} else {
$this->url("?logout=1");
}
// Wait for redirect to complete
$this->elementWait('user_login');
}
/**
* @param string|null $pageUrl
* @param bool $overrideBaseUrl
* @return string|void
*/
public function url(string $pageUrl = null, bool $overrideBaseUrl = false)
{
$url = ($overrideBaseUrl) ? $pageUrl : $this->applicationBaseUrl . $pageUrl;
$this->webDriver->get($url);
$this->waitUntilDomReadyState();
}
public function title(): string
{
return $this->webDriver->getTitle();
}
/**
* @param WebDriverElement|string|null $frameElement
*/
public function frame($frameElement = null): void
{
if (is_null($frameElement)) {
$this->webDriver->switchTo()->defaultContent();
} else {
$this->webDriver->switchTo()->frame($frameElement);
}
}
public function acceptAlert(): void
{
$this->webDriver->switchTo()->alert()->accept();
}
public function dismissAlert(): void
{
$this->webDriver->switchTo()->alert()->dismiss();
}
public function elementExists(string $elementSelector, ?string $elementSelectorType = null, bool $now = false): bool
{
try {
/** Prevent checking for non-existent elements taking x seconds instead of 0. */
if ($now) {
$this->webDriver->manage()->timeouts()->implicitlyWait(0);
}
/**
* We use getRemoteWebElements instead of getRemoteWebElement because getRemoteWebElements
* returns an empty array instead of throwing an exception if not found.
*/
$elements = $this->getRemoteWebElements($elementSelector, $elementSelectorType ?? self::ID);
$exists = count($elements) > 0;
/** Set the implicit wait back to what it was. */
if ($now) {
$this->webDriver->manage()->timeouts()->implicitlyWait($this->timeoutWait);
}
return $exists;
} catch (Exception $e) {
// Restore wait even if an unexpected driver error occurs
if ($now) {
$this->webDriver->manage()->timeouts()->implicitlyWait($this->timeoutWait);
}
return false;
}
}
public function elementHasClass(string $class, string $selector, string $selectorType = self::ID): bool
{
try {
$classes = $this->getRemoteWebElement($selector, $selectorType)->getAttribute('class');
return in_array($class, explode(' ', $classes));
} catch (NoSuchElementException $exception) {
return false;
}
}
public function elementWaitRemoved(string $selector, string $selectorType = self::ID): void
{
try {
$element = $this->getWebDriverBy($selector, $selectorType);
$this->webDriver->wait($this->timeoutWait, $this->timeoutWaitInterval)->until(
WebDriverExpectedCondition::invisibilityOfElementLocated($element),
);
} catch (NoSuchElementException $exception) {
}
}
/**
* @param string $selector
* @param string|null $selectorType
* @param bool|true $waitUntilDomReadyState
* @param bool|true $presenceOfElementLocated
* @param bool|true $visibilityOfElementLocated
* @param bool|true $elementToBeClickable
* @return bool|void
*/
public function elementWait(
string $selector,
string $selectorType = self::ID,
bool $waitUntilDomReadyState = true,
bool $presenceOfElementLocated = true,
bool $visibilityOfElementLocated = true,
bool $elementToBeClickable = true
) {
try {
$element = $this->getWebDriverBy($selector, $selectorType);
if ($waitUntilDomReadyState) {
$this->waitUntilDomReadyState();
}
if ($presenceOfElementLocated) {
$this->webDriver->wait($this->timeoutWait, $this->timeoutWaitInterval)->until(
WebDriverExpectedCondition::presenceOfElementLocated($element),
);
}
if ($visibilityOfElementLocated) {
$this->webDriver->wait($this->timeoutWait, $this->timeoutWaitInterval)->until(
WebDriverExpectedCondition::visibilityOfElementLocated($element),
);
}
if ($elementToBeClickable) {
$this->webDriver->wait($this->timeoutWait, $this->timeoutWaitInterval)->until(
WebDriverExpectedCondition::elementToBeClickable($element),
);
}
if ($visibilityOfElementLocated) {
$this->webDriver->wait($this->timeoutWait, $this->timeoutWaitInterval)->until(
WebDriverExpectedCondition::visibilityOf($this->webDriver->findElement($element)),
);
}
return;
} catch (NoSuchElementException $exception) {
return false;
} catch (TimeOutException $exception) {
return false;
} catch (Exception $exception) {
return false;
}
}
/**
* @param string $selector
* @param string|null $selectorType
* @return RemoteWebElement[]
*/
protected function getRemoteWebElements(string $selector, string $selectorType = self::ID): array
{
return $this->webDriver->findElements($this->getWebDriverBy($selector, $selectorType));
}
/**
* @param string $selector
* @param string|null $selectorType
* @return RemoteWebElement
*/
protected function getRemoteWebElement(string $selector, string $selectorType = self::ID): RemoteWebElement
{
return $this->webDriver->findElement($this->getWebDriverBy($selector, $selectorType));
}
private function getWebDriverBy(string $selector, string $selectorType = self::ID): WebDriverBy
{
switch ($selectorType) {
case self::CLASS_NAME:
$element = WebDriverBy::className($selector);
break;
case self::CSS_SELECTOR:
$element = WebDriverBy::cssSelector($selector);
break;
case self::NAME:
$element = WebDriverBy::name($selector);
break;
case self::LINK_TEXT:
$element = WebDriverBy::linkText($selector);
break;
case self::PARTIAL_LINK_TEXT:
$element = WebDriverBy::partialLinkText($selector);
break;
case self::TAG_NAME:
$element = WebDriverBy::tagName($selector);
break;
case self::XPATH:
$element = WebDriverBy::xpath($selector);
break;
case self::ID:
default:
$element = WebDriverBy::id($selector);
break;
}
return $element;
}
public function pageTitleWait(string $pageTitle): void
{
$this->webDriver->wait($this->timeoutWait, $this->timeoutWaitInterval)->until(
WebDriverExpectedCondition::titleContains($pageTitle)
);
}
public function newWindowWait(): void
{
$this->webDriver->wait($this->timeoutWait, $this->timeoutWaitInterval)->until(
WebDriverExpectedCondition::numberOfWindowsToBe(2)
);
}
public function byClassName(string $elementClassName): RemoteWebElement
{
return $this->webDriver->findElement(WebDriverBy::className($elementClassName));
}
public function byCssSelector(string $elementCssSelector): RemoteWebElement
{
return $this->webDriver->findElement(WebDriverBy::cssSelector($elementCssSelector));
}
/**
* @return RemoteWebElement[] a list of all WebDriverElements, or an empty array if nothing
*/
public function elementsByCssSelector(string $elementCssSelector): array
{
return $this->webDriver->findElements(WebDriverBy::cssSelector($elementCssSelector));
}
public function byId(string $elementId): RemoteWebElement
{
return $this->webDriver->findElement(WebDriverBy::id($elementId));
}
public function byName(string $elementName): RemoteWebElement
{
return $this->webDriver->findElement(WebDriverBy::name($elementName));
}
public function byLinkText(string $elementLinkText): RemoteWebElement
{
return $this->webDriver->findElement(WebDriverBy::linkText($elementLinkText));
}
public function byPartialLinkText(string $elementPartialLinkText): RemoteWebElement
{
return $this->webDriver->findElement(WebDriverBy::partialLinkText($elementPartialLinkText));
}
public function byTagName(string $elementTagName): RemoteWebElement
{
return $this->webDriver->findElement(WebDriverBy::tagName($elementTagName));
}
public function byXPath(string $elementXPath): RemoteWebElement
{
return $this->webDriver->findElement(WebDriverBy::xpath($elementXPath));
}
public function select(RemoteWebElement $element): WebDriverSelect
{
return new WebDriverSelect($element);
}
private function screenshotFailedTest(): void
{
if ($this->screenshotOnFailedTest !== true) {
return;
}
if (!is_dir($this->screenshotPath)) {
mkdir($this->screenshotPath, 0777, true);
}
if (glob($this->screenshotPath . '/' . $this->getName() . "*.png")) {
array_map('unlink', glob($this->screenshotPath . '/' . $this->getName() . "*.png"));
}
$filePath = $this->screenshotPath . '/' . $this->getName() . '_' . time() . '.png';
$this->webDriver->takeScreenshot($filePath);
}
private function buildCapabilities(): DesiredCapabilities
{
$capabilities = null;
switch ($this->seleniumBrowser) {
case 'firefox':
$profile = new FirefoxProfile();
$capabilities = DesiredCapabilities::firefox();
$profile->setPreference('browser.download.folderList', 2);
$profile->setPreference('browser.download.dir', $this->applicationDownloadFolder);
$profile->setPreference('browser.download.panel.shown', false);
$profile->setPreference('browser.download.manager.showWhenStarting', false);
$profile->setPreference('pdfjs.disabled', true);
$profile->setPreference(
'browser.helperApps.neverAsk.saveToDisk',
'application/pdf, text/csv, application/xlsx, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
);
$capabilities->setCapability(FirefoxDriver::PROFILE, $profile);
break;
case 'chrome':
$options = new ChromeOptions();
$capabilities = DesiredCapabilities::chrome();
$options->setExperimentalOption('prefs', array(
'download.directory_upgrade' => true,
'download.prompt_for_download' => false,
'download.default_directory' => $this->applicationDownloadFolder,
'safebrowsing.enabled' => false,
'safebrowsing.disable_download_protection' => true,
'profile.default_content_settings.popups' => 0,
'profile.default_content_settings.multiple-automatic-downloads' => 1,
'plugins.always_open_pdf_externally' => true,
'plugins.plugins_disabled' => ['Chrome PDF Viewer'],
));
$capabilities->setCapability(ChromeOptions::CAPABILITY_W3C, $options);
break;
default:
$this->fail('Unsupported browser type!');
}
return $capabilities;
}
public function clearTempFolder(string $dir = __DIR__ . '/../temp'): void
{
foreach (glob($dir . '/*', GLOB_MARK) as $file) {
if (is_dir($file)) {
$this->clearTempFolder($file);
} else {
unlink($file);
}
}
}
protected function getFileFromTempFolder(string $dir = __DIR__ . '/../temp'): ?string
{
for ($i = 1; $i < 30; $i++) {
foreach (glob($dir . '/*', GLOB_MARK) as $file) {
if (is_file($file)) {
return $file;
}
}
sleep(1);
}
return null;
}
protected function waitFormToLoadBySelector(string $selector): void
{
$this->webDriver->wait($this->timeoutWait, $this->timeoutWaitInterval)->until(
function ($driver) use ($selector) {
return $driver->findElements(WebDriverBy::cssSelector($selector));
},
'Error element'
);
}
protected function waitUntilDomReadyState(): void
{
$this->webDriver->wait($this->timeoutWait, $this->timeoutWaitInterval)->until(function ($driver) {
$jsScript = "return " .
"document.readyState === 'complete' && " . // Initial document ready state
"window.documentReloadIsUnderWay === undefined && " . // Custom reload condition test
"(" .
"typeof(jQuery) == 'undefined' || " . // None jquery pages error prevention
"(" .
"(" .
"typeof jQuery.active === undefined || " .
"jQuery.active === 0" . // jQuery active states e.g. ajax requests
" ) && " .
"jQuery(':animated').length === 0" . // jQuery's animation end state
")" .
") ? true : false";
return $driver->executeScript($jsScript);
});
}
protected function executeJS(string $script)
{
return $this->webDriver->executeScript($script);
}
protected function executeJSBlur(): void
{
$this->executeJS('$(":focus").blur();');
$this->waitUntilDomReadyState();
}
protected function markWebDocumentAsBusyUntilPageReloads(): void
{
$this->webDriver->executeScript('window.documentReloadIsUnderWay = true;');
}
protected function normalizeUrl(string $url, bool $endSlash = false): string
{
if (str_ends_with($url, '/')) {
if (!$endSlash) $url = substr($url, 0, strlen($url)-1);
} else {
if ($endSlash) $url .= '/';
}
if (str_starts_with($url, '/')) $url = substr($url, 1);
if (!$url) $url = 'index';
return $url;
}
protected function mprint(): void
{
// Get all arguments
$vPassedArguments = func_get_args();
if(!!$vPassedArguments){
$sDebugOutput = PHP_EOL . 'START DEBUG OUTPUT:' . PHP_EOL;
foreach($vPassedArguments as $vData) $sDebugOutput .= PHP_EOL . print_r($vData, true) . PHP_EOL;
echo $sDebugOutput . PHP_EOL . 'END OF DEBUG!';
}else {
echo 'NO ARGUMENTS PASSED!';
}
$this->tearDown();
}
protected function scrollIntoViewHoverClick(
string $selector,
string $selectorType = self::ID,
bool $elementClick = true
): RemoteWebElement {
$element = $this->scrollElementIntoView($selector, $selectorType, 'true');
$this->moveToElement($selector, $selectorType);
if ($elementClick) {
$element->click();
}
return $element;
}
protected function scrollElementIntoView(
string $selector,
string $selectorType = self::ID,
string $options = '{behavior:"instant", block:"center", inline:"end"}'
): RemoteWebElement {
$element = $this->getVisibleFormFieldElement($selector, $selectorType);
$this->webDriver->executeScript("arguments[0].scrollIntoView($options);", [$element]);
return $element;
}
/**
* When invalid HTML contains duplicates like:
* <input id="a_field_1" style="display:none">
* <textarea id="a_field_1">...</textarea>
* pick the one actually visible.
*/
public function getVisibleFormFieldElement(string $selector, string $selectorType = self::ID): RemoteWebElement
{
if ($selectorType === self::ID) {
$css = ".doc .form-data #$selector";
$selType = self::CSS_SELECTOR;
} else {
// TODO: Needs to be tested
$css = $selector;
$selType = $selectorType;
}
// Ensure at least one exists
$this->elementWait($css, $selType, true, true, false, false);
$elements = $this->getRemoteWebElements($css, $selType);
if (count($elements) === 0) {
$this->fail("Field '$selector' not found by selector: $css and selector type: $selType");
}
foreach ($elements as $el) {
try {
if ($el->isDisplayed()) {
return $el;
}
} catch (\Exception $e) {
// ignore and continue
}
}
if (count($elements) === 1) {
return $elements[0];
}
// If nothing is "displayed":
$this->fail("Field '$selector' was found (" . count($elements) . " matches) but none are displayed.");
}
protected function getElementPosition($element, array $elements): int
{
foreach ($elements as $index => $item) {
if ($item->getID() === $element->getID()) {
return $index;
}
}
return -1;
}
protected function getItemHeight($element): int
{
return (int) $element->getSize()->getHeight();
}
protected function switchToPageLanguage(string $id = siteLanguages::LANG_LV): void
{
$selectedLangSelector = 'footer div.inner-lang-block';
if ($this->elementExists("$selectedLangSelector > a.$id", self::CSS_SELECTOR, true)) {
return;
}
// Click on the lang menu container and click on the language
$this->scrollIntoViewHoverClick($selectedLangSelector, self::CSS_SELECTOR);
$this->scrollIntoViewHoverClick("footer .inner-lang-block #lang li > a#$id", self::CSS_SELECTOR);
$this->assertTrue($this->elementExists("$selectedLangSelector > a.$id", self::CSS_SELECTOR));
}
protected function gotoLocationByClickingVisibleUrl(
string $menuItem,
string $waitPageTitle,
string $menuParentItem = null,
string $waitForElementSelector = null
): void {
if ($this->webDriver->getTitle() === $waitPageTitle) {
return;
}
if ($menuParentItem) {
$this->scrollIntoViewHoverClick($this->getMenuItemSelectXpathByTitle($menuParentItem), self::XPATH);
$this->waitUntilDomReadyState();
}
$this->scrollIntoViewHoverClick($this->getMenuItemSelectXpathByTitle($menuItem), self::XPATH);
$this->pageTitleWait($waitPageTitle);
$this->waitUntilDomReadyState();
if (!is_null($waitForElementSelector)) {
$this->elementWait($waitForElementSelector, self::CSS_SELECTOR);
}
}
public function getMenuItemSelectXpathByTitle(string $title): string
{
return "//div[@id='fablesNavDropdown']//a[contains(., '$title')]";
}
public function getCompMenuItemSelectXpathByTitle(string $title): string
{
return "//div[@id='company_menu']//a[contains(., '$title')]";
}
protected function assertExpectedElements(array $expectedElements, string $elementSelectorType = null): void
{
foreach ($expectedElements as $expected) {
$this->assertTrue($this->elementExists($expected, $elementSelectorType), "Unable to locate element: $expected");
}
}
protected function getRowDataByRowId(int $rowId, array $chkBoxes = []): array
{
$data = [];
$cells = $this->webDriver->findElements(WebDriverBy::cssSelector('.table-rows .sticky-header ul.thead > li'));
$dataCells = $this->webDriver->findElements(WebDriverBy::cssSelector('.table-rows .tbody ul[id="' . $rowId . '"] > li'));
foreach ($cells as $key => $cell) {
$cellKey = $cell->getAttribute('id');
if (in_array($cellKey, $chkBoxes)) {
$class = $dataCells[$key]->findElement(WebDriverBy::cssSelector('.ncheckbox .status.chk'))->getAttribute('class');
$data[$cellKey] = strpos($class, 'chked') !== false;
} else {
$data[$cellKey] = trim($dataCells[$key]->getText());
}
}
return $data;
}
private function getTableElementIndexBy(string $idToFind, string $selector, string $selectorType = self::ID): ?int
{
$elements = $this->webDriver->findElements($this->getWebDriverBy($selector, $selectorType));
foreach ($elements as $key => $el) {
if ($el->getAttribute('id') == $idToFind) {
return $key;
}
}
return null;
}
protected function selectTableDropDownLiItemById(string $dropDownId, string $dropDownItemId): void
{
// Open search if closed
$this->scrollIntoViewHoverClick('#btnSearch', self::CSS_SELECTOR);
$this->scrollIntoViewHoverClick('.table-rows .sticky-header ul.thead > li#' . $dropDownId, self::CSS_SELECTOR, false);
$index = $this->getTableElementIndexBy($dropDownId, '.table-rows .sticky-header ul.thead > li', self::CSS_SELECTOR);
$this->scrollIntoViewHoverClick('//div[@id="tSearch"]//ul/li[' . ($index + 1) . ']', self::XPATH);
$this->scrollIntoViewHoverClick('//div[@id="tSearch"]//ul/li[' . ($index + 1) . ']//ul/li[@id="' . $dropDownItemId . '"]', self::XPATH);
}
protected function setBrowserDimensions(int $width, int $height): void
{
$this->webDriver->manage()->window()->setSize(new WebDriverDimension($width, $height));
}
/**
* @param int $zoomPercentage
* @return void
*/
protected function setBrowserContentZoom(int $zoomPercentage): void
{
if ($this->seleniumBrowser == 'firefox') {
// Firefox
$this->webDriver->executeScript(
'document.body.style.MozTransform = "scale(' . $zoomPercentage / 100 . ')";'
);
$this->webDriver->executeScript('document.body.style.MozTransformOrigin = "top";');
} else {
// Other cases
$this->webDriver->executeScript('document.body.style.zoom = "' . $zoomPercentage . '%";');
}
}
protected function isElementHorizontalScrollbarVisible(
string $selector,
string $selectorType = self::ID
): bool {
$scrollbars = $this->getElementScrollbarVisibility($selector, $selectorType);
return $scrollbars['horizontal'];
}
protected function isElementVerticalScrollbarVisible(
string $selector,
string $selectorType = self::ID
): bool {
$scrollbars = $this->getElementScrollbarVisibility($selector, $selectorType);
return $scrollbars['vertical'];
}
/** @return array<string, bool> */
private function getElementScrollbarVisibility(
string $selector,
string $selectorType = self::ID
): array {
$element = $this->getRemoteWebElement($selector, $selectorType);
$script = "
let node = arguments[0];
let overflowY = window.getComputedStyle(node)['overflow-y'];
let overflowX = window.getComputedStyle(node)['overflow-x'];
return {
vertical: (overflowY === 'scroll' || overflowY === 'auto') && node.scrollHeight > node.clientHeight,
horizontal: (overflowX === 'scroll' || overflowX === 'auto') && node.scrollWidth > node.clientWidth,
};
";
$data = (array)$this->webDriver->executeScript($script, [$element]);
return [
'vertical' => isset($data['vertical']) && $data['vertical'] == true,
'horizontal' => isset($data['horizontal']) && $data['horizontal'] == true,
];
}
protected function selectDropDownByValue(
string $selector,
string $value,
string $selectorType = self::ID
): void {
$this->elementWait($selector, $selectorType, $this->timeoutWait);
$time = microtime(true);
$totalTime = 0;
while ($totalTime < $this->timeoutWait) {
try {
(new WebDriverSelect($this->getRemoteWebElement($selector, $selectorType)))->selectByValue($value);
return;
} catch (Exception $exception) {
}
usleep(250);
$totalTime = microtime(true) - $time;
}
throw new Exception("Select value not found '$value'.");
}
protected function waitForElementEnabled(string $selector, string $selectorType = self::ID): void
{
$this->elementWait($selector, $selectorType, $this->timeoutWait);
$time = microtime(true);
$totalTime = 0;
while ($totalTime < $this->timeoutWait) {
try {
if ($this->getRemoteWebElement($selector, $selectorType)->isEnabled()) {
return;
}
} catch (Exception $exception) {
}
usleep(250);
$totalTime = microtime(true) - $time;
}
throw new Exception("Element '{$selector}' by '{$selectorType}' is not enabled.");
}
protected function waitForElementDisplay(string $selector, string $selectorType = self::ID): void
{
$this->elementWait($selector, $selectorType, $this->timeoutWait);
$time = microtime(true);
$totalTime = 0;
while ($totalTime < $this->timeoutWait) {
try {
if ($this->getRemoteWebElement($selector, $selectorType)->isDisplayed()) {
return;
}
} catch (Exception $exception) {
}
usleep(250);
$totalTime = microtime(true) - $time;
}
throw new Exception("Element '{$selector}' by '{$selectorType}' is not displayed.");
}
/**
* @param string $file
* @param array $excelValueCfg
* @param bool $containsStrings
* @return void
*/
protected function assertionsOnExcelSheetData(
string $file = '',
array $excelValueCfg = [],
bool $containsStrings = false
): void {
try {
$xmlCheckerObject = new ExcelDataExtractForTestingValues($this->applicationDownloadFolder);
$xmlCheckerObject->assertionsOnExcelSheetData($this, $file, $excelValueCfg, $containsStrings);
} catch (Exception $e) {
$this->fail($e->getMessage());
}
}
public function moveToElement(string $selector, string $selectorType = self::ID): RemoteWebElement
{
$element = $this->getVisibleFormFieldElement($selector, $selectorType);
$this->webDriver->action()->moveToElement($element)->perform();
return $element;
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,9 @@
<?php
namespace ElixirAudit\Tests\DataSetup\Constants;
class siteAccounts
{
public const ACCOUNT_SELF_EMPLOYED = 'Mareks Keišs pašn.';
public const ACCOUNT_ZEMTURU_18 = '"Zemturu 18" Biedrība';
}

View File

@ -0,0 +1,10 @@
<?php
namespace ElixirAudit\Tests\DataSetup\constants;
class siteLanguages
{
public const LANG_LV = 'lv';
public const LANG_RU = 'ru';
public const LANG_EN = 'en';
}

View File

@ -0,0 +1,30 @@
<?php
namespace ElixirAudit\Tests\DataSetup\constants;
class siteMap
{
public const PUB_INDEX = 525;
public const PUB_LOGIN = 675;
public const PUB_SEL_COMPANY = 730;
public const PUB_USER_PASS_CHANGE = 738;
public const PUB_USER_SECURITY_ENFORCEMENT = 881;
public const PUB_USER_2FA = 737;
public const PUB_USER_PASS_RECOVERY = 682;
public const PUB_USER_PROFILE = 676;
public const PUB_PARTNERS = 691;
public const CMS_LOGIN = 2;
public const SYSTEM_DASHBOARD = 752;
public const PUB_USER_MANAGER = 683;
public const PUB_UNIFIED_OBJECTS = 731;
public const PUB_TRANSACTIONS = 694;
public const PUB_SYSTEM_DASHBOARD = 752;
public const PUB_BALANCE = 728;
public const PUB_ACCOUNTING_MANAGEMENT = 695;
public const PUB_OUTGOING_DOC = 855;
public const PUB_INCOMING_DOC = 846;
public const PUB_LURSOFT_REQUESTS = 861;
public const PUB_OBJECTS = 693;
public const PUB_ACCOUNTING_CL = 696;
public const PUB_REPORTS_CL = 706;
}

View File

@ -0,0 +1,57 @@
<?php
namespace ElixirAudit\Tests\DataSetup\constants;
use BRSystems\Core\App\pubUsers\inc\pubUsersController;
class siteUsers
{
const loginCmsAdmin = 'cmsUser';
const loginAppSelfEmployed = 'appSelfEmployed';
const loginAppHouseManagement = 'appHouseManagement';
const superUserPrefix = 'su_';
const superUserPass = 'AppTestPass2024';
const superUserPassEncrypted = pubUsersController::suUserPassword;
const superUser2FA = pubUsersController::sSUser2FASecret;
const loginData = [
self::loginCmsAdmin => [
'id' => 12,
'user' => 'testadmin',
'password' => '5MR0q4V34191B0ENq',
'2fa' => pubUsersController::sSUser2FASecret,
'url' => 'lslsadmin/login',
'email' => 'keiss.mareks@gmail.com',
'profile_url' => 'zsmkadmin/profile',
'data' => [],
],
self::loginAppSelfEmployed => [
'id' => 12,
'sel_comp_id' => 23,
'name' => 'Mareks',
'surname' => 'Keišs',
'user' => 'testmareks',
'email' => 'keiss.mareks@gmail.com',
'phone' => '28639957',
'password' => '5MR0q4V34191B0ENq',
'2fa' => pubUsersController::sSUser2FASecret,
'url' => 'ienakt-gramatvedibas-sistema',
'profile_url' => 'gramatvedibas-sistema/lietotaja-profils',
'data' => [],
],
self::loginAppHouseManagement => [
'id' => 111,
'sel_comp_id' => 178,
'name' => 'Mareks',
'surname' => 'Test 2',
'user' => 'keiss.mareks3@gmail.com',
'email' => 'keiss.mareks3@gmail.com',
'phone' => '+37128639957',
'password' => '5MR0q4V34191B0ENq',
'2fa' => pubUsersController::sSUser2FASecret,
'url' => 'ienakt-gramatvedibas-sistema',
'profile_url' => 'gramatvedibas-sistema/lietotaja-profils',
'data' => [],
],
];
}

View File

@ -0,0 +1,160 @@
<?php
declare(strict_types=1);
namespace ElixirAudit\Tests\DataSetup\Traits\App\Helpers;
use ElixirAudit\Tests\DataSetup\Constants\siteLanguages;
trait assertionsTrait
{
private $baseTableData = '#base_table > div.table-data';
private $colHeaderSelector = '#cms-table-drop-marker ul.thead';
private $tableBodyContainer = '#cms-table-drop-marker .table-rows .tbody';
private $tablePagerContainer = "//ul[@class='dx pager-cnt']";
public function assertStringContains(string $haystack, string $needle): void
{
$this->assertTrue(strpos($haystack, $needle) !== false);
}
public function assertTableTitle(string $expectedTitle, ?string $expectedSubTitle = null): void
{
$sel = "$this->baseTableData li.breadcrumb-item.active";
$this->elementWait($sel, self::CSS_SELECTOR);
$this->assertElementTextContainsByCss($sel, $expectedTitle, "On selector: $sel");
if ($expectedSubTitle) {
$this->assertElementTextContainsByCss("$this->baseTableData li:nth-child(3)", $expectedSubTitle);
}
}
public function assertFormTitle(string $expectedTitle): void
{
$sel = '.form-data li.breadcrumb-item.active';
$this->elementWait($sel, self::CSS_SELECTOR);
$this->assertElementTextContainsByCss($sel, $expectedTitle);
}
public function assertElementValueById(string $id, string $expectedValue, string $message = ''): void
{
$this->assertSame($expectedValue, $this->byId($id)->getAttribute('value'), $message);
}
public function assertElementValueByCss(string $selector, string $expectedText, string $message = ''): void
{
$this->assertSame($expectedText, $this->byCssSelector($selector)->getAttribute('value'), $message);
}
public function assertElementTextByCss(string $selector, string $expectedText, string $message = ''): void
{
$this->assertSame($expectedText, $this->byCssSelector($selector)->getText(), $message);
}
public function assertElementTextContainsByCss(string $selector, string $expectedText, string $message = ''): void
{
$this->assertStringContainsString($expectedText, $this->byCssSelector($selector)->getText(), $message);
}
public function assertFieldError(string $fieldId, string $expectedErrorMessage): void
{
// Wait for the error class to be set on input
$this->elementWait("div.validate.v-error #$fieldId", self::CSS_SELECTOR);
// Hover the element
$this->webDriver->action()->moveToElement($this->byId($fieldId))->perform();
// Wait for the error bubble
$this->elementWait("#$fieldId + div.errMsg", self::CSS_SELECTOR);
// Get an error message from the error bubble
$this->assertEquals($expectedErrorMessage, $this->byCssSelector("#$fieldId + div.errMsg")->getText());
}
public function assertCmsCheckboxStateById(string $id, bool $isChecked = true, string $message = ''): void
{
$exists = $this->elementExists("#$id.chk.chked", self::CSS_SELECTOR, true);
$this->assertSame($isChecked, $exists, $message);
}
public function assertCmsCheckboxState(string $selector, bool $shouldBeChecked = true, string $message = ''): void
{
$exists = $this->elementExists($selector . ' .chk.chked', self::CSS_SELECTOR, true);
$this->assertSame($shouldBeChecked, $exists, $message);
}
public function assertCmsTableNoResults(string $lang): void
{
switch ($lang) {
case siteLanguages::LANG_LV:
$msg = 'Nav ierakstu, lūdzu pārbaudiet filtru un mēģiniet vēlreiz!';
break;
case siteLanguages::LANG_RU:
$msg = 'Результаты не найдены данные, пожалуйста, проверьте фильтр и попробуйте еще раз!';
break;
case siteLanguages::LANG_EN:
default:
$msg = 'No result data found, please check your filter and try again!';
}
$this->assertElementTextContainsByCss($this->tableBodyContainer . ' > div', $msg);
}
public function assertCmsTableRow(int $row, array $values, bool $scrollIntoView = false): void
{
$rowSel = $this->tableBodyContainer . " > ul:nth-child($row)";
if ($scrollIntoView) {
$this->scrollElementIntoView($rowSel, self::CSS_SELECTOR);
}
$col = 3;
foreach ($values as $value) {
if (is_string($value) || is_int($value)) {
$this->assertCmsTableRowData($row, $col, $value);
} else {
$this->assertCmsCheckboxState("$rowSel > li:nth-child($col)", $value);
}
$col++;
}
}
public function assertCmsTableRowData($row, $column, $expectedText): void
{
$selector = $this->tableBodyContainer . " > ul:nth-child($row) > li:nth-child($column) > div";
$exists = $this->elementExists($selector, self::CSS_SELECTOR, true);
if (empty($expectedText) && !$exists) {
$selector = $this->tableBodyContainer . " > ul:nth-child($row) > li:nth-child($column)";
}
$errorMessage = "Table record with text '$expectedText' not found in column $column, selector: $selector";
$this->assertElementTextByCss($selector, $expectedText, $errorMessage);
}
public function assertFormValueById(string $id, string $expectedValue): void
{
if (strpos($id, '_visible_text')) {
/** Visible text is used to assert the chosen selected value in form. */
$id = str_replace('_visible_text', '_chosen', $id);
$field = $this->getFormElementSelector($id) . " > a.chosen-single > span";
$this->assertElementTextByCss($field, $expectedValue, "Field '$field' text is not '$expectedValue'");
return;
}
$field = $this->getVisibleFormFieldElement($id);
$this->assertSame($expectedValue, $field->getAttribute('value'), "Field '$id' text is not '$expectedValue'");
}
private function assertDataRowCountInFormSection(string $settings, int $count = 0)
{
$this->assertCount($count, $this->elementsByCssSelector("#$settings > div > div.data > ul > li"));
}
public function assertSaveButton($exists = true): void
{
$elementExists = $this->elementExists('.buttons_bottom #fsave', self::CSS_SELECTOR, true);
$this->assertSame($exists, $elementExists, 'Save button state mismatch');
}
public function assertBackButton($exists = true): void
{
$elementExists = $this->elementExists('.buttons_bottom #tback', self::CSS_SELECTOR, true);
$this->assertSame($exists, $elementExists, 'Back button state mismatch');
}
}

View File

@ -0,0 +1,74 @@
<?php
namespace ElixirAudit\Tests\DataSetup\Traits\App\Helpers;
use Facebook\WebDriver\Remote\RemoteWebElement;
use ElixirAudit\Tests\DataSetup\Constants\siteLanguages;
trait commonTrait
{
public function switchToLanguage(string $language = siteLanguages::LANG_LV): void
{
$selector = "footer .inner-lang-block > a";
// Wait for error class to be set on input
$this->elementWait($selector, self::CSS_SELECTOR);
$aTag = $this->getRemoteWebElement($selector, self::CSS_SELECTOR);
// Return if already selected
if ($aTag->getAttribute('class') == $language) {
return;
}
$this->scrollIntoViewHoverClick($selector, self::CSS_SELECTOR);
$this->scrollIntoViewHoverClick("$selector + div li a#$language" , self::CSS_SELECTOR);
$this->elementWait("$selector.$language", self::CSS_SELECTOR);
$this->waitUntilDomReadyState();
}
public function toggleCheckbox(string $chkSelector, bool $tick = true): void
{
$element = $this->getVisibleFormFieldElement($chkSelector, self::CSS_SELECTOR);
$this->scrollElementIntoView($chkSelector, self::CSS_SELECTOR);
$isChecked = str_contains($element->getAttribute('class'), "chked");
if ($isChecked !== $tick) {
$element->click();
$this->waitUntilDomReadyState();
}
}
public function selectOptionByAttrDataOptionArrayIndex(string $id, $index): void
{
$select = "#$id > a > span";
$option = "#" . $id . ' > div li[data-option-array-index="' . $index . '"]';
$this->scrollIntoViewHoverClick($select, self::CSS_SELECTOR);
$this->scrollIntoViewHoverClick($option, self::CSS_SELECTOR);
}
public function getElementInfo(RemoteWebElement $element): array
{
$tagName = $element->getTagName();
$classes = array_filter(explode(' ', $element->getAttribute('class') ?? ''));
return [
'tag' => $tagName,
'classes' => $classes,
'type' => $element->getAttribute('type'), // relevant for <input>
'id' => $element->getAttribute('id'),
'name' => $element->getAttribute('name'),
'isSelect' => $tagName === 'select',
'isInput' => $tagName === 'input',
'isTextarea' => $tagName === 'textarea',
'isDatePicker'=> in_array('date-picker', $classes),
'isDropBox' => in_array('drop-box', $classes),
'isDisabled' => $element->getAttribute('disabled') !== null,
];
}
public function selectCompMenuItem(object $page): void
{
$this->scrollIntoViewHoverClick("li.comp_profile > a", self::CSS_SELECTOR, false);
$this->waitUntilDomReadyState();
$this->scrollIntoViewHoverClick($this->getCompMenuItemSelectXpathByTitle($page->menuItem), self::XPATH);
}
}

View File

@ -0,0 +1,66 @@
<?php
declare(strict_types=1);
namespace ElixirAudit\Tests\DataSetup\Traits\App\Helpers;
/**
* Trait for common CMS Dialog interactions
*/
trait dialogTrait
{
public function openConfirmDialog(string $triggerSelector, bool $scrollIntoView = false): void
{
if ($scrollIntoView) {
$this->scrollElementIntoView($triggerSelector, self::CSS_SELECTOR);
}
$this->byCssSelector($triggerSelector)->click();
$this->waitUntilDomReadyState();
}
public function cmsConfirmDialogActionYes(bool $waitRemove = true): void
{
$this->cmsConfirmDialogTriggerActions('#confirmDialog .buttons a#buttonYes', $waitRemove);
}
public function cmsConfirmDialogActionCancel(): void
{
$this->cmsConfirmDialogTriggerActions('#confirmDialog .buttons a#buttonNo');
}
public function cmsConfirmDialogSliderActionYes(string $id = '#buttonYes'): void
{
$this->cmsConfirmDialogTriggerActions("#dialogSlider .buttons a$id");
}
public function cmsConfirmDialogSliderActionClose(): void
{
$this->cmsConfirmDialogTriggerActions('#dialogSlider div.header.section-heading > h3 > a');
}
public function cmsConfirmDialogTriggerActions($actionSelector, bool $waitRemove = true): void
{
$this->scrollIntoViewHoverClick($actionSelector, self::CSS_SELECTOR);
if ($waitRemove) {
$this->elementWaitRemoved($actionSelector, self::CSS_SELECTOR);
}
$this->waitUntilDomReadyState();
}
public function assertDialogSliderHeaderMessage(string $message): void
{
$this->assertSame($message, $this->byCssSelector('#dialogSlider div.header.section-heading > h3')->getText());
}
public function assertDialogSliderBodyMessage(string $message): void
{
$this->assertSame($message, $this->byCssSelector('#dialogSlider div.slider-wrapper > div div > h4')->getText());
}
public function assertDialogSliderBodyDescMessage(string $message): void
{
$this->assertSame($message, $this->byCssSelector('#dialogSlider div.slider-wrapper > div div > p')->getText());
}
}

View File

@ -0,0 +1,328 @@
<?php
namespace ElixirAudit\Tests\DataSetup\Traits\App\Helpers;
trait formLayoutTrait
{
public function getFormElementSelector(string $id, string $selectorType = self::ID): string {
if ($selectorType !== self::ID) {
$this->fail("Only supports ID selector type for now.");
}
return ".doc .form-data #$id";
}
public function sendKeysAndTriggerValidation(string $selector, $value, string $selectorType = self::ID): void
{
// Hover the parent element
$containerXpath = $this->getFieldValidateContainerXpath($selector, $selectorType);
$this->elementWait($containerXpath, self::XPATH);
$this->scrollElementIntoView($containerXpath, self::XPATH);
$this->webDriver->action()->moveToElement($this->byXPath($containerXpath))->perform();
try {
// IMPORTANT: Pages can have multiple elements with the same id.
// Always type into the visible one.
$remoteElement = $this->getVisibleFormFieldElement($selector, $selectorType);
$classes = $remoteElement->getAttribute('class');
if (str_contains($classes, 'hasDatepicker') || str_contains($classes, 'chz')) {
/** Handle datepicker and dropdown differently */
if (str_contains($classes, 'hasDatepicker')) {
$this->setDatepickerValue($selector, $value, $selectorType);
}
if (str_contains($classes, 'chz')) {
$this->setDropdownValueWithJquery($selector, $value);
}
return;
}
// Clear & update field value
$remoteElement->click();
$remoteElement->clear()->sendKeys($value);
// Wait for field validation
$this->executeJSBlur();
} catch (\Exception $e) {
$msg = "\nFailed on element $selectorType: $selector";
$msg .= "\nContainer xpath: $containerXpath";
$msg .= "\nValue: $value";
$msg .= "\nMessage: {$e->getMessage()}";
$this->fail($msg);
}
$this->waitUntilDomReadyState();
}
public function setDatepickerValue(string $selector, $value, string $selectorType = self::ID): void
{
try {
$this->getRemoteWebElement($selector, $selectorType)->click()->clear()->sendKeys($value);
$this->executeJSBlur();
} catch (\Exception $e) {
$this->fail("Failed on setting Date value on: \nSelector: $selector \nValue: $value \nSelector type: $selectorType");
}
}
public function setDropdownValueWithJquery(string $id, $value): void
{
try {
// Trigger blur/change to ensure the chosen dropdown update
$this->executeJS("$('select#$id').val('$value').trigger('chosen:updated').trigger('change');");
$this->executeJSBlur();
$this->waitUntilDomReadyState();
} catch (\Exception $e) {
$this->fail("Failed on selecting dropdown value with jQuery on element id: $id");
}
}
public function setDropdownValueByIndexWithJquery(string $id, int $index): void
{
// eq(0) = first, eq(1) = second ...
$value = $this->executeJS("return $('select#$id').find('option').eq($index).val();");
$this->setDropdownValueWithJquery($id, $value);
}
/**
* Multi select box
*/
public function selectItemInMultiSelectBox(string $selector, string $value): void
{
/**
* This widget is a dual multi-select:
* - left: select#items_from
* - right: select#items_to
* - add: a.selector-add
* We select option(s) by value on the left and click "Add",
* then wait until the option appears on the right.
*/
try {
$this->openFormSection($selector);
$rootCss = "#$selector #multiselect_1";
$fromCss = "$rootCss select#items_from";
$toCss = "$rootCss select#items_to";
$addCss = "$rootCss a.selector-add";
$this->scrollElementIntoView($fromCss, self::CSS_SELECTOR);
$this->select($this->byCssSelector($fromCss))->selectByValue($value);
// Click "Add" (move to the right)
$this->scrollIntoViewHoverClick($addCss, self::CSS_SELECTOR);
// Wait until the moved option exists in the right select
$this->elementWait(
$toCss . ' option[value="' . $value . '"]',
self::CSS_SELECTOR,
true,
true,
false,
false
);
$this->executeJSBlur();
} catch (\Exception $e) {
$this->fail("Failed on selecting item in multi select box on element id: $selector");
}
}
public function removeItemInMultiSelectBox(string $selector, string $value): void
{
/** Remove a single value from the RIGHT box using "Remove". */
try {
$this->openFormSection($selector);
$rootCss = "#$selector #multiselect_1";
$toCss = "$rootCss select#items_to";
$this->scrollElementIntoView($toCss, self::CSS_SELECTOR);
$toSelect = $this->byCssSelector($toCss);
// Ensure the option is present before trying to remove (clear error message if not)
if (!$this->elementExists($toCss . ' option[value="' . $value . '"]', self::CSS_SELECTOR, true)) {
$this->fail("Value '$value' not found in selected multi select box.");
}
$this->select($toSelect)->selectByValue($value);
$this->scrollIntoViewHoverClick("$rootCss a.selector-remove", self::CSS_SELECTOR);
$this->executeJSBlur();
} catch (\Exception $e) {
$this->fail("Failed on removing item in multi select box on element id: $selector");
}
}
public function chooseAllInMultiSelectBox(string $selector): void
{
try {
$this->openFormSection($selector);
$this->scrollIntoViewHoverClick("#$selector #multiselect_1 .available a.chooseall", self::CSS_SELECTOR);
$this->executeJSBlur();
} catch (\Exception $e) {
$this->fail("Failed on choose-all in multi select box on element id: $selector");
}
}
public function clearAllInMultiSelectBox(string $selector): void
{
try {
$this->openFormSection($selector);
$this->scrollIntoViewHoverClick("#$selector #multiselect_1 .chosen a.clearall", self::CSS_SELECTOR);
$this->executeJSBlur();
} catch (\Exception $e) {
$this->fail("Failed on clear-all in multi select box on element id: $selector");
}
}
private function getMultiSelectChosenValues(string $selector): array
{
$selector = "#$selector #multiselect_1 select#items_to option";
if (!$this->elementExists($selector, self::CSS_SELECTOR, true)) {
return [];
}
$options = $this->getRemoteWebElements($selector, self::CSS_SELECTOR);
$values = [];
foreach ($options as $opt) {
$values[] = (string)$opt->getAttribute('value');
}
return $values;
}
public function assertMultiSelectChosenContains(string $selector, array $expected): void
{
$actual = $this->getMultiSelectChosenValues($selector);
$missing = array_values(array_diff($expected, $actual));
$this->assertEmpty(
$missing,
'Multiselect is missing expected values: ' . implode(', ', $missing) .
'. Actual: ' . implode(', ', $actual)
);
}
public function assertMultiSelectChosenEquals(string $selector, array $expected): void
{
$actual = $this->getMultiSelectChosenValues($selector);
$this->assertEquals(
$expected,
$actual,
'Multiselect chosen values mismatch. Expected: ' . implode(', ', $expected) .
'. Actual: ' . implode(', ', $actual)
);
}
/**
* Form Settings
*/
public function openFormSection(string $selector = 'psettings'): void
{
$settings = $this->byId($selector);
if (!strpos($settings->getAttribute('class'), 'hide')) {
$settings->click();
//$this->waitUntilDomReadyState();
}
}
public function closeFormSection(string $selector = 'psettings'): void
{
$settings = $this->byId($selector);
if (strpos($settings->getAttribute('class'), 'hide')) {
$settings->click();
//$this->waitUntilDomReadyState();
}
}
private function addNewDataRowInFormSection(string $settings)
{
$this->byCssSelector("#$settings > div > div.add_more > a")->click();
$this->waitUntilDomReadyState();
}
/**
* Form actions
*/
public function cancelMainForm(): void
{
$this->scrollIntoViewHoverClick('#base_table > div.doc div.title > div.fables-light-background-color > div > a', self::CSS_SELECTOR);
$this->waitUntilDomReadyState();
}
public function goBackToTable(): void
{
$this->scrollIntoViewHoverClick('.buttons_bottom #tback', self::CSS_SELECTOR);
$this->waitUntilDomReadyState();
}
public function saveMainForm(): void
{
$this->scrollIntoViewHoverClick('.buttons_bottom #fsave', self::CSS_SELECTOR);
$this->waitUntilDomReadyState();
}
public function saveMainFormAndAssertSuccess(string $lang): void
{
$this->saveMainForm();
$this->assertFormSuccessfullySavedMessage($lang);
}
/**
* Quick generate data for errors and save
*/
private function createNewDataRowsTestErrorsAndFillWithData(int $rows = 1, array $data = [], array $cfg = []): void
{
for ($row = 1; $row <= $rows; $row++) {
$this->createNewDataRowTestErrorsAndFillForSave($data, $cfg);
}
}
private function createNewDataRowTestErrorsAndFillForSave(array $testData, array $rowCfg = []): void
{
if (empty($testData) || empty($rowCfg)) {
return;
}
$elements = $this->getRemoteWebElements("{$rowCfg['container']} > ul", self::CSS_SELECTOR);
$this->byCssSelector($rowCfg['newRow'])->click();
$newIndex = (count($elements) + 1);
// Wait for the row to pop up
$this->elementWait($rowCfg['rowKey'] . $newIndex);
foreach ($testData as $field) {
// Change fields unique id in found a key
$field['v'] = str_replace('%ID%', $newIndex, $field['v']);
$id = $field['id'] . $newIndex;
$fieldPath = "{$rowCfg['inputPath']}#$id";
$fieldParentPath = str_replace('%FIELD%', $id, $rowCfg['inputXPath']);
$ribbonErrorSelector = "div.custom-status .cdrop [data-id='$id'] .emsg";
if ($field['mandatory'] ?? false) {
$this->webDriver->executeScript("$('$fieldPath').focus().blur();");
// Wait for the error
$this->elementWait("{$fieldParentPath}[contains(@class,'v-error')]", self::XPATH);
$this->elementWait($ribbonErrorSelector, self::CSS_SELECTOR);
// Check top ribbon error text
$actualText = $this->byCssSelector($ribbonErrorSelector)->getText();
$this->assertEquals(($field['o_text']), ($actualText));
$this->byCssSelector($fieldPath)->sendKeys($field['v']);
$this->webDriver->executeScript("$('$fieldPath').blur();");
$this->elementWaitRemoved("{$fieldParentPath}[contains(@class,'v-error')]", self::XPATH);
$this->elementWaitRemoved($ribbonErrorSelector, self::CSS_SELECTOR);
} elseif ($field['v'] ?? false) {
$this->byCssSelector($fieldPath)->clear();
$this->byCssSelector($fieldPath)->sendKeys($field['v']);
$this->webDriver->executeScript("$('$fieldPath').focus().blur();");
$this->elementWait("{$fieldParentPath}[contains(@class,'v-ok')]", self::XPATH);
$this->assertTrue(
$this->elementExists("{$fieldParentPath}[contains(@class,'v-ok')]", self::XPATH)
);
}
}
}
}

View File

@ -0,0 +1,345 @@
<?php
declare(strict_types=1);
namespace ElixirAudit\Tests\DataSetup\Traits\App\Helpers;
use Facebook\WebDriver\WebDriverBy;
use ElixirAudit\Tests\DataSetup\Constants\siteLanguages;
trait formValidationTrait
{
public function getCompulsoryKey(): string
{
return 'compulsory';
}
public function getTypeKey(): string
{
return 'type';
}
public function getTypeText(): string
{
return 'text';
}
public function getTypeEmail(): string
{
return 'email';
}
public function getTypePhone(): string
{
return 'phone';
}
public function getTypeNumber(): string
{
return 'number';
}
public function getTypeDate(): string
{
return 'date';
}
public function getTypeSelect(): string
{
return 'select';
}
public function assertFieldErrorValidations(string $id, array $field, string $langCode): void
{
// Assert compulsory field error is shown after leaving the field empty.
if ($field[$this->getCompulsoryKey()]) {
if ($field[$this->getTypeKey()] == $this->getTypeSelect()) {
$this->setDropdownValueByIndexWithJquery($id, 0);
} else {
$this->sendKeysAndTriggerValidation($id, '');
}
$this->assertFieldHasCompulsoryError($id, $langCode);
}
switch ($field[$this->getTypeKey()]) {
case $this->getTypeDate():
// Assert invalid date error is shown after entering invalid date.
if ($field[$this->getCompulsoryKey()]) {
$this->sendKeysAndTriggerValidation($id, 'test');
$this->assertFieldHasCompulsoryError($id, $langCode);
}
$this->sendKeysAndTriggerValidation($id, '123');
$this->assertInvalidDateError($id, $langCode);
$this->sendKeysAndTriggerValidation($id, date($this->PUBDateFormat . ' ' . $this->PUBTime));
$this->assertInvalidDateError($id, $langCode);
break;
case $this->getTypeNumber():
$this->sendKeysAndTriggerValidation($id, 'asd');
$this->assertFieldHasNotValidNumberError($id, $langCode);
break;
case $this->getTypeEmail():
$this->sendKeysAndTriggerValidation($id, 'test');
$this->assertInvalidEmailError($id, $langCode);
break;
case $this->getTypePhone():
$this->sendKeysAndTriggerValidation($id, 'test');
$this->assertInvalidPhoneError($id, $langCode);
break;
case $this->getTypeText():
default:
break;
}
}
public function fillingInDefaultRequiredFieldValue(string $fieldType, string $id): void
{
if ($fieldType === $this->getTypeDate()) {
$this->sendKeysAndTriggerValidation($id, date($this->PUBDateFormat));
} elseif ($fieldType === $this->getTypeSelect()) {
$this->setDropdownValueByIndexWithJquery($id, 1);
} elseif ($fieldType === $this->getTypeNumber()) {
$this->sendKeysAndTriggerValidation($id, 0);
} elseif ($fieldType === $this->getTypePhone()) {
$this->sendKeysAndTriggerValidation($id, '+371123456789');
} elseif ($fieldType === $this->getTypeEmail()) {
$this->sendKeysAndTriggerValidation($id, 'test@zutenis.lv');
} else {
$this->sendKeysAndTriggerValidation($id, 'default value');
}
}
public function assertCompulsoryFields(array $compulsoryFields, string $langCode): void
{
// Assert the right amount of compulsory error is displayed in the sticky status bar
$allCompErrors = $this->elementsByCssSelector("#custom-sticky-status-cnt > div > div > div.cdrop > div");
$this->assertCount(count($compulsoryFields), $allCompErrors);
$compErrors = [];
foreach ($allCompErrors as $remoteWebElement) {
$compErrors[$remoteWebElement->getAttribute('data-id')]
= $remoteWebElement->findElement(WebDriverBy::cssSelector('span.emsg'))->getText();
}
foreach ($compulsoryFields as $id) {
$this->assertFieldHasCompulsoryError($id, $langCode);
$this->assertSame($compErrors[$id], $this->getFieldErrorMessage($id));
}
}
public function assertFieldsGeneralError(array $fields): void
{
// Assert the right amount of compulsory error is displayed in the sticky status bar
$allCompErrors = $this->elementsByCssSelector("#custom-sticky-status-cnt > div > div > div.cdrop > div");
$compErrors = [];
foreach ($allCompErrors as $remoteWebElement) {
$compErrors[$remoteWebElement->getAttribute('data-id')]
= $remoteWebElement->findElement(WebDriverBy::cssSelector('span.emsg'))->getText();
}
foreach ($fields as $field => $expected) {
$err = "On field: $field, expected: $expected, got: {$compErrors[$field]}";
$this->assertSame($compErrors[$field], $expected, $err);
}
}
public function assertFieldHasNotValidNumberError(string $id, string $lang = ''): void
{
switch ($lang) {
case siteLanguages::LANG_LV:
$this->assertFieldHasError($id, 'Norādīts nekorekts cipars!');
break;
case siteLanguages::LANG_RU:
$this->assertFieldHasError($id, 'Указан неправильно цифра!');
break;
case siteLanguages::LANG_EN:
default:
$this->assertFieldHasError($id, 'Not a valid number specified!');
break;
}
}
public function assertInvalidDateError(string $id, string $lang = ''): void
{
switch ($lang) {
case siteLanguages::LANG_LV:
$this->assertFieldHasError($id, 'Ievadīts nekorekts datums!');
break;
case siteLanguages::LANG_RU:
case siteLanguages::LANG_EN:
default:
$this->assertFieldHasError($id, 'Invalid date specified!');
break;
}
}
public function assertInvalidEmailError(string $id, string $lang = ''): void
{
switch ($lang) {
case siteLanguages::LANG_LV:
$this->assertFieldHasError($id, 'Ievadīta nekorekta e-pasta adrese!');
break;
case siteLanguages::LANG_RU:
$this->assertFieldhasError($id, 'Не указан правильный адрес электронной почты!');
break;
case siteLanguages::LANG_EN:
default:
$this->assertFieldHasError($id, 'Not a valid email address specified!');
break;
}
}
public function assertInvalidPhoneError(string $id, string $lang = ''): void
{
switch ($lang) {
case siteLanguages::LANG_LV:
$this->assertFieldHasError($id, 'Norādīts nepareizs tālrunis!');
break;
case siteLanguages::LANG_RU:
$this->assertFieldhasError($id, 'Указан неверный телефон!');
break;
case siteLanguages::LANG_EN:
default:
$this->assertFieldHasError($id, 'Invalid telephone specified!');
break;
}
}
public function assertPartnerDocNrInUse(string $id, string $lang = ''): void
{
switch ($lang) {
case siteLanguages::LANG_LV:
$this->assertFieldHasError($id, 'Partnera dokuments ar šo numuru jau ievadīts!');
break;
case siteLanguages::LANG_RU:
$this->assertFieldhasError($id, 'Партнерский документ с этим номером уже введен!');
break;
case siteLanguages::LANG_EN:
default:
$this->assertFieldHasError($id, 'Partner has already document with this number entered!');
break;
}
}
public function assertFieldHasCompulsoryError(string $id, $lang = ''): void
{
switch ($lang) {
case siteLanguages::LANG_LV:
$this->assertFieldHasError($id, 'Lūdzu aizpildiet lauku!');
break;
case siteLanguages::LANG_RU:
$this->assertFieldHasError($id, 'Пожалуйста, заполните поле!');
break;
case siteLanguages::LANG_EN:
default:
$this->assertFieldHasError($id, 'Please fill in the field!');
break;
}
}
public function assertErrorWhileSavingForm($lang = null): void
{
switch ($lang) {
case siteLanguages::LANG_LV:
$this->assertFormErrorMessage(
'Saglabājot Dokumentu, Tika Atrastas Dažas Kļūdas',
'Lai turpinātu, izlabojiet norādītās kļūdas. Uz katras kļūdas variet noklikšķināt, tādējādi ātri nokļūstot uz izvēlēto kļūdaino lauku formā!'
);
break;
case siteLanguages::LANG_RU:
$this->assertFormErrorMessage(
'При Сохранении Документа Обнаружены Ошибки',
'Пожалуйста, исправьте эти ошибки, прежде чем продолжить. Вы можете щелкнуть каждое поле, чтобы быстро перейти к полю ошибки!'
);
break;
case siteLanguages::LANG_EN:
default:
$this->assertFormErrorMessage(
'Some Errors Were Found While Saving Document',
'Please correct these mistakes before continuing, you may click on each if the field to quickly get to error field!'
);
break;
}
}
public function getFieldValidateContainerXpath(string $selector, string $selectorType = self::ID): string
{
$element = $this->getRemoteWebElement($selector, $selectorType);
$id = $element->getAttribute('id');
return "//div[contains(@class, 'validate') and .//@id='$id']";
}
public function getFieldValidateErrorContainerXpath(string $id): string
{
return "//div[contains(@class, 'validate') and contains(@class, 'v-error') and .//@id='$id']";
}
public function getFieldErrorMessage(string $id): string
{
return $this->byXPath($this->getFieldValidateErrorContainerXpath($id) . "//div[contains(@class, 'errMsg')]")->getText();
}
public function moveOnFieldValidateContainer(string $id): void
{
$containerXPath = $this->getFieldValidateErrorContainerXpath($id);
$this->elementWait($containerXPath, self::XPATH);
$this->webDriver->action()->moveToElement($this->byXPath($containerXPath))->perform();
}
public function assertFieldHasError(string $id, string $expectedMessage): void
{
$errorXPath = $this->getFieldValidateErrorContainerXpath($id) . "//div[contains(@class, 'errMsg')]";
$actualMessage = '';
try {
$this->moveOnFieldValidateContainer($id);
// Wait for the error message element to be present and visible
$this->elementWait($errorXPath, self::XPATH, true, true, true, false);
$actualMessage = $this->byXPath($errorXPath)->getText();
$this->assertSame($expectedMessage, $actualMessage); // TODO: Varbūt vajag gaidīt kamēr parādas teksts.
} catch (\Exception $exception) {
$msg = "Failed on error XPath: $errorXPath" . PHP_EOL . "With the message: {$exception->getMessage()}";
$msg .= PHP_EOL . "Expected message '$expectedMessage', got '$actualMessage'";
$this->fail($msg);
}
}
public function assertFieldIsOk(string $id): void
{
// Use XPath to find the .validate container with v-ok class for the specific field
$containerXPath = "//div[contains(@class, 'validate') and contains(@class, 'v-ok') and .//@id='$id']";
$this->assertTrue($this->elementExists($containerXPath, self::XPATH, true), "Xpath '$containerXPath'");
}
public function assertFormErrorMessage(string $messageTitle, string $messageDescription): void
{
$validatorCustomerMsg = '#custom-sticky-status-cnt > div > div.validator-custom-msg';
$selector = $validatorCustomerMsg . '.err-show > h3';
$descSelector = $validatorCustomerMsg . '.err-show > div.desc > p';
$this->scrollElementIntoView($selector, self::CSS_SELECTOR);
$this->assertElementTextContainsByCss($selector, $messageTitle);
$this->assertElementTextContainsByCss($descSelector, $messageDescription);
}
public function assertFormSuccessfullySavedMessage(string $lang = ''): void
{
$selector = '#custom-sticky-status-cnt > div > div > h3';
$this->scrollElementIntoView($selector, self::CSS_SELECTOR);
switch ($lang) {
case siteLanguages::LANG_LV:
$this->assertElementTextContainsByCss($selector, "Dati Veiksmīgi Saglabāti!");
break;
case siteLanguages::LANG_RU:
$this->assertElementTextContainsByCss($selector, "Данные Были Успешно Сохранены!");
break;
case siteLanguages::LANG_EN:
default:
$this->assertElementTextContainsByCss($selector, "Data Has Been Successfully Saved!");
break;
}
}
}

View File

@ -0,0 +1,176 @@
<?php
declare(strict_types=1);
namespace ElixirAudit\Tests\DataSetup\Traits\App\Helpers;
/**
* Tests provide a small per-language config; this trait expands it into the object-structure
* used by existing tests ($page->menuItem, $page->gM->pageTitle, etc.).
*/
trait pageDataTrait
{
private array $uoDefaultTableColumns = [
'h_checkbox',
'h_id',
'h_a_title',
'h_a_desc',
'h_cl_name',
'h_a_created',
'h_a_valid_from',
'h_a_valid_till',
'h_status',
'h_buttons',
];
private array $uoDefaultTableColumnsToSkip = [
'h_checkbox',
'h_status',
'h_buttons',
];
/**
* Build expanded page data for Unified Objects tests.
*
* Input config (per language):
* [
* LANG_CODE => [
* 'url' => '...',
* 'menuItem' => '...',
* 'pageTitle' => '...',
* 'objectItem' => '...',
* 'messagesExist' => ['mod' => '...', 'sub' => '...'], // partial ok
*
* 'tableColumns' => [
* 'remove' => ['h_cl_name'],
* 'add' => ['h_custom' => 'Custom label'], // adds to order + adds label
* ],
* 'rename' => ['h_a_title' => 'Title'], // label override for existing column
*
* 'tableColumnsToSkip' => [
* 'add' => ['h_custom'],
* 'remove' => ['h_status'],
* ],
* ],
* ]
*
* Extra supported keys (optional):
* - 'dropdownActions' => ['inew' => '...', ...]
* - 'tableColumnsOrder' => ['h_checkbox', 'h_id', ...] // overrides default order for this language/test
*
* @return array<string, object> languageCode => pageData object
*/
protected function getPageData(array $config): array
{
$out = [];
foreach ($config as $langCode => $cfg) {
if (!is_array($cfg)) {
continue;
}
// TODO: Table columns and skip columns should be simplified.
$tableCfg = is_array($cfg['tableColumns'] ?? null) ? $cfg['tableColumns'] : [];
$rename = is_array($tableCfg['rename'] ?? null) ? $tableCfg['rename'] : [];
$removeCols = is_array($tableCfg['remove'] ?? null) ? $tableCfg['remove'] : [];
$addCols = is_array($tableCfg['add'] ?? null) ? $tableCfg['add'] : [];
$skipCfg = is_array($cfg['tableColumnsToSkip'] ?? null) ? $cfg['tableColumnsToSkip'] : [];
$skipAdd = is_array($skipCfg['add'] ?? null) ? $skipCfg['add'] : [];
$skipRemove = is_array($skipCfg['remove'] ?? null) ? $skipCfg['remove'] : [];
$baseOrder = is_array($cfg['tableColumnsOrder'] ?? null)
? $cfg['tableColumnsOrder']
: $this->uoDefaultTableColumns;
$tableColumns = $this->buildTableColumnsFromBase($baseOrder, $removeCols, array_keys($addCols));
$tableColumnsToSkip = $this->buildTableColumnsToSkip($removeCols, $skipAdd, $skipRemove);
// Labels map:
// - rename overrides existing labels
// - add provides labels for new columns (and can also override if same key)
$labels = [];
foreach ($rename as $id => $label) {
$labels[(string)$id] = (string)$label;
}
foreach ($addCols as $id => $label) {
$labels[(string)$id] = (string)$label;
}
$expanded = [
'url' => isset($cfg['url']) ? (string)$cfg['url'] : '',
'menuItem' => isset($cfg['menuItem']) ? (string)$cfg['menuItem'] : '',
'menuParentItem' => isset($cfg['menuItem']) ? (string)$cfg['menuParentItem'] : '',
'gM' => (object)[
'pageTitle' => isset($cfg['pageTitle']) ? (string)$cfg['pageTitle'] : '',
'objectItem' => isset($cfg['objectItem']) ? (string)$cfg['objectItem'] : '',
'messagesExist' => is_array($cfg['messagesExist'] ?? null) ? $cfg['messagesExist'] : [],
'tableColumns' => $labels,
'dropdownActions' => is_array($cfg['dropdownActions'] ?? null) ? $cfg['dropdownActions'] : [],
'validationErrors' => is_array($cfg['validationErrors'] ?? null) ? $cfg['validationErrors'] : [],
'rowActions' => is_array($cfg['rowActions'] ?? null) ? $cfg['rowActions'] : [],
'dialog' => is_array($cfg['dialog'] ?? null) ? $cfg['dialog'] : [],
],
'tableColumns' => $tableColumns,
'tableColumnsToSkip' => $tableColumnsToSkip,
];
$out[(string)$langCode] = (object) $expanded;
}
return $out;
}
/**
* @param string[] $baseOrder
* @param string[] $remove
* @param string[] $addIds
* @return string[]
*/
private function buildTableColumnsFromBase(array $baseOrder, array $remove, array $addIds): array
{
$cols = array_merge(array_values(array_diff($baseOrder, $remove)), $addIds);
// Keep order, drop duplicates.
$seen = [];
$out = [];
foreach ($cols as $id) {
$id = (string) $id;
if (isset($seen[$id])) {
continue;
}
$seen[$id] = true;
$out[] = $id;
}
return $out;
}
/**
* @param string[] $removedColumns
* @param string[] $skipAdd
* @param string[] $skipRemove
* @return string[]
*/
private function buildTableColumnsToSkip(array $removedColumns, array $skipAdd, array $skipRemove): array
{
$allRemove = array_merge($removedColumns, $skipRemove);
$skip = array_diff($this->uoDefaultTableColumnsToSkip, $allRemove);
$skip = array_merge(array_values($skip), $skipAdd);
// Keep order, drop duplicates.
$seen = [];
$out = [];
foreach ($skip as $id) {
$id = (string) $id;
if (isset($seen[$id])) {
continue;
}
$seen[$id] = true;
$out[] = $id;
}
return $out;
}
}

View File

@ -0,0 +1,565 @@
<?php
namespace ElixirAudit\Tests\DataSetup\Traits\App\Helpers;
use Facebook\WebDriver\Exception\WebDriverException;
use Facebook\WebDriver\WebDriverBy;
use Facebook\WebDriver\WebDriverKeys;
trait tableLayoutTrait
{
private $baseTableData = '#base_table > div.table-data';
private $colHeaderSelector = '#cms-table-drop-marker ul.thead';
private $tableBodyContainer = '#cms-table-drop-marker .table-rows .tbody';
private $tablePagerContainer = "//ul[@class='dx pager-cnt']";
public function testTableHeaderTitles(array $idToTitleText = null): void
{
if (is_null($idToTitleText)) {
return;
}
foreach ($idToTitleText as $id => $textToValidate) {
$this->assertTrue(
$this->elementExists("$this->colHeaderSelector #$id", self::CSS_SELECTOR),
"Failed locating element by CSS selector: $this->colHeaderSelector #$id"
);
switch ($id) {
case 'h_checkbox':
break;
case 'h_buttons':
$this->assertStringContainsString(
$textToValidate,
$this->byCssSelector("$this->colHeaderSelector #$id > a")->getText()
);
break;
default:
$this->assertEquals(
$textToValidate,
$this->byCssSelector("$this->colHeaderSelector #$id div")->getText()
);
break;
}
}
}
public function testTableRowBaseCheckboxes(): void
{}
public function testTableBaseFunctionality()
{
// Test header columns
// Test column sort
// Test column reorder
// Test rows per page
// Test column visibility
// Test row search
}
/** Table settings */
public function openTableSettings(string $id = 'iTableSettings', string $class = 'base-table-settings'): void
{
$headerSelector = "#dialogSlider.$class .slider-wrapper .header > h3";
if (
$this->elementExists($headerSelector, self::CSS_SELECTOR, true) &&
$this->byCssSelector($headerSelector)->isDisplayed()
) {
return;
}
$this->selectTableActionById($id);
$this->waitTableSlider($headerSelector);
}
public function closeTableSettings(): void
{
$headerSelector = '#dialogSlider .slider-wrapper .header > h3';
if (
$this->elementExists($headerSelector, self::CSS_SELECTOR) &&
$this->byCssSelector($headerSelector)->isDisplayed()
) {
$this->scrollElementIntoView($headerSelector, self::CSS_SELECTOR);
$this->byCssSelector("$headerSelector a.close")->click();
$this->elementWaitRemoved("$headerSelector a.close", self::CSS_SELECTOR);
}
}
public function updateTableSettingsViewMaxRows(int $rows = 40): void
{
$this->openTableSettings();
$this->setTableSettingsMaxRowsPerPage($rows);
$this->cmsConfirmDialogSliderActionYes();
$this->waitUntilDomReadyState();
$rowsListed = $this->getRemoteWebElements("$this->tableBodyContainer > ul", self::CSS_SELECTOR);
$this->assertTrue(count($rowsListed) <= $rows);
}
public function setTableSettingsMaxRowsPerPage(int $rowsPerPage = 10): void
{
$this->openTableSettings();
$inputSelector = '#dialogSlider .slider-wrapper #pBase #a_rec_per_page';
$this->scrollElementIntoView($inputSelector, self::CSS_SELECTOR);
$this->byCssSelector($inputSelector)->clear()->sendKeys($rowsPerPage);
$this->webDriver->executeScript('$("' . $inputSelector . '").focus().blur();');
}
public function selectTableSettingsCheckbox(string $id, bool $visibility): void
{
$chkSelector = "#dialogSlider .slider-wrapper .document-settings .inner-cnt > ul #$id";
$this->scrollElementIntoView($chkSelector, self::CSS_SELECTOR);
$element = $this->byCssSelector($chkSelector);
$isChecked = str_contains($element->getAttribute('class'), "chked");
if ($isChecked !== $visibility) {
$element->click();
}
}
public function selectTableRow(int $row): void
{
$chkSelector = $this->tableBodyContainer . " > ul:nth-child($row) > li.first > div > div.chk";
$this->toggleCheckbox($chkSelector);
}
public function resetTableSettingsColumnConfig(array $defaultConfig): void
{
$this->openTableSettings();
$this->scrollIntoViewHoverClick("#dialogSlider .slider-wrapper #reset_cfg", self::CSS_SELECTOR);
$this->waitUntilDomReadyState();
$this->elementWaitRemoved("#dialogSlider .slider-wrapper a.close", self::CSS_SELECTOR);
$this->testTableHeaderTitles($defaultConfig);
}
public function updateTableSettingsColumnsVisibility(array $config): void
{
$this->openTableSettings();
foreach ($config as $id => $data) {
$this->selectTableSettingsCheckbox($id, $data);
}
$this->cmsConfirmDialogSliderActionYes();
$this->waitUntilDomReadyState();
foreach ($config as $id => $visibility) {
$elementExists = $this->elementExists("$this->colHeaderSelector > #$id", self::CSS_SELECTOR, true);
$this->assertEquals($visibility, $elementExists, "Element id: $id");
}
}
public function reorderTableSettingsColumnConfig(array $orderedIds): void
{
$this->openTableSettings();
$allItemsSel = '#dialogSlider .slider-wrapper .document-settings .inner-cnt li';
$allItems = $this->getRemoteWebElements($allItemsSel, self::CSS_SELECTOR);
foreach ($orderedIds as $targetPosition => $itemId) {
$elementXpath = "//div[@id='dialogSlider']/div[2]//ul/li[.//*[@id='$itemId']]";
$targetPosition += 1; // First is reserved
$this->dragTableSettingListItemToPosition($elementXpath, $allItems, $targetPosition);
}
$this->cmsConfirmDialogSliderActionYes();
foreach ($orderedIds as $itemId) {
$exists = $this->elementExists("$this->colHeaderSelector > #$itemId", self::CSS_SELECTOR, true);
$this->assertTrue($exists, 'Failed on: ' . $itemId);
}
}
public function reorderTableColumn(array $orderedIds): void
{
foreach ($orderedIds as $targetPosition => $itemId) {
$elementXpath = "//*[@id='cms-table-drop-marker']//li[@id='$itemId']";
$allItemsSel = $this->colHeaderSelector . ' > li';
$allItems = $this->getRemoteWebElements($allItemsSel, self::CSS_SELECTOR);
$targetPosition += 2;
$this->dragTableSettingListItemToPosition($elementXpath, $allItems, $targetPosition);
}
foreach ($orderedIds as $itemId) {
$exists = $this->elementExists("$this->colHeaderSelector > #$itemId", self::CSS_SELECTOR, true);
$this->assertTrue($exists, 'Failed on: ' . $itemId);
}
}
public function dragTableSettingListItemToPosition(string $xpath, array $allItems, int $targetPosition): void
{
$sourceElement = $this->scrollElementIntoView($xpath, self::XPATH);
$currentPosition = $this->getElementPosition($sourceElement, $allItems);
if ($currentPosition === $targetPosition) {
return;
}
$targetElement = $allItems[$targetPosition];
$movingLeft = $currentPosition > $targetPosition;
// Target near edge of the target element — avoids misfiring on wide columns
// Offset is from the center: negative = left side, positive = right side
$targetWidth = $targetElement->getSize()->getWidth();
$xOffset = $movingLeft
? -intdiv($targetWidth, 2) + 5 // near left edge
: intdiv($targetWidth, 2) - 5; // near right edge
try {
$this->webDriver->action()
->clickAndHold($sourceElement)
->moveToElement($targetElement, $xOffset, 0)
->release()
->perform();
$this->waitUntilDomReadyState();
} catch (WebDriverException $e) {
$this->assertFalse(
sprintf(
"dragListItemToPosition failed.\nSource xpath: %s\nError: %s",
$xpath,
$e->getMessage()
)
);
}
}
public function waitTableSlider($headerSelector): void
{
$this->elementWait($headerSelector, self::CSS_SELECTOR);
$this->scrollElementIntoView($headerSelector, self::CSS_SELECTOR);
$exists = $this->elementExists($headerSelector, self::CSS_SELECTOR, true);
$this->assertTrue($exists, "Failed locating element by CSS selector: $headerSelector");
}
/** Table actions */
public function selectTableActionById($id): void
{
$this->scrollIntoViewHoverClick("$this->colHeaderSelector #h_buttons a", self::CSS_SELECTOR);
$this->scrollIntoViewHoverClick("#table-actions li#$id a", self::CSS_SELECTOR);
$this->waitUntilDomReadyState();
}
public function deleteTableRow($row, bool $scrollIntoView = false): void
{
$selector = $this->tableBodyContainer . " > ul:nth-child($row) > li.last.actions > div > a#ldelete";
$this->openConfirmDialog($selector, $scrollIntoView);
$this->cmsConfirmDialogActionYes();
}
public function editTableRow($row, bool $scrollIntoView = false): void
{
$selector = $this->tableBodyContainer . " > ul:nth-child($row) > li.last.actions > div > a#ledit";
if ($scrollIntoView) {
$this->scrollElementIntoView($selector, self::CSS_SELECTOR);
}
$this->byCssSelector($selector)->click();
$this->waitUntilDomReadyState();
}
public function editTableRowById(int $id, bool $scrollIntoView = false): void
{
$selector = $this->tableBodyContainer . " ul[id='$id'] > li.last.actions > div > a#ledit";
if ($scrollIntoView) {
$this->scrollElementIntoView($selector, self::CSS_SELECTOR);
}
$this->byCssSelector($selector)->click();
$this->waitUntilDomReadyState();
}
public function clickRowExcelExport($row, bool $scrollIntoView = false): void
{
$selector = $this->tableBodyContainer . " > ul:nth-child($row) > li > div > a.download_pdf";
if ($scrollIntoView) {
$this->scrollElementIntoView($selector, self::CSS_SELECTOR);
}
$this->byCssSelector($selector)->click();
$this->waitUntilDomReadyState();
}
public function clickRowExcelExportById(int $id, bool $scrollIntoView = false): void
{
$selector = $this->tableBodyContainer . " > ul[id='$id'] > li > div > a.download_pdf";
if ($scrollIntoView) {
$this->scrollElementIntoView($selector, self::CSS_SELECTOR);
}
$this->byCssSelector($selector)->click();
$this->waitUntilDomReadyState();
}
public function addNewRecord(): void
{
$this->scrollIntoViewHoverClick('.table-bactions ' . $this->getNewButtonId(), self::CSS_SELECTOR);
$this->waitUntilDomReadyState();
}
public function getNewButtonId(): string
{
return '#bButtonNew';
}
public function cloneTableRow(int $row): void
{
$this->selectTableRow($row);
$this->byId('clone')->click();
$this->waitUntilDomReadyState();
}
/** Table search */
public function openCmsTableSearch(): void
{
$this->byId("btnSearch")->click();
}
public function resetCmsTableSearch(): void
{
$this->byCssSelector(".sticky-header .search-hidden #tSearch > ul #tclear")->click();
$this->waitUntilDomReadyState();
}
public function searchCmsTableByColumn(string $columnID, string $value, bool $submit = true): void
{
if (!$this->getRemoteWebElement('tSearch')->isDisplayed()) {
$this->openCmsTableSearch();
}
$search = ".sticky-header .search-hidden #tSearch > ul";
$selector = "$search #$columnID";
$parentLi = $this->byCssSelector($selector)->findElement(WebDriverBy::xpath("./ancestor::li[1]"));
if (strpos($parentLi->getAttribute('class'), 'dropBox') !== false) {
$this->scrollIntoViewHoverClick("//input[@id='$columnID']/preceding-sibling::span[1]", self::XPATH);
$selectedValue = "//input[@id='$columnID']/ancestor::li//ul/li[@id='$value']";
$this->scrollIntoViewHoverClick($selectedValue, self::XPATH);
$this->waitUntilDomReadyState();
// We don't need to submit the search as DropBox auto submits the form.
} else {
$element = $this->byCssSelector($selector);
$element->click()->clear()->sendKeys($value);
if ($submit) {
$element->click()->sendKeys(WebDriverKeys::ENTER);
$this->waitUntilDomReadyState();
}
}
}
public function sortTableByColumn(string $columnID, string $orderWay = 'ASC'): void
{
$colSelector = "$this->colHeaderSelector #$columnID";
$this->assertTrue(
$this->elementExists($colSelector, self::CSS_SELECTOR),
"Failed locating element by CSS selector: $this->colHeaderSelector #$columnID"
);
if (
$orderWay == 'ASC' &&
(
$this->elementHasClass('sortDesc', $colSelector, self::CSS_SELECTOR) ||
!$this->elementHasClass('sort', $colSelector, self::CSS_SELECTOR)
)
) {
$this->byCssSelector($colSelector)->click();
$this->elementWait("$this->colHeaderSelector #$columnID.sort", self::CSS_SELECTOR);
}
if (
$orderWay == 'DESC' &&
!$this->elementHasClass('sortDesc', $colSelector, self::CSS_SELECTOR)
) {
if (!$this->elementHasClass('sort', $colSelector, self::CSS_SELECTOR)) {
$this->byCssSelector($colSelector)->click();
$this->elementWait("$this->colHeaderSelector #$columnID.sort", self::CSS_SELECTOR);
}
$this->byCssSelector($colSelector)->click();
$this->elementWait("$this->colHeaderSelector #$columnID.sortDesc", self::CSS_SELECTOR);
}
}
/** Footer helper functions **/
public function navigateThroughPager($expectedPages, $pageCallback = null, int $fix = 7)
{
$this->waitUntilDomReadyState();
$this->assertCurrentPage(1);
$this->assertPreviousButtonExists(false);
// If only 1 page, then run the callback and go back.
if ($expectedPages === 1) {
$this->assertNextButtonExists(false);
if ($pageCallback) {
call_user_func($pageCallback, 1);
}
return;
}
$this->assertNextButtonExists($this->shouldShowNextButton(1, $expectedPages));
// Navigate through each page - test the next button.
for ($page = 2; $page <= $expectedPages; $page++) {
if (!$this->shouldShowNextButton($page, $expectedPages)) {
$this->clickPageNumber($page);
} else {
$this->clickNext();
}
$this->waitUntilDomReadyState();
$this->assertCurrentPage($page);
$this->assertPreviousButtonExists($this->shouldShowPreviousButton($page, $expectedPages, $fix));
$this->assertNextButtonExists($this->shouldShowNextButton($page, $expectedPages, $fix));
if ($pageCallback) {
call_user_func($pageCallback, $page);
}
}
// Go back to page 1 - test the previous button
for ($page = $expectedPages - 1; $page >= 1; $page--) {
if ($this->shouldShowPreviousButton($page, $expectedPages,$fix)) {
$this->clickPrevious();
} else {
$this->clickPageNumber($page);
}
$this->waitUntilDomReadyState();
$this->assertCurrentPage($page);
$this->assertPreviousButtonExists($this->shouldShowPreviousButton($page, $expectedPages,$fix));
$this->assertNextButtonExists($this->shouldShowNextButton($page, $expectedPages,$fix));
}
}
public function shouldShowPreviousButton($currentPage, $totalPages, int $fix = 7): bool
{
/** Previous is displayed only if total pages over 7, and we are over the fifth page. */
return $totalPages > $fix && $currentPage > 4;
}
public function shouldShowNextButton($currentPage, $totalPages, int $fix = 7): bool
{
/** The Next button is displayed if there are more than 7 pages, and we're not on the last 4 pages. */
return $totalPages > $fix && $currentPage < $totalPages - 3;
}
public function clickNext(): void
{
$this->scrollIntoViewHoverClick(
"$this->tablePagerContainer/li[contains(@class, 'last')]//a[@class='nextp']",
self::XPATH,
);
}
public function clickPrevious(): void
{
$this->scrollIntoViewHoverClick(
"$this->tablePagerContainer/li[contains(@class, 'first')]//a[@class='prevp']",
self::XPATH,
);
}
public function clickPageNumber($pageNumber): void
{
$this->scrollIntoViewHoverClick("$this->tablePagerContainer/li[@id='$pageNumber']//a", self::XPATH);
}
public function assertPreviousButtonExists(bool $exists = true): void
{
$selector = "$this->tablePagerContainer/li[contains(@class, 'first')]//a[@class='prevp']";
$this->assertSame($exists, $this->elementExists($selector, self::XPATH, true));
}
public function assertNextButtonExists(bool $exists = true): void
{
$selector = "$this->tablePagerContainer/li[contains(@class, 'last')]//a[@class='nextp']";
$this->assertSame($exists, $this->elementExists($selector, self::XPATH, true));
}
public function assertCurrentPage($pageNumber): void
{
$selectedPage = $this->byXPath("$this->tablePagerContainer/li[contains(@class, 'sel')]");
$actualPage = (int)$selectedPage->getAttribute('id');
$this->assertEquals($pageNumber, $actualPage, "Wrong page. Expected: $pageNumber, actual: $actualPage");
// Check <a> has 'selected'
$link = $selectedPage->findElement(WebDriverBy::tagName('a'));
$msg = "Page $pageNumber link has not been marked as selected";
$this->assertStringContainsString('selected', $link->getAttribute('class'), $msg);
}
public function assertTablePagerCount(string $pager): void
{
$selector = "#cms-table-drop-marker .pager .rcount";
$this->assertStringContainsString($pager, $this->byCssSelector($selector)->getText());
}
public function toggleTableRowLastCheckbox(int $id, bool $tick = true): void
{
$chkSelector = "//ul[@id='$id']//li[not(contains(@class, 'first'))][last()]//div[@class='ncheckbox']";
$this->scrollElementIntoView($chkSelector, self::XPATH);
$element = $this->byXPath($chkSelector);
$isChecked = str_contains($element->getAttribute('class'), "chked");
if ($isChecked !== $tick) {
$element->click();
$this->waitUntilDomReadyState();
}
}
public function searchCmsTableByColumnId(int $id, bool $submit = true): void
{
$this->searchCmsTableByColumn('id', (string) $id, $submit);
}
public function sortCmsTableByColumnId(string $order = 'ASC'): void
{
$this->sortTableByColumn('h_id', $order);
}
public function validateTableOrderBy($page, array $expectedData): void
{
$col = 3;
foreach ($page->tableColumns as $tableColumn) {
if (in_array($tableColumn, $page->tableColumnsToSkip ?? [])) {
continue;
}
if (!isset($expectedData[$tableColumn])) {
$col++;
continue;
}
$this->sortTableByColumn($tableColumn);
$this->assertCmsTableRowData(1, $col, $expectedData[$tableColumn]['ASC']);
$this->sortTableByColumn($tableColumn, 'DESC');
$this->assertCmsTableRowData(1, $col, $expectedData[$tableColumn]['DESC']);
$col++;
}
}
}

View File

@ -0,0 +1,116 @@
<?php
namespace ElixirAudit\Tests\DataSetup\Traits\App;
use BRSystems\Core\Library\cGoogle2FA\cGoogle2FA;
use ElixirAudit\Tests\DataSetup\Constants\siteAccounts;
trait pubUsersTrait
{
function logIntoApplicationByUserType(
$eUserLogin,
bool $acceptCookies = true,
string $siteAccount = siteAccounts::ACCOUNT_SELF_EMPLOYED
) {
$loginData = $this->getLoginCredentialsByType($eUserLogin);
$this->url($loginData['url']);
$this->waitUntilDomReadyState();
// Check if we landed on dashboard - already logged in
if ($this->elementExists('report_period_chosen')) {
return;
}
// Else continue with the login
$this->elementWait('user_login');
$this->byId("user_login")->sendKeys($loginData['user']);
$this->byId("user_password")->sendKeys($loginData['password']);
$this->byCssSelector("form#frm_input div#agree_to_terms")->click();
$this->byCssSelector("form#frm_input button.btn.btn-block")->click();
$this->waitUntilDomReadyState();
$this->awaitAndFill2FASecurityAfterLoginRequest($loginData);
if (strlen($siteAccount) > 0) {
$this->awaitAndSelectAccount($siteAccount);
} else {
sleep(1); // Sleep - otherwise awaitAndAcceptCookies() fail.
}
$this->awaitAndAcceptCookies();
}
function fillAndSubmitPasswordChangeForm(array $data)
{
if ($this->byId("old_password")->isEnabled()) {
$this->byId("old_password")->clear()->sendKeys($data['oldPass']);
}
$this->byId("new_password")->sendKeys($data['newPass']);
$this->byId("rnew_password")->sendKeys($data['newPass']);
$this->byCssSelector("form#pwd_cnt > button.btn.btn-block")->click();
$this->waitUntilDomReadyState();
}
function awaitAndProceedWithSecuritySetupRequest()
{
$this->elementWait('a.enable_2fa', self::CSS_SELECTOR);
$this->byCssSelector('a.enable_2fa')->click();
$this->waitUntilDomReadyState();
}
function awaitAndFill2FASecurityAfterLoginRequest(array $loginData): void
{
// Wait for form to load 2fa elements & continue with testing
$this->elementWait('frm_2fa_input');
// Validate code
$oGoogle2FA = new cGoogle2FA();
$next2FACode = $oGoogle2FA->getGoogleAuthCode($loginData['2fa']);
foreach (str_split($next2FACode) as $i => $char) {
$this->byCssSelector("form#frm_2fa_input div#fields input[tabindex='" . ++$i . "']")->sendKeys($char);
}
$this->waitUntilDomReadyState();
}
function awaitAndAcceptCookies(): void
{
if ($this->elementExists('div.accept_cookies a#accept-cookies', self::CSS_SELECTOR)) {
$this->elementWait('div#popup_onload.accept_cookies a#accept-cookies', self::CSS_SELECTOR);
$this->byId('accept-cookies')->click();
$this->elementWaitRemoved('#popup_onload.accept_cookies', self::CSS_SELECTOR);
$this->waitUntilDomReadyState();
}
}
function awaitAndSelectAccount(string $accountTitleToSelect): void
{
// Wait for company selection screen by default user has now multiple companies
$xPathSelector = "//div[@class='container']/div/div/form" .
"//li[not(contains(@style,'display:none'))]/a/i[contains(., '$accountTitleToSelect')]";
$this->elementWait($xPathSelector, self::XPATH);
$this->assertEquals($accountTitleToSelect, $this->byXPath($xPathSelector)->getText());
$this->byXPath($xPathSelector)->click();
$this->waitUntilDomReadyState();
}
function awaitAndSetup2FASecurity(): string
{
$this->elementWait('div span#secret', self::CSS_SELECTOR);
$securityCode = $this->byCssSelector('div span#secret')->getText();
// Validate code
$oGoogle2FA = new cGoogle2FA();
$next2FACode = $oGoogle2FA->getGoogleAuthCode($securityCode);
// Fill form 2fa data
foreach (str_split($next2FACode) as $i => $char) {
$this->byCssSelector("form#frm_2fa_input div#fields input[tabindex='" . ++$i . "']")->sendKeys($char);
}
$this->waitUntilDomReadyState();
return $securityCode;
}
}

View File

@ -0,0 +1,107 @@
<?php
declare(strict_types=1);
namespace ElixirAudit\Tests\DataSetup\traits\Cms;
trait cmsAssertionsTrait
{
public function assertModuleTitle($moduleTitle): void
{
$this->elementWait('.module-title', self::CSS_SELECTOR);
$this->assertElementTextByCss('.module-title', $moduleTitle);
}
public function assertFormTitle(string $expectedTitle): void
{
$this->elementWait('h2.title', self::CSS_SELECTOR);
$this->assertElementTextContainsByCss('h2.title', $expectedTitle);
}
public function assertFormSuccessfullySavedMessage(): void
{
$selector = '.form-data .save-status';
$this->scrollElementIntoView($selector, self::CSS_SELECTOR);
$this->assertElementTextContainsByCss($selector, "DATA SUCCESSFULLY SAVED");
}
public function assertTableSuccessfullyDeletedMessage(): void
{
$selector = '.cnt .save-status';
$this->scrollElementIntoView($selector, self::CSS_SELECTOR);
$this->assertElementTextByCss($selector, 'RECORD SUCCESSFULLY DELETED');
}
public function assertElementValueById(string $id, string $expectedValue, string $message = ''): void
{
$actualValue = $this->byId($id)->getAttribute('value');
$this->assertSame($expectedValue, $actualValue, $message);
}
public function assertElementValueByCss(string $selector, string $expectedText, string $message = ''): void
{
$actualText = $this->byCssSelector($selector)->getAttribute('value');
$this->assertSame($expectedText, $actualText, $message);
}
public function assertElementTextByCss(string $selector, string $expectedText, string $message = ''): void
{
$actualText = $this->byCssSelector($selector)->getText();
$this->assertSame($expectedText, $actualText, $message);
}
public function assertElementTextContainsByCss(string $selector, string $expectedText, string $message = ''): void
{
$actualText = $this->byCssSelector($selector)->getText();
$this->assertStringContainsString($expectedText, $actualText, $message);
}
public function assertCmsCheckboxState(string $selector, bool $shouldBeChecked, string $message = ''): void
{
$exists = $this->elementExists($selector . ' .chk.chked', self::CSS_SELECTOR, true);
$this->assertSame($shouldBeChecked, $exists, $message);
}
public function assertFieldHasNotValidNumberError(string $id): void
{
$this->assertFieldHasError($id, 'Not a valid number specified!');
}
public function assertFieldHasCompulsoryError(string $id): void
{
$this->assertFieldHasError($id, 'Please fill in the field!');
}
public function assertFieldHasError(string $id, string $expectedMessage): void
{
// Use XPath to find the .validate container that has the specific input ID and the v-error class
$containerXPath = "//div[contains(@class, 'validate') and contains(@class, 'v-error') and .//input[@id='$id']]";
$errorXPath = "$containerXPath//div[contains(@class, 'errMsg')]";
$this->elementWait($containerXPath, self::XPATH);
// Hover the input field to trigger the visibility of the error bubble (as done in formLayoutTrait)
$inputElement = $this->byId($id);
$this->webDriver->action()->moveToElement($inputElement)->perform();
// Wait for the error message element to be present and visible
$this->elementWait($errorXPath, self::XPATH, true, true, true, false);
$actualMessage = $this->byXPath($errorXPath)->getText();
$this->assertEquals($expectedMessage, $actualMessage);
}
public function assertFieldIsOk(string $id): void
{
// Use XPath to find the .validate container with v-ok class for the specific input
$containerXPath = "//div[contains(@class, 'validate') and contains(@class, 'v-ok') and .//input[@id='$id']]";
$this->assertTrue($this->elementExists($containerXPath, self::XPATH));
}
public function assertCmsTableRowData($row, $column, $expectedText): void
{
$selector = "#cms-table-drop-marker > div.table-rows > div > ul:nth-child($row) > li:nth-child($column) > div";
$errorMessage = "Table record with text '$expectedText' not found in column $column";
$this->assertElementTextByCss($selector, $expectedText, $errorMessage);
}
}

View File

@ -0,0 +1,48 @@
<?php
declare(strict_types=1);
namespace ElixirAudit\Tests\DataSetup\traits\Cms;
/**
* Trait for common CMS Dialog interactions
*/
trait cmsDialogTrait
{
public function getNewButtonId(): string
{
return '#bButtonNew';
}
public function openCmsConfirmDialog(string $triggerSelector): void
{
$this->scrollIntoViewHoverClick($triggerSelector, self::CSS_SELECTOR);
}
/**
* Click the confirmation button on a CMS dialog
*/
public function cmsConfirmDialogActionYes(): void
{
$selector = 'buttonYes';
// Wait for the button to be ready
$this->waitForElementDisplay($selector, self::ID);
$this->waitForElementEnabled($selector, self::ID);
// Move to the element to simulate human focus before clicking
$element = $this->byId($selector);
$this->webDriver->action()->moveToElement($element)->perform();
$element->click();
$this->waitUntilDomReadyState();
}
public function cmsConfirmDialogActionCancel(): void
{
$selector = '#confirmDialog > div > div.header.ui-draggable-handle > a';
$this->waitForElementDisplay($selector, self::CSS_SELECTOR);
$this->byCssSelector($selector)->click();
$this->waitUntilDomReadyState();
}
}

View File

@ -0,0 +1,59 @@
<?php
declare(strict_types=1);
namespace ElixirAudit\Tests\DataSetup\traits\Cms;
/**
* Trait for common CMS Table interactions
*/
trait cmsTableTrait
{
public function saveMainFormAndAssertSuccess(): void
{
$this->scrollIntoViewHoverClick('.buttons_bottom #fsave', self::CSS_SELECTOR);
$this->waitUntilDomReadyState();
$this->assertFormSuccessfullySavedMessage();
}
public function cancelMainForm(): void
{
$this->scrollIntoViewHoverClick('.buttons_bottom #fcancel', self::CSS_SELECTOR);
$this->waitUntilDomReadyState();
}
public function goBackToTable(): void
{
$this->scrollIntoViewHoverClick('.buttons_bottom #tback', self::CSS_SELECTOR);
$this->waitUntilDomReadyState();
}
public function deleteCmsTableRow($row): void
{
$selector = "#cms-table-drop-marker > div.table-rows > div > ul:nth-child($row) > li.w20.last.actions.even > div > a#ldelete";
$this->openCmsConfirmDialog($selector);
$this->cmsConfirmDialogActionYes();
$this->assertTableSuccessfullyDeletedMessage();
}
public function editCmsTableRow($row): void
{
$selector = "#cms-table-drop-marker > div.table-rows > div > ul:nth-child($row) > li.w20.last.actions.even > div > a#ledit";
$this->scrollIntoViewHoverClick($selector, self::CSS_SELECTOR);
$this->waitUntilDomReadyState();
}
public function editCmsTableRowById(int $id): void
{
$selector = "#cms-table-drop-marker > div.table-rows > div > ul#($id) > li.w20.last.actions.even > div > a#ledit";
$this->scrollIntoViewHoverClick($selector, self::CSS_SELECTOR);
$this->waitUntilDomReadyState();
}
public function clickRowExcelExport($row): void
{
$selector = "#cms-table-drop-marker > div.table-rows > div > ul:nth-child($row) > li > div > a.download";
$this->scrollIntoViewHoverClick($selector, self::CSS_SELECTOR);
$this->waitUntilDomReadyState();
}
}

View File

@ -0,0 +1,461 @@
<?php
namespace ElixirAudit\Tests;
use Exception;
use SimpleXMLElement;
use ZipArchive;
class ExcelDataExtractForTestingValues
{
/**
* Global Temp folder
*/
private $globalExtractionFolder;
/**
* Temp folder for single file
*/
private $extractionFolder;
/**
* Active sheet file
*/
private $activeSheetId;
/**
* Default sheet file
*/
private $defaultActiveSheetId = 1;
/**
* Workbook XML file path within zip
*/
private $workbookXmlFile = '/xl/workbook.xml';
/**
* SharedStrings XML file path within zip
*/
private $sharedStringsFile = '/xl/sharedStrings.xml';
/**
* Sheet XML file path within zip
*/
private $SheetBaseFile = '/xl/worksheets/sheet%d.xml';
/**
* SharedStrings XML object
* SimpleXMLElement $sharedStringsObject
*/
private $sharedStringsObject = null;
/**
* SharedStrings XML object
* SimpleXMLElement $activeSheetObject
*/
private $activeSheetObject = null;
private const ERROR_NODE_NOT_FOUND = 10;
public function __construct(string $tempDirectory)
{
$this->globalExtractionFolder = $tempDirectory;
if (!strlen($this->globalExtractionFolder)) {
throw new Exception("No Temp extraction directory specified!");
}
// Set shared directory
if (!file_exists($this->globalExtractionFolder)) {
mkdir($this->globalExtractionFolder, 0777, true);
}
}
/**
* @param string $file
* @return bool|null
* @throws Exception
*/
public function loadFileForExtraction(string $file): ?bool
{
// Fail on invalid file
if (!file_exists($file) || !is_file($file)) {
throw new Exception("Base extraction file not found!");
}
$this->activeSheetObject = null;
$this->sharedStringsObject = null;
// Set sheet ID
$this->activeSheetId = $this->defaultActiveSheetId;
// Create file temp folder
$fileInfo = pathinfo($file);
$this->extractionFolder = $this->globalExtractionFolder . '/' . $fileInfo['filename'] . '_data_';
$i = 1;
while (file_exists($this->extractionFolder . $i)) {
$i++;
}
$this->extractionFolder .= $i;
// Copy base file as zip
mkdir($this->extractionFolder, 0777, true);
$newFile = $this->globalExtractionFolder . '/' . $fileInfo['filename'] . '.zip';
copy($file, $newFile);
// Extract xls file data
$zip = new ZipArchive();
$res = $zip->open($newFile);
if ($res === true) {
$zip->extractTo($this->extractionFolder);
$zip->close();
} else {
throw new Exception("Data extraction from base file has failed!");
}
// Validate that we got base xml files
if (
!file_exists($this->extractionFolder . $this->workbookXmlFile)
|| !file_exists($this->extractionFolder . $this->sharedStringsFile)
|| !file_exists(sprintf($this->extractionFolder . $this->SheetBaseFile, $this->activeSheetId))
) {
throw new Exception("Structure files are missing!");
}
return true;
}
/**
* @param string $sheetTitle
* @return int
* @throws Exception
*/
public function getSheetIdByTitle(string $sheetTitle): int
{
if (
strlen($sheetTitle) == 0
|| !file_exists($this->extractionFolder . $this->workbookXmlFile)
) {
throw new Exception("Sheet title or base workbook file is missing!");
}
$xmlObject = simplexml_load_file($this->extractionFolder . $this->workbookXmlFile);
if ($xmlObject instanceof SimpleXMLElement) {
foreach ($xmlObject->sheets->sheet as $sheet) {
if ($sheet['name'] == $sheetTitle) {
return (int)$sheet['sheetId'];
}
}
}
throw new Exception("Excel '$sheetTitle' sheet not found!");
}
/**
* @param int $sheetId
* @return bool|null
* @throws Exception
*/
public function setActiveWorkingSheetById(int $sheetId): ?bool
{
if (
$sheetId <= 0
|| !file_exists(sprintf($this->extractionFolder . $this->SheetBaseFile, $sheetId))
) {
throw new Exception("Sheet ID or sheet XML file is missing!");
}
if ($this->activeSheetId != $sheetId) {
$this->activeSheetId = $sheetId;
$this->activeSheetObject = null;
}
return true;
}
/**
* @param int $x
* @param int $y
* @return string|null
* @throws Exception
*/
public function extractTextFromCell(int $x, int $y): ?string
{
if ($x <= 0 || $y <= 0) {
throw new Exception("Invalid coordinates!");
}
if (
$this->activeSheetId <= 0
|| !file_exists(sprintf($this->extractionFolder . $this->SheetBaseFile, $this->activeSheetId))
) {
throw new Exception("Sheet ID or sheet XML file is missing!");
}
$value = null;
// Load sheet XMl if not loaded
if (is_null($this->activeSheetObject)) {
$this->activeSheetObject = simplexml_load_file(
sprintf($this->extractionFolder . $this->SheetBaseFile, $this->activeSheetId)
);
// Without namespace XPath queries won't work
if ($this->activeSheetObject instanceof SimpleXMLElement) {
$namespaces = $this->activeSheetObject->getDocNamespaces();
if (is_array($namespaces)) {
foreach ($namespaces as $prefix => $namespace) {
$this->activeSheetObject->registerXPathNamespace($prefix ?: 'default', $namespace);
}
}
}
}
// Look for data
if ($this->activeSheetObject instanceof SimpleXMLElement) {
$reqCell = $this->activeSheetObject->xpath(
'//default:sheetData/default:row[@r="' . $y . '"]/default:c[@r="' . self::getAddress($x, $y) . '"]'
);
if (!is_array($reqCell) || count($reqCell) <= 0) {
$message = "Cell " . self::getAddress($x, $y) . " not found in '" .
basename(sprintf($this->SheetBaseFile, $this->activeSheetId)) . "'!";
throw new Exception($message, self::ERROR_NODE_NOT_FOUND);
}
$reqCell = $reqCell[0];
// Get value
$value = $reqCell->{'v'};
// Check if formula exists - then return formula
if (isset($reqCell->{'f'})) {
$value = $reqCell->{'f'};
}
// Check if we got rich text set in cell
if (isset($reqCell['t']) && $reqCell['t'] == 'inlineStr') {
$value = $reqCell->{'is'}->{'r'}->{'t'};
}
// Check if we got a string from sharedStrings.xml and retrieve text
if (isset($reqCell['t']) && $reqCell['t'] == 's') {
// Load shared strings if not loaded
if (is_null($this->sharedStringsObject)) {
$this->sharedStringsObject = simplexml_load_file(
$this->extractionFolder . $this->sharedStringsFile
);
// Without namespace XPath queries won't work
if ($this->sharedStringsObject instanceof SimpleXMLElement) {
$namespaces = $this->sharedStringsObject->getDocNamespaces();
if (is_array($namespaces)) {
foreach ($namespaces as $prefix => $namespace) {
$this->sharedStringsObject->registerXPathNamespace($prefix ?: 'default', $namespace);
}
}
}
}
// Get string by index
if ($this->sharedStringsObject instanceof SimpleXMLElement) {
$reqCell = $this->sharedStringsObject->xpath('//default:si[' . ((int)$value + 1) . ']/default:t');
if ($reqCell === false || !is_array($reqCell) || count($reqCell) <= 0) {
throw new Exception("Shared string not found in '" . basename($this->sharedStringsFile) . "'!");
}
$value = $reqCell[0];
}
}
}
return $value;
}
/**
* @param int $x
* @param int $y
* @return string
*/
public static function getAddress(int $x, int $y): string
{
$x = $x <= 0 ? 1 : $x;
$y = $y <= 0 ? 1 : $y;
$sk = 0;
$iX = $x;
$address = '';
while (1) {
if ($iX > 26) {
while ($iX > 26) {
$iX -= 26;
$sk++;
}
$address = Chr(64 + $iX) . $address;
$iX = $sk;
$sk = 0;
} else {
return chr(64 + $iX) . $address . $y;
}
}
}
/**
* @param BasePhpUnitSeleniumCase $baseTestCase
* @param string $file
* @param array<string, array<int, array<int, string>>> $excelValueCfg -
* ['sheet_title' => ['row_index' => ['col_index 0 based' => 'assertion value']]]
* @param bool $assertByStringContainsString
* @return void
* @throws Exception
*/
public function assertionsOnExcelSheetData(
BasePhpUnitSeleniumCase $baseTestCase,
string $file = '',
array $excelValueCfg = [],
bool $assertByStringContainsString = false
): void {
if (count($excelValueCfg) == 0) {
throw new Exception("Validation configuration is missing!");
}
try {
$this->loadFileForExtraction($file);
// Loop cfg & assert values within Excel sheets
foreach ($excelValueCfg as $sheetTitle => $rows) {
$this->setActiveWorkingSheetById(
$this->getSheetIdByTitle($sheetTitle)
);
foreach ($rows as $rowExactIndex => $values) {
foreach ($values as $k => $val) {
// Check is formula - remove = sign since formulas are stored without it
if (mb_substr($val, 0, 1) == '=') {
$val = mb_substr($val, 1);
}
// Find cell in xml & do the assertion
try {
$rawActual = (string)$this->extractTextFromCell($k + 1, $rowExactIndex);
$rawExpected = (string)$val;
$errorMessage = "Error within '$sheetTitle' sheet cell '" .
self::getAddress($k + 1, $rowExactIndex) . "'!" .
"\nexpected: $val \n actual: $rawActual";
if ($assertByStringContainsString) {
$baseTestCase->assertStringContainsString($val, $rawActual, $errorMessage);
} else {
if (is_numeric($rawActual) && is_numeric($rawExpected)) {
if (!$this->excelNumbersEqual($rawActual, $rawExpected, 3)) {
$baseTestCase->fail($errorMessage);
}
} else {
$baseTestCase->assertEquals($rawExpected, $rawActual, $errorMessage);
}
}
} catch (Exception $e) {
// Expect empty string assertions to fail on xml lookup - since empty cells are not stored
if (
strlen($val) == 0 &&
$e->getCode() == self::ERROR_NODE_NOT_FOUND
) {
continue;
} else {
throw $e;
}
}
}
}
}
} catch (Exception $e) {
$baseTestCase->fail($e->getMessage());
}
$baseTestCase->clearTempFolder($this->globalExtractionFolder);
}
private function excelNumbersEqual($a, $b, int $precision = 3): bool
{
if (!is_numeric($a) || !is_numeric($b)) {
return false;
}
// Round precision
$a = round((float)$a, $precision);
$b = round((float)$b, $precision);
return bccomp((string)$a, (string)$b, $precision) === 0;
}
/**
* Generate a PHP expected array file directly from Excel XML (1:1)
*
* @param string $excelFilePath Path to a source Excel file
* @param string $outputPhpFile Path where a PHP file will be written
* @param string $sheetTitle Excel sheet title
* @param int $startRow First row index (Excel-based)
* @param int $endRow Last row index (inclusive)
* @param int $startCol First column index (Excel-based)
* @param int $endCol Last column index (inclusive)
* @return void
* @throws Exception
*/
public function generateExpectedPhpArrayFile(
string $excelFilePath,
string $outputPhpFile,
string $sheetTitle,
int $startRow,
int $endRow,
int $startCol,
int $endCol
): void {
if ($startRow <= 0 || $endRow < $startRow) {
throw new Exception('Invalid row range');
}
if ($startCol <= 0 || $endCol < $startCol) {
throw new Exception('Invalid column range');
}
$this->loadFileForExtraction($excelFilePath);
$sheetId = $this->getSheetIdByTitle($sheetTitle);
$this->setActiveWorkingSheetById($sheetId);
$result = [];
for ($row = $startRow; $row <= $endRow; $row++) {
$rowData = [];
for ($col = $startCol; $col <= $endCol; $col++) {
try {
$rowData[] = (string)$this->extractTextFromCell($col, $row);
} catch (Exception $e) {
// Empty cells are not stored in XML
if ($e->getCode() === self::ERROR_NODE_NOT_FOUND) {
$rowData[] = '';
} else {
throw $e;
}
}
}
$result[$row] = $rowData;
}
$php = "<?php\n\n";
$php .= "/**\n";
$php .= " * AUTO-GENERATED FILE\n";
$php .= " * Source: " . basename($excelFilePath) . "\n";
$php .= " */\n\n";
$php .= "return " . var_export($result, true) . ";\n";
if (file_put_contents($outputPhpFile, $php) === false) {
throw new Exception("Failed to write output file: $outputPhpFile");
}
}
}

View File

@ -0,0 +1,216 @@
<?php
namespace ElixirAudit\Tests\SeleniumTests\App\PubUsers;
use BRSystems\Core\Library\cGoogle2FA\cGoogle2FA;
use ElixirAudit\Tests\BasePhpUnitSeleniumCase;
use ElixirAudit\Tests\DataSetup\Constants\siteAccounts;
use ElixirAudit\Tests\DataSetup\Constants\siteLanguages;
use ElixirAudit\Tests\DataSetup\Constants\siteUsers;
use ElixirAudit\Tests\DataSetup\Traits\App\pubUsersTrait;
class pubUserLoginForcePwdChangeTest extends BasePhpUnitSeleniumCase
{
use pubUsersTrait;
const url = [
siteLanguages::LANG_LV => [
'url' => 'ienakt-gramatvedibas-sistema',
'header' => 'Ienākt grāmatvedības sistēmā',
'header-2fa' => 'Divu faktoru autentifikācija',
'header-3pwd' => 'Mainīt lietotāja paroli',
'exists' => ['#user_name', '#old_password', '#new_password', '#rnew_password', 'button.btn.btn-block'],
'text-exists' => ['Mainīt lietotāja paroli','Manīt paroli'],
'inv-pwd' => 'Jaunā lietotāja parole nevar sakrist ar veco!',
'pwd-ok' => 'Lietotāja parole veiksmīgi nomainīta!',
'welcome-msg' => ['Laipni lūdzam,', 'Grāmatvedības sistēma', 'Sākums'],
'fill-field' => 'Lūdzu aizpildiet lauku!',
'fill-min' => 'Min value length is 6',
'fill-dont-match' => 'Fields do not match!',
]
];
protected function setUp(): void
{
parent::setUp();
// Set user force password change param
$this->cDb->query("UPDATE mod_users SET user_fchange = '1' WHERE id = 12");
}
protected function tearDown(): void
{
//$this->dbSetup(['App/pubUsers/mod_users_db_setup.sql']);
$this->reloadDbTables(['mod_users']);
parent::tearDown();
}
public function testPwdChange(): void
{
foreach (self::url as $lang => $pageData) {
// Got to location to test
$this->goToPasswordChangeForm($pageData);
// Change user password
$this->changeUserPassword($pageData);
}
}
public function testPwdChangeForm(): void
{
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
foreach (self::url as $lang => $pageData) {
// Got to location to test
$this->goToPasswordChangeForm($pageData);
// Test error containing fields
$this->webDriver->action()->moveToElement($this->byId('new_password'))->perform();
$this->webDriver->executeScript('$("#new_password").focus().blur();');
$this->elementWait('#new_password + div.errMsg', self::CSS_SELECTOR);
$this->assertEquals($pageData['fill-field'], $this->byCssSelector('#new_password + div.errMsg')->getText());
$this->webDriver->action()->moveToElement($this->byId('rnew_password'))->perform();
$this->webDriver->executeScript('$("#rnew_password").focus().blur();');
$this->elementWait('#rnew_password + div.errMsg', self::CSS_SELECTOR);
$this->assertEquals($pageData['fill-field'], $this->byCssSelector('#rnew_password + div.errMsg')->getText());
$this->webDriver->executeScript('$("#new_password").focus().val("asd").blur();');
$this->webDriver->action()->moveToElement($this->byId('new_password'))->perform();
$this->elementWait('#new_password + div.errMsg', self::CSS_SELECTOR);
$this->assertEquals($pageData['fill-min'], $this->byCssSelector('#new_password + div.errMsg')->getText());
$this->webDriver->executeScript('$("#new_password").focus().val("' . $loginData['password'] . '").blur();');
$this->webDriver->action()->moveToElement($this->byId('new_password'))->perform();
$this->elementWait('#new_password + div.errMsg', self::CSS_SELECTOR);
$this->assertEquals($pageData['fill-dont-match'], $this->byCssSelector('#new_password + div.errMsg')->getText());
// Both fields should have error
$this->webDriver->action()->moveToElement($this->byId('rnew_password'))->perform();
$this->elementWait('#rnew_password + div.errMsg', self::CSS_SELECTOR);
$this->assertEquals($pageData['fill-field'], $this->byCssSelector('#rnew_password + div.errMsg')->getText());
$this->webDriver->executeScript('$("#rnew_password").focus().val("dsa").blur();');
$this->webDriver->action()->moveToElement($this->byId('rnew_password'))->perform();
$this->elementWait('#rnew_password + div.errMsg', self::CSS_SELECTOR);
$this->assertEquals($pageData['fill-min'], $this->byCssSelector('#rnew_password + div.errMsg')->getText());
$this->webDriver->executeScript('$("#rnew_password").focus().val("testLongerPassword").blur();');
$this->webDriver->action()->moveToElement($this->byId('rnew_password'))->perform();
$this->elementWait('#rnew_password + div.errMsg', self::CSS_SELECTOR);
$this->assertEquals($pageData['fill-dont-match'], $this->byCssSelector('#rnew_password + div.errMsg')->getText());
// Set both fields to same long password
$this->webDriver->executeScript('$("#rnew_password").focus().val("' . $loginData['password'] . '").blur();');
$this->webDriver->action()->moveToElement($this->byId('rnew_password'))->perform();
// Errors should be gone - hidden/removed
$this->assertEquals('', $this->byCssSelector('#new_password + div.errMsg')->getText());
$this->assertEquals('', $this->byCssSelector('#rnew_password + div.errMsg')->getText());
$this->assertTrue($this->elementExists('.v-ok #new_password', self::CSS_SELECTOR));
$this->assertTrue($this->elementExists('.v-ok #rnew_password', self::CSS_SELECTOR));
// Send password change request
$this->byCssSelector("form#pwd_cnt button.btn.btn-block")->click();
// Wait for error message
$this->elementWait('status_error', self::CLASS_NAME);
$this->assertEquals($pageData['inv-pwd'], $this->byCssSelector('div.status_error')->getText());
// Change user password
$this->changeUserPassword($pageData);
}
}
public function testPwdChangePageLoaded(): void
{
foreach (self::url as $lang => $pageData) {
// Got to location to test
$this->goToPasswordChangeForm($pageData);
foreach ($pageData['exists'] as $selectorToFind) {
$this->assertTrue($this->elementExists($selectorToFind, self::CSS_SELECTOR));
}
$this->assertExpected($pageData['text-exists'], $this->byTagName('body')->getText());
}
}
private function goToPasswordChangeForm(array $pageData): void
{
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
$this->url($pageData['url']);
$this->elementWait('user_login');
$this->assertEquals($pageData['header'], $this->byCssSelector('div#form > .relative > p.font-20')->getText());
// Input login data
$this->byId("user_login")->sendKeys($loginData['user']);
$this->byId("user_password")->sendKeys($loginData['password']);
$this->byCssSelector("form#frm_input div#agree_to_terms")->click();
$this->byCssSelector("form#frm_input button.btn.btn-block")->click();
$this->elementWait('frm_2fa_input');
$this->assertEquals($pageData['header-2fa'], $this->byCssSelector('div#form > .relative > p.font-20')->getText());
// Validate 2fa code from google
$oGoogle2FA = new cGoogle2FA();
$next2FACode = $oGoogle2FA->getGoogleAuthCode($loginData['2fa']);
foreach (str_split($next2FACode) as $i => $char) {
$this->byCssSelector("input.code2fa[tabindex='" . ++$i . "']")->clear()->sendKeys($char);
}
$this->elementWait('pwd_cnt');
$this->assertEquals(
$pageData['header-3pwd'],
$this->byCssSelector('div.container .relative > p.font-20')->getText()
);
}
private function changeUserPassword(array $pageData, bool $has2FASecurityEnabled = true): void
{
// Input data
$this->byId("new_password")->sendKeys('testmynewpassword12!@');
$this->byId("rnew_password")->sendKeys('testmynewpassword12!@');
$this->byCssSelector("form#pwd_cnt > button.btn.btn-block")->click();
// Increase response timeout before redirect - Wait for confirmation message
$this->webDriver->executeScript('JsBase.jsModule.iMessageTimeOut = 3000;');
$this->waitUntilDomReadyState();
$this->assertEquals(
$pageData['pwd-ok'],
$this->byCssSelector('div.container .relative > div.status_ok')->getText()
);
// Wait for company selection screen by default user has now multiple companies
$this->elementWait(
"//ul[@id='favorite']//li/a/i[contains(text(),'" . siteAccounts::ACCOUNT_SELF_EMPLOYED . "')]",
self::XPATH
);
$this->elementExists(
"//ul[@id='favorite']//li/a/i[contains(text(),'" . siteAccounts::ACCOUNT_SELF_EMPLOYED . "')]",
self::XPATH
);
$this->byXPath(
"//ul[@id='favorite']//li/a/i[contains(text(),'" . siteAccounts::ACCOUNT_SELF_EMPLOYED . "')]/.."
)->click();
// Validate dashboard welcome messages
if ($has2FASecurityEnabled) {
$this->elementWait("#drop_cnt > .doc > .form-data div.container.dashboard-cnt", self::CSS_SELECTOR);
$this->assertExpected($pageData['welcome-msg'], $this->byTagName('body')->getText());
}
// Accept cookies message
$this->awaitAndAcceptCookies();
}
}

View File

@ -0,0 +1,203 @@
<?php
declare(strict_types=1);
namespace ElixirAudit\Tests\SeleniumTests\App\PubUsers;
use Facebook\WebDriver\WebDriverBy;
use ElixirAudit\Tests\BasePhpUnitSeleniumCase;
use ElixirAudit\Tests\DataSetup\Constants\siteLanguages;
use ElixirAudit\Tests\DataSetup\Constants\siteUsers;
use ElixirAudit\Tests\DataSetup\Traits\App\pubUsersTrait;
class pubUserLoginTest extends BasePhpUnitSeleniumCase
{
use pubUsersTrait;
const url = [
siteLanguages::LANG_LV => [
'menuItemXPath' => "//div[@id='navbar']//span[contains(., 'Grāmatvedības sistēma')]//ancestor::a",
'url' => 'ienakt-gramatvedibas-sistema',
'header' => 'Ienākt grāmatvedības sistēmā',
'exists' => ['#user_login', '#user_password', 'div.rchk.agree_to', 'button.btn.btn-block'],
'text-exists' => [
'Ienākt grāmatvedības sistēmā',
'Es esmu izlasījis un', 'piekrītu noteikumiem.',
'Ienākt', 'Aizmirsi paroli?', 'Reģistrācija', 'Atgriezties uz zutenis.lv mājaslapu'
],
'inv-user' => 'Lietotāja vārds vai parole ievadīta nepareizi!',
'blocked-user' => 'Lietotāja vārds vai parole ievadīta nepareizi!',
'login-ok' => 'Lietotāja vārds vai parole ievadīta nepareizi!',
'fill-field' => 'Lūdzu aizpildiet lauku!',
'linksToTexts' => [
'/paroles-atgusana' => [
'wait_id' => 'passRecovery_cnt',
'text' => 'Paroles atgūšana',
'text_selector' => 'div.pw_recovery > p.font-20.semi-font'
],
'/registracija' => [
'wait_tag' => 'h1',
'text' => 'Reģistrācija',
'text_selector' => 'h1.to-animate'
],
'/' => [
'wait_tag' => 'h1',
'text' => 'Laipni lūgti grāmatvedības sistēmā ZUTENIS',
'text_selector' => 'h1.to-animate'
],
],
'iframe-content' => 'Lietošanas noteikumi',
'login-2nd-step' => 'Divu faktoru autentifikācija'
]
];
protected function setUp(): void
{
parent::setUp();
$this->reloadDbTables(['mod_users']);
}
public function testLogin(): void
{
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
foreach (self::url as $lang => $pageData) {
$this->url($pageData['url']);
// Login user till Two-factor authentication
self::logInUserByCredentials($this, $pageData, $loginData);
// $this->elementWait('user_login');
// $this->assertEquals($pageData['header'], $this->byCssSelector('div#form > .relative > p.font-20')->getText());
//
// // Input login data
// $this->byId("user_login")->sendKeys($loginData['user']);
// $this->byId("user_password")->sendKeys($loginData['password']);
//
// $this->byCssSelector("form#frm_input div#agree_to_terms")->click();
// $this->byCssSelector("form#frm_input button.btn.btn-block")->click();
//
// $this->elementWait('frm_2fa_input');
// $this->assertEquals($pageData['login-2nd-step'], $this->byCssSelector('div#form > .relative > p.font-20')->getText());
// Check for logout - log out
$this->byCssSelector("form#frm_2fa_input > a.link")->click();
$this->elementWait('user_login');
$this->assertEquals($pageData['header'], $this->byCssSelector('div#form > .relative > p.font-20')->getText());
}
}
public static function logInUserByCredentials(
BasePhpUnitSeleniumCase $activeTestCase, array $langData = null, array $loginData = null): void
{
$activeTestCase->elementWait('user_login');
$activeTestCase->assertEquals($langData['header'], $activeTestCase->byCssSelector('div#form > .relative > p.font-20')->getText());
// Input login data
$activeTestCase->byId("user_login")->sendKeys($loginData['user']);
$activeTestCase->byId("user_password")->sendKeys($loginData['password']);
$activeTestCase->byCssSelector("form#frm_input div#agree_to_terms")->click();
$activeTestCase->byCssSelector("form#frm_input button.btn.btn-block")->click();
$activeTestCase->elementWait('frm_2fa_input');
$activeTestCase->assertEquals($langData['login-2nd-step'], $activeTestCase->byCssSelector('div#form > .relative > p.font-20')->getText());
}
public function testLoginForm(): void
{
foreach (self::url as $lang => $pageData) {
$this->url($pageData['url']);
$this->elementWait('user_login');
// Test error containing fields
$this->webDriver->executeScript('$("#user_login").focus().blur();');
$this->webDriver->action()->moveToElement($this->byId('user_login'))->perform();
$this->elementWait('#user_login + div.errMsg', self::CSS_SELECTOR);
$this->assertEquals($pageData['fill-field'], $this->byCssSelector('#user_login + div.errMsg')->getText());
$this->webDriver->executeScript('$("#user_password").focus().blur();');
$this->webDriver->action()->moveToElement($this->byId('user_password'))->perform();
$this->elementWait('#user_password + div.errMsg', self::CSS_SELECTOR);
$this->assertEquals($pageData['fill-field'], $this->byCssSelector('#user_password + div.errMsg')->getText());
// Input invalid login data
$this->byId("user_login")->sendKeys('test');
$this->byId("user_password")->sendKeys('test');
$this->byCssSelector("form#frm_input div#agree_to_terms")->click();
$this->byCssSelector("form#frm_input button.btn.btn-block")->click();
$this->elementWait('status_error', self::CLASS_NAME);
$this->assertEquals($pageData['inv-user'], $this->byCssSelector('div.status_error')->getText());
// Check agree to terms iframe - wait for login page to reload
$this->byCssSelector("a#show-terms")->click();
$this->elementWait('.fancybox-iframe', self::CSS_SELECTOR);
$this->webDriver->switchTo()->frame($this->byCssSelector('.fancybox-iframe'));
$this->elementWait('#fh5co-home .row div.col-md-8 h1', self::CSS_SELECTOR);
sleep(2); // Sleep while animation is complete
$this->assertEquals($pageData['iframe-content'], $this->byCssSelector('h1')->getText());
$this->webDriver->switchTo()->defaultContent();
}
}
public function testLoginPageRedirectLinks(): void
{
foreach (self::url as $lang => $pageData) {
$this->url($pageData['url']);
$this->elementWait('user_login');
// Test pages clicks
$pagesToVisit = [];
$links = $this->webDriver->findElements(WebDriverBy::cssSelector('#frm_input > a.link'));
foreach ($links as $link) {
$pagesToVisit[] = $link->getAttribute('href');
}
foreach ($pagesToVisit as $href) {
if (isset($pageData['linksToTexts'][$href])) {
$this->url($this->normalizeUrl($href));
sleep(2);
// Element Wait fails for some unknown reason
if (isset($pageData['linksToTexts'][$href]['wait_id']))
$this->elementWait($pageData['linksToTexts'][$href]['wait_id']);
elseif (isset($pageData['linksToTexts'][$href]['wait_tag']))
$this->elementWait($pageData['linksToTexts'][$href]['wait_tag'], self::TAG_NAME);
$this->assertEquals($pageData['linksToTexts'][$href]['text'], $this->byCssSelector($pageData['linksToTexts'][$href]['text_selector'])->getText());
}
}
}
}
public function testLoginPageLoaded(): void
{
foreach (self::url as $lang => $pageData) {
$this->url('index');
$this->awaitAndAcceptCookies();
$this->elementWait($pageData['menuItemXPath'], self::XPATH);
$this->byXPath($pageData['menuItemXPath'])->click();
sleep(2);
$this->url($pageData['url']);
$this->elementWait('user_login');
foreach ($pageData['exists'] as $selectorToFind) {
$this->assertTrue($this->elementExists($selectorToFind, self::CSS_SELECTOR));
}
$this->assertExpected($pageData['text-exists'], $this->byTagName('body')->getText());
}
}
}

View File

@ -0,0 +1,284 @@
<?php
declare(strict_types=1);
namespace ElixirAudit\Tests\SeleniumTests\App\PubUsers;
use BRSystems\Core\Library\cGoogle2FA\cGoogle2FA;
use DOMDocument;
use DOMXPath;
use Facebook\WebDriver\WebDriverBy;
use ElixirAudit\Tests\BasePhpUnitSeleniumCase;
use ElixirAudit\Tests\DataSetup\Constants\siteAccounts;
use ElixirAudit\Tests\DataSetup\Constants\siteLanguages;
use ElixirAudit\Tests\DataSetup\Constants\siteUsers;
use ElixirAudit\Tests\DataSetup\Traits\App\pubUsersTrait;
class pubUserPwdResetTest extends BasePhpUnitSeleniumCase
{
use pubUsersTrait;
const url = [
siteLanguages::LANG_LV => [
'url' => 'paroles-atgusana',
'header' => 'Paroles atgūšana',
'exists' => ['#user_data', 'button.btn.btn-block'],
'text-exists' => [
'Paroles atgūšana', 'Atpakaļ uz autentifikāciju',
'Lūdzu ievadiet lietotāja e-pastu vai lietotājvārdu, kuram vēlieties atgūt paroli.'
],
'inv-user' => 'Lietotājs nav atrasts vai ir bloķēts!',
'fill-field' => 'Lūdzu aizpildiet lauku!',
'fill-email' => 'Ievadīta nekorekta e-pasta adrese!',
'email-sent' => 'E-pasts tika nosūtīts',
'email-sent-error' => 'Lietotājs nav atrasts vai ir bloķēts!',
'linksToTexts' => [
'/ienakt-gramatvedibas-sistema' => [
'wait_id' => 'user_login',
'text' => 'Ienākt grāmatvedības sistēmā',
'text_selector' => 'div#form > .relative > p.font-20.semi-font'
],
],
'email-a' => 'Atjaunot paroli',
'email-subject' => 'Konts - Paroles atjaunošana',
'email-expected-body' => [
'Labdien', 'Esam saņēmuši pieprasījumu atjaunot nozaudētu ZUTENIS konta paroli.',
'Zemāk jūs atradīsit pagaidu ģenerētu paroli, kas būs derīga 2 stundas.',
'Pagaidu parole', 'Paroli var arī atjaunot, noklikšķinot uz pogas',
'Ar cieņu', 'Nepieciešama palīdzība?', 'info@zutenis.lv',
'Jūs saņēmāt šo e-pastu, jo šī e-pasta adrese ir reģistrēta www.ZUTENIS.lv'
],
'header-3pwd' => 'Mainīt lietotāja paroli',
'pwd-change-error' => [
'Lietotāja paroles atgūšana neizdevās!',
'Lūdzu, mēģiniet vēlreiz atiestatīt paroli',
'lūdzu, sazinieties ar atbalsta dienestu!',
],
]
];
protected function setUp(): void
{
parent::setUp();
$this->reloadDbTables(['mod_users']);
}
public function testPwdReset(): void
{
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
foreach (self::url as $lang => $pageData) {
$this->url($pageData['url']);
$this->elementWait('user_data');
// Test error containing fields
$this->webDriver->executeScript('$("#user_data").focus().blur();');
$this->webDriver->action()->moveToElement($this->byId('user_data'))->perform();
$this->elementWait('#user_data + div.errMsg', self::CSS_SELECTOR);
$this->assertEquals($pageData['fill-field'], $this->byCssSelector('#user_data + div.errMsg')->getText());
$this->webDriver->executeScript('$("#user_data").focus().val("test").blur();');
$this->webDriver->action()->moveToElement($this->byId('user_data'))->perform();
$this->elementWait('#user_data + div.errMsg', self::CSS_SELECTOR);
$this->assertEquals($pageData['fill-email'], $this->byCssSelector('#user_data + div.errMsg')->getText());
// Input invalid login data
$this->byId("user_data")->clear()->sendKeys('test.test@gmail.com');
$this->byCssSelector("form#passRecovery_cnt button.btn.btn-block")->click();
$this->elementWait('div.status_error', self::CSS_SELECTOR);
$this->assertEquals($pageData['email-sent-error'], $this->byCssSelector('div.status_error')->getText());
$this->byId("user_data")->clear()->sendKeys($loginData['email']);
$this->byCssSelector("form#passRecovery_cnt button.btn.btn-block")->click();
$this->elementWait('div.status_ok', self::CSS_SELECTOR);
$this->assertEquals($pageData['email-sent'], $this->byCssSelector('div.status_ok')->getText());
// Fetch email from MailHog
$messages = $this->awaitEmailFromMailHog(
$loginData['email'],
$pageData['email-subject'],
60 * 5
);
// Validate mail content
$this->assertEquals($pageData['email-subject'], $this->emailHtmlDecode($messages->subject));
$this->assertExpected($pageData['email-expected-body'], $this->emailHtmlDecode($messages->body));
// Preserve user password reset db data state
$loginData['data'] = $this->cDb->_querySelectRow(
'mod_users', ['user_password', 'user_pwdtime', 'user_newpwd'], ['id' => $loginData['id']]);
// Get password reset url from mail
$doc = new DOMDocument();
$doc->loadHTML($messages->body);
$xpath = new DOMXpath($doc);
$activationUrl = $xpath->query("//a[contains(., '{$pageData['email-a']}')]")
->item(0)->attributes->item(0)->nodeValue;
$tempPassword = $xpath->query("//b[@id='pass']")->item(0)->nodeValue;
// Test password change from link case 1
//------------------------------------------------------------
$this->userPassRecoveryForm($activationUrl, $lang, $pageData, $loginData);
$this->logout();
// Test password change from link case 2 - error activation case
//------------------------------------------------------------
$this->url($activationUrl, true);
$this->elementWait('div#form div.status_error', self::CSS_SELECTOR);
$this->assertExpected($pageData['pwd-change-error'], $this->byCssSelector('div#form div.status_error')->getText());
// Test password change from link case 3 - manual password input login form
//------------------------------------------------------------
$this->url($loginData['url']);
$this->elementWait('user_login');
// Reset user db state to previous before password change
$this->cDb->_queryUpdate('mod_users', $loginData['data'], ['id' => $loginData['id']]);
// Input login data
$this->byId("user_login")->sendKeys($loginData['user']);
$this->byId("user_password")->sendKeys($tempPassword);
$this->byCssSelector("form#frm_input div#agree_to_terms")->click();
$this->byCssSelector("form#frm_input button.btn.btn-block")->click();
// Change password
$this->userPassRecoveryForm(null, $lang, $pageData, $loginData);
$this->logout();
// Test password change from link case 4 - no 2fa security - manual password input login form
//------------------------------------------------------------
$this->url($loginData['url']);
$this->elementWait('user_login');
// Reset user db state to previous before password change
$loginData['data']['user_2fa_secret_enabled'] = '';
$this->cDb->_queryUpdate('mod_users', $loginData['data'], ['id' => $loginData['id']]);
// Input login data
$this->byId("user_login")->sendKeys($loginData['user']);
$this->byId("user_password")->sendKeys($tempPassword);
$this->byCssSelector("form#frm_input div#agree_to_terms")->click();
$this->byCssSelector("form#frm_input button.btn.btn-block")->click();
// Change password
$this->userPassRecoveryForm(null, $lang, $pageData, $loginData, false);
$this->elementWait('#restricted-access a.logout', self::CSS_SELECTOR);
// Logout
$this->byCssSelector("#restricted-access a.logout")->click();
// Test password change from link case 5 - no 2fa security
//------------------------------------------------------------
// Reset user db state to previous before password change
$this->cDb->_queryUpdate('mod_users', $loginData['data'], ['id' => $loginData['id']]);
$this->userPassRecoveryForm($activationUrl, $lang, $pageData, $loginData, false);
$this->elementWait('#restricted-access a.logout', self::CSS_SELECTOR);
// Logout
$this->byCssSelector("#restricted-access a.logout")->click();
$this->reloadDbTables(['mod_users']);
}
}
public function userPassRecoveryForm(
string $url = null, string $lang = siteLanguages::LANG_LV,
array $pageData = [], array $loginData = [], bool $has2FASecurityEnabled = true
): void
{
// Activate account
if (!is_null($url)) {
$this->url($url, true);
}
if ($has2FASecurityEnabled) {
// Wait for 2FA activation request
$this->elementWait('frm_2fa_input');
// Validate 2fa code from google
$oGoogle2FA = new cGoogle2FA();
$next2FACode = $oGoogle2FA->getGoogleAuthCode($loginData['2fa']);
foreach (str_split($next2FACode) as $i => $char) {
$this->byCssSelector("input.code2fa[tabindex='" . ++$i . "']")->clear()->sendKeys($char);
}
}
// Check are we in right place
$this->elementWait('pwd_cnt');
$this->assertEquals($pageData['header-3pwd'], $this->byCssSelector('div.container .relative > p.font-20')->getText());
// Test password change
$this->fillAndSubmitPasswordChangeForm([
'newPass' => 'testmynewpassword12!@'
]);
$this->awaitAndSelectAccount(siteAccounts::ACCOUNT_SELF_EMPLOYED);
// Validate dashboard welcome messages
if ($has2FASecurityEnabled) {
$this->elementWait("#drop_cnt > .doc > .form-data div.container.dashboard-cnt", self::CSS_SELECTOR);
$this->assertExpected(pubUserLoginForcePwdChangeTest::url[$lang]['welcome-msg'], $this->byTagName('body')->getText());
}
$this->awaitAndAcceptCookies();
}
public function testLoginPageRedirectLinks(): void
{
foreach (self::url as $lang => $pageData) {
$this->url($pageData['url']);
$this->elementWait('user_data');
// Test pages clicks
$pagesToVisit = [];
$links = $this->webDriver->findElements(WebDriverBy::cssSelector('#passRecovery_cnt > a.link'));
foreach ($links as $link) {
$pagesToVisit[] = $link->getAttribute('href');
}
foreach ($pagesToVisit as $href) {
if (isset($pageData['linksToTexts'][$href])) {
$this->url($this->normalizeUrl($href));
sleep(2);
// Element Wait fails for some unknown reason
if (isset($pageData['linksToTexts'][$href]['wait_id']))
$this->elementWait($pageData['linksToTexts'][$href]['wait_id']);
elseif (isset($pageData['linksToTexts'][$href]['wait_tag']))
$this->elementWait($pageData['linksToTexts'][$href]['wait_tag'], self::TAG_NAME);
$this->assertEquals($pageData['linksToTexts'][$href]['text'], $this->byCssSelector($pageData['linksToTexts'][$href]['text_selector'])->getText());
}
}
}
}
public function testPwdResetPageLoaded(): void
{
foreach (self::url as $lang => $pageData) {
$this->url($pageData['url']);
$this->elementWait('user_data');
foreach ($pageData['exists'] as $selectorToFind) {
$this->assertTrue($this->elementExists($selectorToFind, self::CSS_SELECTOR));
}
$this->assertExpected($pageData['text-exists'], $this->byTagName('body')->getText());
}
}
}

View File

@ -0,0 +1,536 @@
<?php
declare(strict_types=1);
namespace ElixirAudit\Tests\SeleniumTests\App\PubUsers;
use BRSystems\Core\Library\cGoogle2FA\cGoogle2FA;
use DOMDocument;
use DOMXPath;
use stdClass;
use ElixirAudit\Tests\BasePhpUnitSeleniumCase;
use ElixirAudit\Tests\DataSetup\Constants\siteLanguages;
use ElixirAudit\Tests\DataSetup\Constants\siteUsers;
use ElixirAudit\Tests\DataSetup\traits\app\helpers\assertionsTrait;
use ElixirAudit\Tests\DataSetup\Traits\App\Helpers\formLayoutTrait;
use ElixirAudit\Tests\DataSetup\traits\app\helpers\formValidationTrait;
use ElixirAudit\Tests\DataSetup\Traits\App\pubUsersTrait;
class pubUserRegistrationTest extends BasePhpUnitSeleniumCase
{
use assertionsTrait;
use formLayoutTrait;
use formValidationTrait;
use pubUsersTrait;
public $pageData;
protected function setUp(): void
{
parent::setUp();
$this->resetDatabaseState();
$this->pageData = [
siteLanguages::LANG_LV => (object)[
'url' => 'index',
'menuItemXPath' => "//div[@id='navbar']//span[contains(., 'Reģistrācija')]//ancestor::a",
'gM' => (object)[
'registration' => 'Reģistrācija',
'messagesExist' => [
'Reģistrācija', 'Reģistrācijas forma', 'Saimnieciskās darbības veicēja informācija',
'Aizpildiet zemāk atrodošo reģistrācijas veidlapu un sāciet izmantot mūsu sistēmu jau šodien!',
'Vārds Uzvārds / Firmas nosaukums', 'Reģ. numurs',
'Ir PVN maksātājs', 'Pieejamie sistēmas moduļi', 'Vienkāršā ieraksta grāmatvedība',
'Dokumentu sagatavošanas modulis', 'Kontaktinformācija',
'Vārds', 'Uzvārds', 'E-pasts', 'Tālrunis',
'Lietotāja informācija',
'Man jau ir lietotājs, ienāciet sistēmā, lai piesaistītu jaunu kontu',
'Pierakstīties uz jaunumu saņemšanu e-pastā',
'Es esmu izlasījis un', 'piekrītu noteikumiem.',
'Noderīgas saites',
],
'fieldIsMandatory' => 'Lūdzu aizpildiet lauku!',
'invalidEMail' => 'Ievadīta nekorekta e-pasta adrese!',
'invalidEMailAlreadyTaken' => 'Lietotājs ar šo e-pastu jau ir reģistrēts!',
'invalidPhone' => 'Norādīts nepareizs tālrunis!',
'agreeToTermsH1' => 'Lietošanas noteikumi',
'alreadyHaveAnAccount' => 'Ienākt grāmatvedības sistēmā',
'logoutUseDifferentUser' => 'Izrakstīties, izmantot citu lietotāju',
'registrationEmailTitle' => 'Konts - Reģistrācija un E-pasta apstiprināšana',
'registrationEmailActText' => 'aktivizēt noklikšķinot šeit',
'registrationEmailBody' => [
'Esiet sveicināti sistēmā ZUTENIS.',
'Esam sagatavojuši Jums lietotāja kontu, kuru atlicis tikai',
'aktivizēt noklikšķinot šeit',
'Sistēmas piekļuves dati:',
'Kontu var arī aktivizēt, noklikšķinot uz pogas',
'Ja Tev ir jautājumi par pakalpojumu, būsim priecīgi palīdzēt! ',
],
'activationSuccessfullText' => [
'Aktivizācija veiksmīga!',
'Lai turpinātu, lūdzu nomainiet pagaidu paroli.',
],
'securityUpdateRequest' => [
'Lai piekļūtu grāmatvedības sistēmai, ir jāiespējo',
'2FA', 'Divu faktoru autentifikācijas drošība!', 'Ieslēgt', 'Iziet'
],
'securityUpdate2FAForm' => [
'Divu faktoru autentifikācijas uzstādīšana',
'Uzinstalējiet "Google Authenticator" lietojumprogrammu savā ierīcē',
'Ja ierīci nav kameras, ievadiet atslēgu manuāli.',
'Skatieties video pamācību:',
'Ievadi Google Authenticator lietotnes piešķirto',
'Divu faktoru autentifikācijas kodu',
],
'registrationComplete' => [
'Lūdzu pārbaudiet e-pastu', 'Jums tūliņ tiks nosūtīts aktivizācijas e-pasts!',
'Paldies par izrādīto interesi' , 'Lūdzu parbaudiet arī mestules sadaļu', 'Lai veiksmīga sadarbība!'
]
],
'elementsExist' => [
'#acc_name', '#reg_nr', '#vat_payer', '#full_system', '#document_system', '#name', '#surname', '#email', '#phone',
'#login', '#loginchk', '#subscribe', '#agree_to_terms', 'input.btn.btn-primary', '#vat_reg_nr'
]
]
];
}
protected function tearDown(): void
{
parent::tearDown();
$this->resetDatabaseState();
}
protected function resetDatabaseState(): void
{
$this->reloadDbTables([
'mod_users',
'mod_users_permissions',
'mod_users_subscription_mails',
'mod_account_to_create',
'mod_account_manager',
'mod_account_to_user',
]);
}
public function testRegistrationForm(): void
{
foreach ($this->pageData as $lang => $langData) {
$this->goToRegistrationPage($langData);
// Test error containing fields
foreach (['acc_name', 'reg_nr', 'name', 'surname', 'email', 'phone',] as $field) {
$this->scrollElementIntoView("#$field", self::CSS_SELECTOR);
$this->webDriver->action()->moveToElement($this->byId($field))->perform();
$this->webDriver->executeScript('$("#' . $field . '").focus().blur();');
$this->elementWait('#' . $field . ' + div.errMsg', self::CSS_SELECTOR);
$this->assertEquals($langData->gM->fieldIsMandatory, $this->byCssSelector('#' . $field . ' + div.errMsg')->getText());
}
// Invalid E-mail specified
$this->scrollElementIntoView('#email', self::CSS_SELECTOR);
$this->webDriver->action()->moveToElement($this->byId('email'))->perform();
$this->webDriver->executeScript('$("#email").focus().val("test").blur();');
$this->elementWait('#email + div.errMsg', self::CSS_SELECTOR);
$this->assertEquals($langData->gM->invalidEMail, $this->byCssSelector('#email + div.errMsg')->getText());
// Invalid Phone specified
$this->scrollElementIntoView('#phone', self::CSS_SELECTOR);
$this->webDriver->executeScript('$("#phone").focus().val("test").blur();');
$this->webDriver->action()->moveToElement($this->byId('phone'))->perform(); sleep(1);
$this->elementWait('#phone + div.errMsg', self::CSS_SELECTOR);
$this->assertEquals($langData->gM->invalidPhone, $this->byCssSelector('#phone + div.errMsg')->getText());
// Invalid VAT specified
$this->byId("vat_payer")->click();
$this->elementWait('vat_reg_nr');
$this->webDriver->action()->moveToElement($this->byId('vat_reg_nr'))->perform();
$this->webDriver->executeScript('$("#vat_reg_nr").focus().blur();');
$this->elementWait('#vat_reg_nr + div.errMsg', self::CSS_SELECTOR);
$this->assertEquals($langData->gM->fieldIsMandatory, $this->byCssSelector('#vat_reg_nr + div.errMsg')->getText());
$this->byId("vat_payer")->click();
$this->elementWaitRemoved('vat_reg_nr');
$this->assertFalse($this->elementExists('#vat_payer.chked', self::CSS_SELECTOR));
// Radio check test
$this->scrollElementIntoView('#document_system', self::CSS_SELECTOR);
$this->assertFalse($this->elementExists('#document_system.chked', self::CSS_SELECTOR));
$this->byId("document_system")->click();
$this->assertFalse($this->elementExists('#full_system.chked', self::CSS_SELECTOR));
$this->byId("full_system")->click();
$this->byId("union_system")->click();
$this->assertTrue($this->elementExists('#union_system.chked', self::CSS_SELECTOR));
$this->byId("religious_org_system")->click();
$this->assertTrue($this->elementExists('#religious_org_system.chked', self::CSS_SELECTOR));
// Check agree to terms iframe - wait for iframe to reload
$this->scrollElementIntoView('#show-terms', self::CSS_SELECTOR);
$this->byCssSelector("a#show-terms")->click();
$this->elementWait('.fancybox-iframe', self::CSS_SELECTOR);
$this->webDriver->switchTo()->frame($this->byCssSelector('.fancybox-iframe'));
// Page weird animation cannot be caught via traditional wait conditions
$this->elementWait('h1.animated', self::CSS_SELECTOR);
$this->elementWait('#fh5co-home .row div.col-md-8 h1', self::CSS_SELECTOR);
$this->assertEquals($langData->gM->agreeToTermsH1, $this->byCssSelector('h1')->getText());
$this->byId('close-terms-of-use')->click();
$this->webDriver->switchTo()->defaultContent();
$this->elementWaitRemoved('.fancybox-iframe', self::CSS_SELECTOR);
// Check have already an account - wait for login iframe page to load
$this->byCssSelector("div#loginchk")->click();
$this->elementWait('loginf');
$this->webDriver->switchTo()->frame($this->byId('loginf'));
$this->elementWait('#form .relative p.font-20', self::CSS_SELECTOR);
sleep(2); // Sleep while animation is complete
$this->assertEquals($langData->gM->alreadyHaveAnAccount, $this->byCssSelector('#form .relative p.font-20')->getText());
$this->elementWait('#close-iframe', self::CSS_SELECTOR);
$this->byId('close-iframe')->click();
$this->webDriver->switchTo()->defaultContent();
$this->elementWaitRemoved('loginf');
$this->elementWait('div#loginchk', self::CSS_SELECTOR);
$this->assertFalse($this->elementExists('div#loginchk.chked', self::CSS_SELECTOR));
// Test if additional login form works
$this->byCssSelector("div#loginchk")->click();
$this->elementWait('loginf');
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
$this->webDriver->switchTo()->frame($this->byId('loginf'));
$this->elementWait('#form .relative p.font-20', self::CSS_SELECTOR);
sleep(2); // Sleep while animation is complete
$this->assertEquals($langData->gM->alreadyHaveAnAccount, $this->byCssSelector('#form .relative p.font-20')->getText());
// Login user till Two-factor authentication
pubUserLoginTest::logInUserByCredentials($this, pubUserLoginTest::url[$lang], $loginData);
// Validate 2fa code from google
$oGoogle2FA = new cGoogle2FA();
$next2FACode = $oGoogle2FA->getGoogleAuthCode($loginData['2fa']);
foreach (str_split($next2FACode) as $i => $char) {
$this->byCssSelector("input.code2fa[tabindex='" . ++$i . "']")->clear()->sendKeys($char);
}
$this->elementWaitRemoved('loginf');
$this->webDriver->switchTo()->defaultContent();
$this->elementWait('#registration-form a.logout', self::CSS_SELECTOR);
$this->assertEquals($langData->gM->logoutUseDifferentUser, $this->byCssSelector('#registration-form a.logout')->getText());
$this->assertTrue($this->elementExists('div#loginchk.chked', self::CSS_SELECTOR));
// Test filled data match
$this->assertEquals($loginData['user'], $this->byId('login')->getAttribute('value'));
foreach (['name', 'surname', 'email', 'phone'] as $field) {
$this->assertEquals($loginData[$field], $this->byId($field)->getAttribute('value'));
}
// Wait for the element to be clickable
$this->elementWait('div#loginchk', self::CSS_SELECTOR);
// Tick checkbox again - to remove input data
$this->byCssSelector("div#loginchk")->click();
$this->elementWaitRemoved('#registration-form a.logout', self::CSS_SELECTOR);
// Test filled data are empty
$this->assertEquals('', $this->byId('login')->getAttribute('value'));
foreach (['name', 'surname', 'email', 'phone'] as $field) {
$this->assertEquals('', $this->byId($field)->getAttribute('value'));
}
}
}
public function testUserRegistrationCaseNew(): void
{
foreach ($this->pageData as $lang => $langData) {
$this->goToRegistrationPage($langData);
$inputData = [
'acc_name' => 'Test ccount',
'reg_nr' => 'REG-ID123456789',
'name' => 'Mareks',
'surname' => 'Test 2',
'email' => 'keiss.mareks@gmail.com',
'phone' => '+37128639957'
];
// Fill data
foreach ($inputData as $key => $value) {
$this->byId($key)->clear()->sendKeys($value);
}
// Accept terms
$this->byId("agree_to_terms")->click();
// Validate filled data
$this->assertEquals($inputData['email'], $this->byId('login')->getAttribute('value'));
// Send registration data
$this->byCssSelector('input.btn.btn-primary')->click();
$this->waitUntilDomReadyState();
$this->assertFieldError('email', $langData->gM->invalidEMailAlreadyTaken);
// Change e-mail & Perform registration action
$this->sendKeysAndTriggerValidation('#email', 'keiss.mareks2@gmail.com', self::CSS_SELECTOR);
// Send registration data
$this->byCssSelector('input.btn.btn-primary')->click();
$this->elementWait('#registration-form .msg p', self::CSS_SELECTOR);
$this->scrollElementIntoView('#registration-form .msg p', self::CSS_SELECTOR);
$this->assertExpected($langData->gM->registrationComplete, $this->byTagName('body')->getText());
// Wait & get account activation e-mail confirmation
// Create connection to MailHog
// Sleep while e-mail is dispatched & get last message x2 - 2x CRON requests initiated -
// 1. when requesting registration, 2nd when sending confirmation
$messages = $this->awaitEmailFromMailHog(
'keiss.mareks2@gmail.com',
$langData->gM->registrationEmailTitle,
60 * 5
);
// Validate mail content
$this->assertEquals($langData->gM->registrationEmailTitle, $this->emailHtmlDecode($messages->subject));
$this->assertExpected($langData->gM->registrationEmailBody, $this->emailHtmlDecode($messages->body));
// Get password reset url from mail
$doc = new DOMDocument();
$doc->loadHTML($messages->body);
$xpath = new DOMXpath($doc);
$activationUrl = $xpath->query("//a[@id='link']")->item(0)->attributes->item(0)->nodeValue;
$path = parse_url($activationUrl, PHP_URL_PATH);
$tempPassword = $xpath->query("//b[@id='pass']")->item(0)->nodeValue;
$this->url($path);
$this->waitUntilDomReadyState();
$this->assertExpected(
$langData->gM->activationSuccessfullText,
$this->byCssSelector('#act_ok')->getText()
);
$this->assertTrue($this->elementExists('new_password'));
$this->assertTrue($this->elementExists('rnew_password'));
// Change user pwd
$this->fillAndSubmitPasswordChangeForm([
'oldPass' => $tempPassword,
'newPass' => 'testmynewpassword12!@'
]);
// Wait for security update request form
$this->elementWait('a.enable_2fa', self::CSS_SELECTOR);
// Validate form data
$this->assertExpected(
$langData->gM->securityUpdateRequest,
$this->byId('restricted-access')->getText(),
true
);
// Security request setup
$this->awaitAndProceedWithSecuritySetupRequest();
// Wait for 2fa form
$this->elementWait('div span#secret', self::CSS_SELECTOR);
// Validate form data
$this->assertExpected(
$langData->gM->securityUpdate2FAForm,
$this->byId('form')->getText()
);
// Setup 2FA
$this->awaitAndSetup2FASecurity();
// Validate dashboard welcome screen
$this->elementWait("#drop_cnt > .doc > .form-data div.container.dashboard-cnt", self::CSS_SELECTOR);
$this->assertTrue($this->elementExists('report_period_chosen'));
}
}
public function testUserRegistrationAssociation(): void
{
$langData = $this->pageData[siteLanguages::LANG_LV];
$this->goToRegistrationPage($langData);
$inputData = [
'acc_name' => 'House management',
'reg_nr' => 'REG-ID123456789',
'name' => 'Mareks',
'surname' => 'Test 2',
'email' => 'keiss.mareks2@gmail.com',
'phone' => '+37128639957',
'system' => 'housem_system',
];
// Fill data
foreach ($inputData as $key => $value) {
if ($key === 'system') {
$this->byId($value)->click();
} else {
$this->byId($key)->clear()->sendKeys($value);
}
}
// Accept terms
$this->byId("agree_to_terms")->click();
// Validate filled data
$this->assertEquals($inputData['email'], $this->byId('login')->getAttribute('value'));
// Send registration data
$this->byCssSelector('input.btn.btn-primary')->click();
$this->waitUntilDomReadyState();
$this->elementWait('#registration-form .msg p', self::CSS_SELECTOR);
$this->scrollElementIntoView('#registration-form .msg p', self::CSS_SELECTOR);
$this->assertExpected($langData->gM->registrationComplete, $this->byTagName('body')->getText());
// Wait & get account activation e-mail confirmation
// Create connection to MailHog
// Sleep while e-mail is dispatched & get last message x2 - 2x CRON requests initiated -
// 1. when requesting registration, 2nd when sending confirmation
$messages = $this->awaitEmailFromMailHog(
'keiss.mareks2@gmail.com',
$langData->gM->registrationEmailTitle,
60 * 5
);
// Validate mail content
$this->assertEquals($langData->gM->registrationEmailTitle, $this->emailHtmlDecode($messages->subject));
$this->assertExpected($langData->gM->registrationEmailBody, $this->emailHtmlDecode($messages->body));
// Get password reset url from mail
$doc = new DOMDocument();
$doc->loadHTML($messages->body);
$xpath = new DOMXpath($doc);
$activationUrl = $xpath->query("//a[@id='link']")->item(0)->attributes->item(0)->nodeValue;
$path = parse_url($activationUrl, PHP_URL_PATH);
$tempPassword = $xpath->query("//b[@id='pass']")->item(0)->nodeValue;
$this->url($path);
$this->waitUntilDomReadyState();
$this->assertExpected(
$langData->gM->activationSuccessfullText,
$this->byCssSelector('#act_ok')->getText()
);
$this->assertTrue($this->elementExists('new_password'));
$this->assertTrue($this->elementExists('rnew_password'));
// Change user pwd
$this->fillAndSubmitPasswordChangeForm([
'oldPass' => $tempPassword,
'newPass' => 'asdasd'
]);
// Wait for security update request form
$this->elementWait('a.enable_2fa', self::CSS_SELECTOR);
// Validate form data
$this->assertExpected(
$langData->gM->securityUpdateRequest,
$this->byId('restricted-access')->getText(),
true
);
// Security request setup
$this->awaitAndProceedWithSecuritySetupRequest();
// Wait for 2fa form
$this->elementWait('div span#secret', self::CSS_SELECTOR);
// Validate form data
$this->assertExpected(
$langData->gM->securityUpdate2FAForm,
$this->byId('form')->getText()
);
// Setup 2FA
$this->awaitAndSetup2FASecurity();
// Validate dashboard welcome screen
$this->elementWait("#drop_cnt > .doc > .form-data div.container.dashboard-cnt", self::CSS_SELECTOR);
$this->assertTrue($this->elementExists($this->getMenuItemSelectXpathByTitle('Apsaimniekošana'), self::XPATH));
}
/* public function testLoginPageRedirectLinks(): void
{
foreach (self::url as $lang => $pageData) {
$this->url($pageData['url']);
$this->elementWait('user_login');
// Test pages clicks
$pagesToVisit = [];
$links = $this->webDriver->findElements(WebDriverBy::cssSelector('#frm_input > a.link'));
foreach ($links as $link) {
$pagesToVisit[] = $link->getAttribute('href');
}
foreach ($pagesToVisit as $href) {
if (isset($pageData['linksToTexts'][$href])) {
$this->url($this->normalizeUrl($href));
sleep(2);
// Element Wait fails for some unknown reason
if (isset($pageData['linksToTexts'][$href]['wait_id']))
$this->elementWait($pageData['linksToTexts'][$href]['wait_id']);
elseif (isset($pageData['linksToTexts'][$href]['wait_tag']))
$this->elementWait($pageData['linksToTexts'][$href]['wait_tag'], self::TAG_NAME);
$this->assertEquals($pageData['linksToTexts'][$href]['text'], $this->byCssSelector($pageData['linksToTexts'][$href]['text_selector'])->getText());
}
}
}
}*/
public function testRegistrationPageLoaded(): void
{
foreach ($this->pageData as $lang => $langData) {
$this->url($langData->url);
$this->awaitAndAcceptCookies();
$this->elementWait($langData->menuItemXPath, self::XPATH);
$this->byXPath($langData->menuItemXPath)->click();
sleep(2);
$this->elementWait('h1.to-animate', self::CSS_SELECTOR);
foreach ($langData->elementsExist as $selectorToFind) {
$this->assertTrue($this->elementExists($selectorToFind, self::CSS_SELECTOR));
}
$this->assertExpected($langData->gM->messagesExist, $this->byTagName('body')->getText());
}
}
private function goToRegistrationPage(stdClass $langData = null): void
{
$this->url($langData->url);
$this->awaitAndAcceptCookies();
$this->elementWait($langData->menuItemXPath, self::XPATH);
$this->byXPath($langData->menuItemXPath)->click();
$this->pageTitleWait($langData->gM->registration);
sleep(2);
$this->elementWait('h1.to-animate', self::CSS_SELECTOR);
}
}

View File

@ -0,0 +1,163 @@
<?php
declare(strict_types=1);
namespace ElixirAudit\Tests\SeleniumTests\App\PubUsers;
use BRSystems\Core\Library\cGoogle2FA\cGoogle2FA;
use Facebook\WebDriver\WebDriverBy;
use ElixirAudit\Tests\BasePhpUnitSeleniumCase;
use ElixirAudit\Tests\DataSetup\Constants\siteAccounts;
use ElixirAudit\Tests\DataSetup\Constants\siteLanguages;
use ElixirAudit\Tests\DataSetup\Constants\siteUsers;
use ElixirAudit\Tests\DataSetup\Traits\App\Helpers\commonTrait;
use ElixirAudit\Tests\DataSetup\Traits\App\pubUsersTrait;
class pubUserTwoFactorAuthActionTest extends BasePhpUnitSeleniumCase
{
use commonTrait;
use pubUsersTrait;
const url = [
siteLanguages::LANG_LV => [
'url' => 'ienakt-gramatvedibas-sistema',
'header' => 'Ienākt grāmatvedības sistēmā',
'header-2fa' => 'Divu faktoru autentifikācija',
'exists' => [
'input.code2fa[tabindex=\'1\']', 'input.code2fa[tabindex=\'2\']', 'input.code2fa[tabindex=\'3\']',
'input.code2fa[tabindex=\'4\']', 'input.code2fa[tabindex=\'5\']', 'input.code2fa[tabindex=\'6\']',
'button#submit'
],
'text-exists' => [
'Divu faktoru autentifikācija',
'Ievadi Google Authenticator lietotnes piešķirto', 'Divu faktoru autentifikācijas kodu',
'Ienākt', 'Atpakaļ uz autentifikāciju', 'Ja esat zaudējis piekļuvi sava autentifikācijas ierīcei,'
],
'inv-code' => '2 faktoru autentifikācijas koda kļūda!',
'fill-field' => 'Lūdzu aizpildiet lauku!',
'welcome-msg' => ['Laipni lūdzam,', 'Grāmatvedības sistēma', 'Sākums']
]
];
public function testLogin2fa(): void
{
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
foreach (self::url as $lang => $pageData) {
// Login - redirect to 2FA
$this->url($pageData['url']);
$this->switchToLanguage($lang);
$this->elementWait('user_login');
// Input login data
$this->byId("user_login")->sendKeys($loginData['user']);
$this->byId("user_password")->sendKeys($loginData['password']);
$this->byCssSelector("form#frm_input div#agree_to_terms")->click();
$this->byCssSelector("form#frm_input button.btn.btn-block")->click();
$this->elementWait('frm_2fa_input');
$this->assertEquals(
$pageData['header-2fa'],
$this->byCssSelector('div#form > .relative > p.font-20')->getText()
);
// Validate 2fa code from google
$oGoogle2FA = new cGoogle2FA();
$next2FACode = $oGoogle2FA->getGoogleAuthCode($loginData['2fa']);
foreach (str_split($next2FACode) as $i => $char) {
$this->byCssSelector("input.code2fa[tabindex='" . ++$i . "']")->clear()->sendKeys($char);
}
// Wait for company selection screen by default user has now multiple companies
$this->elementWait(
"//ul[@id='favorite']//li/a/i[contains(text(),'" . siteAccounts::ACCOUNT_SELF_EMPLOYED . "')]",
self::XPATH
);
$this->elementExists(
"//ul[@id='favorite']//li/a/i[contains(text(),'" . siteAccounts::ACCOUNT_SELF_EMPLOYED . "')]",
self::XPATH
);
$this->byXPath(
"//ul[@id='favorite']//li/a/i[contains(text(),'" . siteAccounts::ACCOUNT_SELF_EMPLOYED . "')]/.."
)->click();
$this->waitUntilDomReadyState();
// Accept cookies message
$this->awaitAndAcceptCookies();
$this->switchToLanguage($lang);
// Validate dashboard welcome messages
$this->elementWait("#drop_cnt > .doc > .form-data div.container.dashboard-cnt", self::CSS_SELECTOR);
$this->assertExpected($pageData['welcome-msg'], $this->byTagName('body')->getText());
// Log Out
$this->logout();
$this->assertEquals($pageData['header'], $this->byCssSelector('div#form > .relative > p.font-20')->getText());
}
}
public function testLogin2faForm(): void
{
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
foreach (self::url as $lang => $pageData) {
// Login - redirect to 2FA
$this->url($pageData['url']);
// Login user till Two-factor authentication
pubUserLoginTest::logInUserByCredentials($this, pubUserLoginTest::url[$lang], $loginData);
// Test if 2FA page loaded correctly
foreach ($pageData['exists'] as $selectorToFind) {
$this->assertTrue($this->elementExists($selectorToFind, self::CSS_SELECTOR),
"Could not find element by selector -> {$selectorToFind}");
}
// Check for form texts in page
$this->assertExpected($pageData['text-exists'], $this->byTagName('body')->getText());
// Check validation
$i = 0;
$inputs = $this->webDriver->findElements(WebDriverBy::cssSelector('#frm_2fa_input input.code2fa'));
foreach ($inputs as $element) {
$i++;
$this->webDriver->action()->moveToElement($this->byCssSelector("input.code2fa[tabindex='" . $i . "']"))->perform();
$this->webDriver->executeScript('$("input.code2fa:focus").blur();');
$this->webDriver->executeScript('$("input.code2fa[tabindex=\'' . $i . '\']").focus().blur().focus();');
$this->byCssSelector("input.code2fa[tabindex='" . $i . "']")->click();
$this->elementWait("input.code2fa[tabindex='" . $i . "'] + div.errMsg", self::CSS_SELECTOR);
$this->assertEquals($pageData['fill-field'], $this->byCssSelector(
"input.code2fa[tabindex='" . $i . "'] + div.errMsg")->getText(),
"2FA code for 2FA not found by input index {$i}"
);
}
// Send random code
foreach ($inputs as $element) {
$element->sendKeys('1');
}
$this->elementWait('div.status_error', self::CSS_SELECTOR);
$this->assertEquals($pageData['inv-code'], $this->byCssSelector('div.status_error')->getText());
// Check for logout - log out
$this->byCssSelector("#frm_2fa_input > a.link")->click();
$this->elementWait('user_login');
$this->assertEquals($pageData['header'], $this->byCssSelector('div#form > .relative > p.font-20')->getText());
}
}
}

View File

@ -0,0 +1,62 @@
<?php
namespace ElixirAudit\Tests\SeleniumTests;
use ElixirAudit\Tests\BasePhpUnitSeleniumCase;
use ElixirAudit\Tests\DataSetup\Constants\siteUsers;
use ElixirAudit\Tests\DataSetup\Traits\App\pubUsersTrait;
class BaseLoginTest extends BasePhpUnitSeleniumCase
{
use pubUsersTrait;
public function testBaseLogin()
{
// $this->logIntoApplicationByUserType(BasePhpUnitSeleniumCase::loginAppSelfEmployed);
// sleep(6);
// $this->logIntoAdmin(siteUsers::loginCmsAdmin);
// sleep(6);
$this->assertTrue(true);
// $this->dbSetup([
// 'kvsApp.sql', 'appUserData.sql',
// 'appMessages.sql', 'countries.sql',
// 'templateAndLinks.sql',
// //'pagesV3.sql'
// ]);
// $this->url('admin/access/login');
// $this->assertEquals('System Access', $this->byCssSelector('h1')->getText());
//
// $this->byId("accessloginusername")->sendKeys('martin');
// $this->byId("accessloginpassword")->sendKeys('magic8417');
// $this->byCssSelector("button.btn-primary")->click();
// $this->assertEquals('Dashboard', $this->byCssSelector('h1')->getText());
// $this->url('admin/apps/');
//
// $this->url('admin/apps/impersonate/45');
// $this->assertStringContainsString('Training Portal Dashboard', $this->byCssSelector('h1')->getText());
//
// $this->applicationBaseUrl = 'http://purple-square-recruitment-demo.healthcare_audit_php/';
// $this->url('user/6562');
//
// $this->clearTempFolder();
// $this->byCssSelector(".external.btn.btn-primary.btn-xs")->click();
//
// $file = $this->getFileFromTempFolder();
// $this->assertIsString($file, 'Downloaded file not found');
//
// $this->assertExpected([
// 'Purple Square Recruitment',
// 'Current Training Certificate Summary',
// 'Name of Candidate : Andy Corson'
// ], (new Extract())->pdf($file)->text());
}
}

View File

@ -0,0 +1,29 @@
<?php
namespace ElixirAudit\Tests\SeleniumTests\Sys\SysSiteMap;
use ElixirAudit\Tests\BasePhpUnitSeleniumCase;
use ElixirAudit\Tests\DataSetup\Constants\siteUsers;
class sysSiteMapRoutesTest extends BasePhpUnitSeleniumCase
{
protected function setUp(): void
{
parent::setUp();
}
public function testSysSitemapLogin(): void
{
$this->logIntoAdmin(siteUsers::loginCmsAdmin);
$this->url('zsmkadmin/site-map/system-site-map');
$this->elementWait("data");
$this->assertStringContainsString(
mb_strtoupper('SYS New Site Map'),
mb_strtoupper($this->byCssSelector('#data div.search > h2')->getText()),
);
$this->logoutAdmin();
}
}

View File

@ -0,0 +1,172 @@
<?php
namespace ElixirAudit\Tests\SeleniumTests\Sys\SysUsersLogin;
// use BRSystems\Core\Library\CGoogle2FA\cGoogle2FABase;
use BRSystems\Core\Library\cGoogle2FA\cGoogle2FA;
use Facebook\WebDriver\WebDriverBy;
use ElixirAudit\Tests\BasePhpUnitSeleniumCase;
use ElixirAudit\Tests\DataSetup\Constants\siteUsers;
class sysUserLoginTest extends BasePhpUnitSeleniumCase
{
const url = 'lslsadmin/login';
protected function tearDown(): void
{
$this->logoutAdmin();
parent::tearDown();
}
public function testSysLogin(): void
{
$loginData = $this->getLoginCredentialsByType();
$this->url(self::url);
// Login user till Two-factor authentication
self::logInUserByCredentials($this, $loginData);
// Check for logout - log out
$this->assertEquals('Back to login', $this->byCssSelector('#frm_2fa_input a')->getText());
$this->byCssSelector("#frm_2fa_input a")->click();
$this->elementWait('user_login');
$this->assertEquals('ACCOUNTING', $this->byCssSelector('#frm_input > h1')->getText());
}
public static function logInUserByCredentials(
BasePhpUnitSeleniumCase $activeTestCase,
array $loginData = null
): void {
$activeTestCase->elementWait('user_login');
$activeTestCase->assertEquals('ACCOUNTING', $activeTestCase->byCssSelector('#frm_input > h1')->getText());
// Input login data
$activeTestCase->byId("user_login")->sendKeys($loginData['user']);
$activeTestCase->byId("user_password")->sendKeys($loginData['password']);
$activeTestCase->byCssSelector("#frm_input button.btn")->click();
$activeTestCase->elementWait('frm_2fa_input');
$activeTestCase->assertEquals('Two-factor authentication', $activeTestCase->byCssSelector('#frm_2fa_input > h1')->getText());
}
public function testSysLoginErrorMessages(): void
{
$this->url(self::url);
// Login user till Two-factor authentication
$this->elementWait('user_login');
$this->assertEquals('ACCOUNTING', $this->byCssSelector('#frm_input > h1')->getText());
// Input login data
$this->byId("user_login")->sendKeys("");
$this->byId("user_password")->sendKeys("");
$this->byCssSelector("#frm_input button.btn")->click();
$this->webDriver->action()->moveToElement($this->byCssSelector('#user_login'))->perform();
$this->elementWait('div.validate.v-error #user_login + div.errMsg', self::CSS_SELECTOR);
$this->assertEquals('Please fill in the field!', $this->byCssSelector('#user_login + div.errMsg')->getText());
$this->webDriver->action()->moveToElement($this->byCssSelector('#user_password'))->perform();
$this->elementWait('div.validate.v-error #user_password + div.errMsg', self::CSS_SELECTOR);
$this->assertEquals('Please fill in the field!', $this->byCssSelector('#user_password + div.errMsg')->getText());
// Input data into fields
$this->byId("user_login")->sendKeys("test");
$this->webDriver->executeScript('$("#user_login").focus().blur();');
$this->elementWait('div.validate.v-ok #user_login', self::CSS_SELECTOR);
$xPath = '//input[@id="user_login"]/ancestor::div[contains(@class,"v-ok")]';
$this->assertTrue($this->elementExists($xPath, self::XPATH));
$this->byId("user_password")->sendKeys("test");
$this->webDriver->executeScript('$("#user_password").focus().blur();');
$xPath = '//input[@id="user_password"]/ancestor::div[contains(@class,"v-ok")]';
$this->assertTrue($this->elementExists($xPath, self::XPATH));
// Check error login
$this->byCssSelector("#frm_input button.btn")->click();
$this->waitUntilDomReadyState();
$this->webDriver->action()->moveToElement($this->byCssSelector('#user_login'))->perform();
$this->elementWait('div.validate.v-error #user_login + div.errMsg', self::CSS_SELECTOR);
$this->assertEquals('The username or password is incorrect!', $this->byCssSelector('#user_login + div.errMsg')->getText());
}
public function testSysLogin2FactorAuthentication(): void
{
$loginData = $this->getLoginCredentialsByType();
$this->url(self::url);
// Login user till Two-factor authentication
self::logInUserByCredentials($this, $loginData);
$fieldsToCheck = [
'input.code2fa[tabindex=\'1\']', 'input.code2fa[tabindex=\'2\']', 'input.code2fa[tabindex=\'3\']',
'input.code2fa[tabindex=\'4\']', 'input.code2fa[tabindex=\'5\']', 'input.code2fa[tabindex=\'6\']',
'button[type=submit]', '#frm_2fa_input a'
];
// Test if 2FA page loaded correctly
foreach ($fieldsToCheck as $selectorToFind) {
$this->assertTrue(
$this->elementExists($selectorToFind, self::CSS_SELECTOR),
"Could not find element by selector -> {$selectorToFind}"
);
}
// Check validation
$i = 1;
$inputs = $this->webDriver->findElements(WebDriverBy::cssSelector('#frm_2fa_input input.code2fa'));
foreach ($inputs as $element) {
$this->webDriver->action()->moveToElement($this->byCssSelector("input.code2fa[tabindex='" . $i . "']"))->perform();
$this->webDriver->executeScript('$("input.code2fa:focus").blur(); $("input.code2fa[tabindex=\'' . $i . '\']").focus().blur().focus();');
$this->elementWait("input.code2fa[tabindex='" . $i . "'] + div.errMsg", self::CSS_SELECTOR);
$this->assertEquals(
'Please fill in the field!',
$this->byCssSelector("input.code2fa[tabindex='" . $i . "'] + div.errMsg")->getText(),
"2FA code for 2FA not found by input index {$i}"
);
$i++;
}
// Send random code
foreach ($inputs as $element) {
$element->sendKeys('1');
}
$this->elementWait('p.msg-error', self::CSS_SELECTOR);
$this->assertEquals(
'2FA Login input code error!',
$this->byCssSelector('p.msg-error')->getText()
);
// Validate actual 2fa code from google
$oGoogle2FA = new cGoogle2FA();
$next2FACode = $oGoogle2FA->getGoogleAuthCode($loginData['2fa']);
foreach (str_split($next2FACode) as $i => $char) {
$this->byCssSelector("input.code2fa[tabindex='" . ++$i . "']")->clear()->sendKeys($char);
}
// Validate dashboard welcome messages
$this->elementWait("#dashboard", self::CSS_SELECTOR);
$this->assertStringContainsString(
mb_strtoupper('Dashboard'),
mb_strtoupper($this->byCssSelector('h2.title')->getText())
);
// Check for logout - log out
$this->webDriver->action()->moveToElement($this->byCssSelector('.menu-cnt .settbox li.sett.last a'))->perform();
$this->elementWait('div.settbox_cnt.sub-menu ul', self::CSS_SELECTOR);
$elementXpath = '//div[contains(@class,"settbox_cnt")]/ul/li/a/div[@class="ico-logout"]/..';
$this->webDriver->action()->moveToElement($this->byXPath($elementXpath))->perform();
$this->byXPath($elementXpath)->click();
$this->elementWait('user_login');
$this->assertEquals('ACCOUNTING', $this->byCssSelector('#frm_input > h1')->getText());
}
}

View File

@ -0,0 +1,47 @@
<?php
namespace ElixirAudit\Tests\UnitTests\App\Index;
use BRSystems\Core\App\index\index;
use ElixirAudit\Tests\BasePhpUnitCase;
use ElixirAudit\Tests\DataSetup\Constants\siteMap;
class indexBase extends BasePhpUnitCase
{
protected index $index;
protected function setUp(): void
{
// Init base structure
$this->unitTestsAreRunning = true;
parent::setUp();
$this->clearDbState();
// Create new class
$this->index = $this->initBaseClassObjectBySiteMapId(SiteMap::PUB_INDEX);
}
protected function tearDown(): void
{
$this->clearDbState();
parent::tearDown();
}
protected function clearDbState(): void
{
$this->resetGetAndPost();
$this->reloadDbTables(
[
'mod_account_manager',
'mod_articles_files',
'mod_users_subscription_mails',
'mod_account_manager',
'mod_account_permissions',
'mod_account_to_bills',
'mod_account_to_create',
'mod_account_to_users',
]
);
}
}

View File

@ -0,0 +1,11 @@
<?php
namespace ElixirAudit\Tests\UnitTests\App\Index;
class indexModuleTest extends indexBase
{
public function testPageCookiesActionDefaultAction(): void
{
$this->index->controller->module->activateUser(13);
}
}

View File

@ -0,0 +1,504 @@
<?php
namespace ElixirAudit\Tests\UnitTests\App\Index;
use BRSystems\Core\Library\cDefuseCrypto\cDefuseCrypto;
use Exception;
class indexTest extends indexBase
{
public function testIndexPageDefaultAction(): void
{
ob_start();
$this->index->pageIndexAction();
$pageHTML = ob_get_contents();
ob_end_clean();
$this->assertExpected(
[
'<title>Zutenis | Sākums</title>',
'<h1 class="to-animate">Laipni lūgti grāmatvedības sistēmā ZUTENIS</h1>',
'<h2 class="to-animate">Atsauksmes</h2>',
'<h2>Pakalpojumi</h2>',
'<h2>Mēs esam radoši</h2>',
'<h2>Grāmatvedības sistēma</h2>',
],
$pageHTML
);
// Scroll param added
$this->setGet(['scroll_to' => '#fh5co-intro']);
try {
$this->index->pageIndexAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['Redirected to Location:'],
$error->getMessage()
);
}
}
public function testIndexPageRequestFileDownloadAction(): void
{
$oCry = new cDefuseCrypto();
$this->setGet([
'action' => 'file',
'f' => $oCry->encrypt(71),
'p' => true
]);
try {
$this->index->pageIndexAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['Redirected to Location:'],
$error->getMessage()
);
}
// Delete user cfg
$id = $this->cDb->_queryInsert(
'mod_articles_files',
[
'ref_id' => 0,
'file_name' => 'TRANZAKCIJU_IMPORTS.xlsx',
'file_link' => '/company/doc_logo/8412e9930cf0cc07800ffa5977ebe0e1d717374c.png',
'file_disabled' => '0',
'file_order' => 0,
'file_type' => 2,
]
);
$this->setGet([
'action' => 'file',
'f' => $oCry->encrypt($id),
'p' => false
]);
try {
$this->index->pageIndexAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['File Download: /var/www/html/www/files/company/doc_logo/8412e9930cf0cc07800ffa5977ebe0e1d717374c.png'],
$error->getMessage()
);
}
}
public function testIndexPageContactUsAction(): void
{
$this->setGet([
'action' => 'contact_us',
'data' => '{"name":"Title","email":"test@test.lv","phone":"123456789","message":"msg"}'
]);
try {
$this->index->pageIndexAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"jsonok":true}'],
$error->getMessage()
);
}
// error case
$this->setGet([
'action' => 'contact_us',
'data' => '{"name":"","message":""}'
]);
try {
$this->index->pageIndexAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['"error":true,"0":"fData","1"'],
$error->getMessage()
);
}
}
public function testIndexPageSubscribeAction(): void
{
$this->setGet([
'action' => 'subscribe',
'data' => ['sub_email' => 'test@test.lv']
]);
try {
$this->index->pageIndexAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"jsonok":true}'],
$error->getMessage()
);
}
// Case 2
$this->setGet([
'action' => 'subscribe',
'data' => ['sub_email' => 'test2222@test.lv']
]);
try {
$this->index->pageIndexAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"jsonok":true}'],
$error->getMessage()
);
}
// Error Case
$this->setGet([
'action' => 'subscribe',
'data' => ['sub_email' => '']
]);
try {
$this->index->pageIndexAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"error":true,"msg":"Something went wrong!"}'],
$error->getMessage()
);
}
// Error Case 2
$this->setGet([
'action' => 'subscribe',
'data' => ['sub_email' => 'test@']
]);
try {
$this->index->pageIndexAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"error":true,"msg":"Something went wrong!"}'],
$error->getMessage()
);
}
}
public function testIndexPageUnsubscribeAction(): void
{
$this->setGet([
'action' => 'unsubscribe',
'data' => ['sub_email' => 'test@test.lv']
]);
try {
$this->index->pageIndexAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"jsonok":true}'],
$error->getMessage()
);
}
// Error case 1
$this->setGet([
'action' => 'unsubscribe',
'data' => ['sub_email' => 'test']
]);
try {
$this->index->pageIndexAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"jsonok":true}'],
$error->getMessage()
);
}
// Error case 2
$this->setGet([
'action' => 'unsubscribe',
'data' => ['sub_email' => '']
]);
try {
$this->index->pageIndexAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"error":true,"msg":"Something went wrong!"}'],
$error->getMessage()
);
}
}
public function testPageUnSubscribeDefaultAction(): void
{
ob_start();
$this->index->pageUnSubscribeAction();
$pageHTML = ob_get_contents();
ob_end_clean();
$this->assertExpected(
[
'<h1 class="to-animate">Atcelt abonēšanu</h1>',
'<h2 class="to-animate">Kāpēc atrakstīties?</h2>',
],
$pageHTML
);
$this->setGet([
'action' => 'unsubscribe',
'data' => ['sub_email' => 'test@test.lv']
]);
try {
$this->index->pageUnSubscribeAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"jsonok":true}'],
$error->getMessage()
);
}
// Error case 1
$this->setGet([
'action' => 'unsubscribe',
'data' => ['sub_email' => 'test']
]);
try {
$this->index->pageUnSubscribeAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"jsonok":true}'],
$error->getMessage()
);
}
// Error case 2
$this->setGet([
'action' => 'unsubscribe',
'data' => ['sub_email' => '']
]);
try {
$this->index->pageUnSubscribeAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"error":true,"msg":"Something went wrong!"}'],
$error->getMessage()
);
}
}
public function testPageSubscribeActionDefaultAction(): void
{
ob_start();
$this->index->pageSubscribeAction();
$pageHTML = ob_get_contents();
ob_end_clean();
$this->assertExpected(
[
'<h1 class="to-animate">Abonēt</h1>',
'<h2 class="to-animate">Subscribe to our newsletters</h2>',
],
$pageHTML
);
$this->setGet([
'action' => 'subscribe',
'data' => ['sub_email' => 'test@test.lv']
]);
try {
$this->index->pageSubscribeAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"jsonok":true}'],
$error->getMessage()
);
}
$this->setGet([
'action' => 'subscribe',
'data' => ['sub_email' => 'test222222@test.lv']
]);
try {
$this->index->pageSubscribeAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"jsonok":true}'],
$error->getMessage()
);
}
// Error case 1
$this->setGet([
'action' => 'subscribe',
'data' => ['sub_email' => 'test']
]);
try {
$this->index->pageSubscribeAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"error":true,"msg":"Something went wrong!"}'],
$error->getMessage()
);
}
// Error case 2
$this->setGet([
'action' => 'subscribe',
'data' => ['sub_email' => '']
]);
try {
$this->index->pageSubscribeAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"error":true,"msg":"Something went wrong!"}'],
$error->getMessage()
);
}
}
public function testPageAboutUsActionDefaultAction(): void
{
ob_start();
$this->index->pageAboutUsAction();
$pageHTML = ob_get_contents();
ob_end_clean();
$this->assertExpected(
[
'<h1 class="to-animate">Par mums</h1>',
'<h2 class="to-animate">Esam profesionāļi un pieredzējuši speciālisti ar efektīvu un izcilu darba ' .
'sniegumu, sniedzot mūsu sistēmas lietotājiem labāko risinājumu.</h2>',
],
$pageHTML
);
}
public function testPageFAQActionDefaultAction(): void
{
ob_start();
$this->index->pageFAQAction();
$pageHTML = ob_get_contents();
ob_end_clean();
$this->assertExpected(
[
'<h1 class="to-animate">Biežāk uzdotie jautājumi</h1>',
'<h2 class="to-animate">Šeit jūs varat atrast dažus no mūsu bieži uzdotajiem jautājumiem</h2>',
],
$pageHTML
);
}
public function testAgreeToTermsAction(): void
{
ob_start();
$this->index->agreeToTermsAction();
$pageHTML = ob_get_contents();
ob_end_clean();
$this->assertExpected(
[
'<h1 class="to-animate">Lietošanas noteikumi</h1>',
'<h2 class="to-animate">Spēkā no 2020. gada 1. janvāra</h2>',
],
$pageHTML
);
}
public function testUserActivationAction(): void
{
ob_start();
$this->index->userActivationAction();
$pageHTML = ob_get_contents();
ob_end_clean();
$this->assertExpected(
[
'<p class="fables-forth-text-color text-center">Something went wrong while activating your account!</p>'
],
$pageHTML
);
}
public function testPageDisclaimersAction(): void
{
ob_start();
$this->index->pageDisclaimersAction();
$pageHTML = ob_get_contents();
ob_end_clean();
$this->assertExpected(
[
'<h1 class="to-animate">Atruna</h1>',
'<h2 class="to-animate">Disclaimer short description</h2>',
],
$pageHTML
);
}
public function testPageCopyRightsAction(): void
{
ob_start();
$this->index->pageCopyRightsAction();
$pageHTML = ob_get_contents();
ob_end_clean();
$this->assertExpected(
[
'<h1 class="to-animate">Autortiesības</h1>',
'<h2 class="to-animate">Spēkā no 2019. gada 1. jūnija</h2>',
],
$pageHTML
);
}
public function testPageAccessErrorAction(): void
{
ob_start();
$this->index->pageAccessErrorAction();
$pageHTML = ob_get_contents();
ob_end_clean();
$this->assertExpected(
[
'<h2 class="fables-second-text-color mt-3 font-30 font-weight-bold text-left" ' .
'style="margin-bottom: 15px;">Piekļuves kļūda</h2>',
],
$pageHTML
);
}
public function testBlankAction(): void
{
ob_start();
$this->assertTrue($this->index->blankAction());
$pageHTML = ob_get_contents();
ob_end_clean();
}
}

View File

@ -0,0 +1,41 @@
<?php
namespace ElixirAudit\Tests\UnitTests\App\Index;
use Exception;
class pageCookiesActionTest extends indexBase
{
public function testPageCookiesActionDefaultAction(): void
{
ob_start();
$this->index->pageCookiesAction();
$pageHTML = ob_get_contents();
ob_end_clean();
$this->assertExpected(
[
'<h1 class="to-animate">Sīkdatnes Zutenis vietnē</h1>',
'<h2 class="to-animate">Spēkā no 2020. gada 1. janvāra</h2>',
],
$pageHTML
);
}
public function testAcceptCookiesAction(): void
{
$this->setGet([
'action' => 'accept-cookies'
]);
try {
$this->index->pageCookiesAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"jsonok":true,"data":true}'],
$error->getMessage()
);
}
}
}

View File

@ -0,0 +1,98 @@
<?php
namespace ElixirAudit\Tests\UnitTests\App\Index;
use Exception;
class pageRegisterActionTest extends indexBase
{
protected function clearDbState(): void
{
parent::clearDbState();
$this->resetGetAndPost();
$this->reloadDbTables(
[
'mod_account_manager',
'mod_account_permissions',
'mod_account_to_bills',
'mod_account_to_create',
'mod_account_to_users',
]
);
}
public function testPageRegisterActionDefaultAction(): void
{
ob_start();
$this->index->pageRegisterAction();
$pageHTML = ob_get_contents();
ob_end_clean();
$this->assertExpected(
[
'<h1 class="to-animate">Reģistrācija</h1>',
'Aizpildiet zemāk atrodošo reģistrācijas veidlapu un sāciet izmantot mūsu sistēmu jau šodien!',
],
$pageHTML
);
}
public function testPageRegisterActionCnaAction(): void
{
$this->setGet([
'action' => 'cna',
'data' => '{"acc_name":"test+marekas","reg_nr":"12345677890","chkVat":false,"chkMicro":false,"a_type":"1",' .
'"document_system":false,"uid":"","login":"tt@tttttt.lv","name":"mm","surname":"tt",' .
'"email":"tt@tttttt.lv","phone":"1234567890","chkAgree":true,"chkSubscribe":true}'
]);
try {
$this->index->pageRegisterAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"jsonok":true,"data":true}'],
$error->getMessage()
);
}
// Error case
$this->setGet([
'action' => 'cna',
'data' => '{"acc_name":"test+marekas","reg_nr":"12345677890","chkVat":false,"chkMicro":false,"a_type":"1",' .
'"document_system":false,"uid":"","login":"tt@tttttt.lv","name":"mm","surname":"tt",' .
'"email":"tt@tttttt.lv","phone":"1234567890","chkAgree":true,"chkSubscribe":true}'
]);
try {
$this->index->pageRegisterAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"error":true,"data":{"email":"Lietot\u0101js ar \u0161o e-pastu jau ir re\u0123istr\u0113ts!"'],
$error->getMessage()
);
}
}
public function testPageRegisterActionCnaActionError(): void
{
$this->setGet([
'action' => 'cna',
'data' => '{"acc_name":"test+marekas","reg_nr":"12345677890","chkVat":false,"chkMicro":false,"a_type":"1",' .
'"document_system":false,"uid":"","login":"keiss.mareks@gmail.com","name":"mm","surname":"tt",' .
'"email":"keiss.mareks@gmail.com","phone":"1234567890","chkAgree":true,"chkSubscribe":true}'
]);
try {
$this->index->pageRegisterAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"error":true,"data":{"email":"Lietot\u0101js ar \u0161o e-pastu jau ir re\u0123istr\u0113ts!"}}'],
$error->getMessage()
);
}
}
}

View File

@ -0,0 +1,49 @@
<?php
namespace ElixirAudit\Tests\UnitTests\App\PubUserManager;
use BRSystems\Core\App\pubUserManager\pubUserManager;
use ElixirAudit\Tests\BasePhpUnitCase;
use ElixirAudit\Tests\DataSetup\Constants\siteMap;
class UserProfileActionTest extends BasePhpUnitCase
{
private pubUserManager $pubUserManager;
protected function setUp(): void
{
// Init base structure
$this->unitTestsAreRunning = true;
$this->resetGetAndPost();
parent::setUp();
$this->reloadDbTables(['mod_users']);
// Create new class
$this->pubUserManager = $this->initBaseClassObjectBySiteMapId(siteMap::PUB_USER_PROFILE);
}
protected function tearDown(): void
{
$this->reloadDbTables(['mod_users']);
$this->logOutUnitTestUser();
parent::tearDown();
}
public function testUserProfileAction(): void
{
// Generate base HTML layout & save output to var
ob_start();
$this->pubUserManager->UserProfileAction();
$pageHTML = ob_get_contents();
ob_end_clean();
$this->assertExpected(
[
'<title>Zutenis | Lietotāja profils</title>',
'<div id="company_menu">',
'<div id="cms-table-drop-marker">'
],
$pageHTML
);
}
}

View File

@ -0,0 +1,744 @@
<?php
namespace ElixirAudit\Tests\UnitTests\App\PubUserManager;
use BRSystems\Core\Library\cGoogle2FA\cGoogle2FA;
use Exception;
use BRSystems\Core\App\pubUserManager\pubUserManager;
use ElixirAudit\Tests\BasePhpUnitCase;
use ElixirAudit\Tests\DataSetup\Constants\SiteMap;
use ElixirAudit\Tests\DataSetup\Constants\siteUsers;
class pubUserManagerBaseTest extends BasePhpUnitCase
{
private pubUserManager $pubUserManager;
private array $newUserCfg = [
'action' => 'selfSave',
'fields' =>
'{' .
'"pbase":{"u_login":"test@test.lv","u_email":"test@test.lv","u_name":"Test lietotajs","u_surname":"Tests uzvārds","u_phone":"132465789"},' .
'"companies":{"c23":1,"c148":0,"c155":0,"c168":0},' .
'"user_groups":{"g119":1,"g89":1,"g107":0,"g106":0,"g116":0,"g95":0,"g112":0,"g87":0,"g92":0,"g115":0,"g88":0,"g72":0,"g117":0,"g111":0},' .
'"user_permissions":{"g512":1},' .
'"psettings":{"u_blocked":0,"bFullScreen":1,"bUseDarkMode":0,"bShowBtnLabels":1,"u_subscription":1,"u_send_data_mail":1},' .
'"img":""}'
];
protected function setUp(): void
{
// Init base structure
$this->unitTestsAreRunning = true;
$this->resetGetAndPost();
parent::setUp();
$this->reloadDbTables(['mod_users']);
// Create new class
$this->pubUserManager = $this->initBaseClassObjectBySiteMapId(SiteMap::PUB_USER_MANAGER);
}
protected function tearDown(): void
{
$this->reloadDbTables(['mod_users', 'mod_users_permissions']);
$this->logOutUnitTestUser();
parent::tearDown();
}
public function testBaseCase(): void
{
// Default form generation
ob_start();
$this->pubUserManager->run();
$pageHTML = ob_get_contents();
ob_end_clean();
$this->assertExpected(
[
'<title>Zutenis | Lietotāju pārvaldība</title>',
'<div class="table_header_info"></div>',
'<div id="cms-table-drop-marker">'
],
$pageHTML
);
}
public function testBaseCaseActionEdit(): void
{
$this->setPost(['action' => 'edit', 'id' => 12]);
// Default form generation
ob_start();
$this->pubUserManager->run();
$pageHTML = ob_get_contents();
ob_end_clean();
$this->assertExpected(
[
'<title>Zutenis | Lietotāju pārvaldība</title>',
'<div class="table_header_info"></div>',
'<div id="cms-table-drop-marker">'
],
$pageHTML
);
}
public function testBaseCaseActionFilterTable(): void
{
$this->addExtraRecordInTableAndResetPost();
// Filter data table
$this->setPost([
'action' => 'filter_table',
'init' => 1,
'filter' => '{"created_by":"","id":"","user_name":"","user_login":"","user_email":"test","status":""}'
]);
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(['"jsonok":true'], $error->getMessage());
// get JSON response
$response = json_decode($error->getMessage(), true);
$this->assertExpected(
[
'<div class="table-rows">',
'<div class="sticky-header-top"></div>',
'<div title="Vārds">Vārds</div>',
'<div title="Lietotājvārds">Lietotājvārds</div>',
'<div title="E-pasts">E-pasts</div>',
'<div title="Tālrunis">Tālrunis</div>',
'<div title="Rediģēts">Rediģēts</div>',
'<a class="tbl-settings">Darbības</a>',
],
$response['data']
);
$this->assertTrue(isset($response['pcount']));
$this->assertTrue(isset($response['rlimit']));
$this->assertTrue(isset($response['header']));
}
}
public function testBaseCaseActionSelfLoad(): void
{
$this->setPost([
'action' => 'selfLoad'
]);
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(['"jsonok":true'], $error->getMessage());
// get JSON response
$response = json_decode($error->getMessage(), true);
$this->assertTrue(isset($response['show']));
$this->assertTrue(isset($response['btn']));
$this->assertTrue(isset($response['html']));
$this->assertExpected(
[
'<li class="breadcrumb-item"><a class="fables-second-text-color tback">Lietotāju pārvaldība</a></li>',
'<div id="pbase" class="inner-cnt sbox">',
'<label for="u_email">E-pasts:</label>',
'<input id="u_email" data-validator="u_email" type="text" class="long" value=""/>',
'<div id="user_groups" class="settings sbox">',
'<div id="user_permissions" class="settings sbox">',
'<div id="psettings" class="settings sbox hide">',
],
$response['html']
);
}
$this->setPost([
'id' => 23,
'action' => 'selfLoad',
]);
// Error accessing other user
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"error":true,"msg":"User doesn\'t exists or you cannot edit this user!"}'],
$error->getMessage()
);
}
// Create user for load
$newUserCfg = $this->newUserCfg;
$newUserCfg['fields'] = base64_encode($newUserCfg['fields']);
$this->setPost($newUserCfg);
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(['"jsonok":true'], $error->getMessage());
// get JSON response
$response = json_decode($error->getMessage(), true);
$this->assertIsInt($response['newid']);
}
// Load created user
$this->setPost([
'action' => 'selfLoad',
'id' => $response['newid'],
]);
$prevResponse = $response;
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(['"jsonok":true'], $error->getMessage());
// get JSON response
$response = json_decode($error->getMessage(), true);
$this->assertTrue(isset($response['show']));
$this->assertTrue(isset($response['btn']));
$this->assertTrue(isset($response['html']));
$this->assertExpected(
[
'<input type="hidden" value="' . $prevResponse['newid'] . '" id="id" data-validator="id"/>',
'<li class="breadcrumb-item"><a class="fables-second-text-color tback">Lietotāju pārvaldība</a></li>',
'<div id="pbase" class="inner-cnt sbox">',
'<label for="u_login">Lietotājvārds:</label>',
'<input id="u_login" data-validator="u_login" type="text" class="normal" disabled="" value="test@test.lv" disabled="disabled" />',
'<label for="u_email">E-pasts:</label>',
'<input id="u_email" data-validator="u_email" type="text" class="long" value="test@test.lv"/>',
'<div id="user_groups" class="settings sbox">',
'<div id="user_permissions" class="settings sbox">',
'<div id="psettings" class="settings sbox">',
],
$response['html']
);
}
}
public function testBaseCaseActionSelfSave(): void
{
$newUserCfg = $this->newUserCfg;
$newUserCfg['fields'] = base64_encode($newUserCfg['fields']);
$this->setPost($newUserCfg);
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(['"jsonok":true'], $error->getMessage());
// get JSON response
$response = json_decode($error->getMessage(), true);
$this->assertTrue(isset($response['jsonok']));
$this->assertTrue(isset($response['newid']));
$this->assertIsInt($response['newid']);
}
// Check error user already exists with this email
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"error":true,"data":{"u_email":"User login already exists!"}}'],
$error->getMessage()
);
}
// Self save existing user
$newUserCfg['id'] = $response['newid'];
$this->setPost($newUserCfg);
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(['"jsonok":true'], $error->getMessage());
// get JSON response
$response = json_decode($error->getMessage(), true);
$this->assertTrue(isset($response['jsonok']));
$this->assertFalse(isset($response['newid']));
}
}
public function testBaseCaseActionChangeRecordsStatus(): void
{
$newId = $this->addExtraRecordInTableAndResetPost();
$this->setPost(
[
'action' => 'changeRecordsStatus',
'baseField' => 'h_status',
'fields' => '{"1":"' . $newId . '"}'
]
);
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(['{"jsonok":true,"data":true}'], $error->getMessage());
}
// Error case
// Try to disable self - user admin
$this->setPost(
[
'action' => 'changeRecordsStatus',
'baseField' => 'h_status',
'fields' => '{"1":"12"}'
]
);
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(['{"error":true,"data":"Something went wrong while updating user(s)!"}'], $error->getMessage());
}
// Prevent self Disable
$this->setPost(
[
'action' => 'changeRecordsStatus',
'baseField' => 'h_status',
'fields' => '{"1":"' . $newId . '","2":"12"}'
]
);
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(['{"jsonok":true,"data":true}'], $error->getMessage());
}
}
public function testBaseCaseActionDeleteRecords(): void
{
$newId = $this->addExtraRecordInTableAndResetPost();
$this->setPost(
[
'action' => 'deleteRecords',
'fields' => '{"1":"' . $newId . '"}'
]
);
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(['{"jsonok":true,"data":true}'], $error->getMessage());
}
// Error case
// Try to delete self - user admin
$this->setPost(
[
'action' => 'deleteRecords',
'fields' => '{"1":"12"}'
]
);
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(['{"error":true,"msg":"Something went wrong while deleting user(s)!"}'], $error->getMessage());
}
// Prevent self delete 2
$this->reloadDbTables(['mod_users']);
$newId = $this->addExtraRecordInTableAndResetPost();
$this->setPost(
[
'action' => 'deleteRecords',
'fields' => '{"1":"' . $newId . '","2":"12"}'
]
);
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(['{"jsonok":true,"data":true}'], $error->getMessage());
}
}
public function testBaseCaseActionISendRecoveryMail(): void
{
$this->setPost(['action' => 'iSendRecoveryMail']);
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(['{"jsonok":true,"data":false}'], $error->getMessage());
}
}
public function testBaseCaseActionTablesCfg(): void
{
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
$this->setPost(['action' => 'tablescfg', 'id' => $loginData['id']]);
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
// get JSON response
$response = json_decode($error->getMessage(), true);
$this->assertTrue(isset($response['jsonok']));
$this->assertTrue(isset($response['html']));
$this->assertExpected(
['<ul class="dx tfields sbox" id="pubLursoftDataReq">'],
$response['html']
);
}
}
public function testBaseCaseActionPropSave(): void
{
$this->setPost(
[
'action' => 'propsave',
'prop' => '{"c0":["partner-status","earnings-status"],"b1":["chart-income-base","chart-expanses-categories"' .
',"chart-3","chart-4"],"b2":["subscription-status","system-new-update-log","quick-view-calendar","recent-activity-log"]}'
]
);
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(['{"jsonok":true,"data":true}'], $error->getMessage());
}
}
public function testBaseCaseActionCompanies(): void
{
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
$this->setPost(['action' => 'companies', 'id' => $loginData['id']]);
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
// get JSON response
$response = json_decode($error->getMessage(), true);
$this->assertTrue(isset($response['jsonok']));
$this->assertTrue(isset($response['html']));
$this->assertExpected(
[
'<input type="text" id="gr-search" class="skip long" />',
'<label for="gr-search">Meklēt kompānijās...</label>',
'<div id="c23" data-validator="c23" class="chk chked"><div></div></div>',
'<label>Mareks Keišs pašn.:</label>',
'<label>Testa Reliģiska organizācija:</label>',
'<label>Testa Biedrība:</label>',
],
$response['html']
);
}
}
public function testBaseCaseActionActivate2FA(): void
{
$oGoogle2FA = new cGoogle2FA();
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
$this->setPost([
'action' => 'activate-2FA',
'secret' => $secret = $oGoogle2FA->getNewGoogleAuthSecret(),
'code' => $oGoogle2FA->getGoogleAuthCode($secret)
]);
try {
$this->pubUserManager->controller->selUserId = $loginData['id'];
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
// get JSON response
$response = json_decode($error->getMessage(), true);
$this->assertTrue(isset($response['jsonok']));
$this->assertTrue(isset($response['url']));
$this->assertEquals('/gramatvedibas-sistema/sistemas-informacijas-panelis', $response['url']);
}
// Error case
$this->setPost([
'action' => 'activate-2FA',
'secret' => 'KDSALKDSDNNV',
'code' => 123123
]);
try {
$this->pubUserManager->controller->selUserId = $loginData['id'];
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertEquals(
'{"error":true,"data":{"code":"Ievad\u012bts k\u013c\u016bdains 2FA iestat\u012b\u0161anas dro\u0161\u012bbas kods!"}}',
$error->getMessage()
);
}
}
public function testBaseCaseActionDeactivate2FA(): void
{
$oGoogle2FA = new cGoogle2FA();
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
$this->setPost([
'action' => 'deactivate-2FA',
'code' => $oGoogle2FA->getGoogleAuthCode($loginData['2fa'])
]);
try {
$this->pubUserManager->controller->selUserId = $loginData['id'];
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
// get JSON response
$response = json_decode($error->getMessage(), true);
$this->assertTrue(isset($response['jsonok']));
}
// Error case
$this->setPost([
'action' => 'deactivate-2FA',
'secret' => 'KDSALKDSDNNV',
'code' => 123123
]);
try {
$this->pubUserManager->controller->selUserId = $loginData['id'];
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertEquals(
'{"error":true,"data":{"code":"Login 2FA Security removal code input error!"}}',
$error->getMessage()
);
}
}
public function testBaseCaseActionGet2FAQRCode(): void
{
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
$this->setPost(['action' => 'get2FA-QRCode']);
try {
$this->pubUserManager->controller->selUserId = $loginData['id'];
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
// get JSON response
$response = json_decode($error->getMessage(), true);
$this->assertTrue(isset($response['jsonok']));
$this->assertTrue(isset($response['html']));
$this->assertTrue(isset($response['msgEnableAuth']));
$this->assertTrue(isset($response['buttonYes']));
$this->assertTrue(isset($response['buttonCancel']));
$this->assertTrue(isset($response['buttonActivate']));
$this->assertExpected(
[
'<p>Pierakstiet savu slepeno atslēgu un glabājiet to droši.<br/>',
'Tā būs nepieciešama, lai atgūtu 2FA, nozaudēšanas gadījumā.</p>',
'<input id="code" value="" data-validator="code" autocomplete="off"/>',
],
$response['html']
);
}
// With reload
$this->setPost([
'action' => 'get2FA-QRCode',
'reload' => true
]);
try {
$this->pubUserManager->controller->selUserId = $loginData['id'];
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
// get JSON response
$response = json_decode($error->getMessage(), true);
$this->assertTrue(isset($response['jsonok']));
$this->assertTrue(isset($response['sUrl']));
$this->assertTrue(isset($response['sSecret']));
$this->assertTrue(strlen($response['sSecret']) > 0);
}
}
public function testBaseCaseActionGet2FA4Deactivate(): void
{
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
$this->setPost(['action' => 'get2FA-4Deactivate']);
try {
$this->pubUserManager->controller->selUserId = $loginData['id'];
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
// get JSON response
$response = json_decode($error->getMessage(), true);
$this->assertTrue(isset($response['jsonok']));
$this->assertTrue(isset($response['html']));
$this->assertTrue(isset($response['msgDisableAuth']));
$this->assertTrue(isset($response['buttonDeactivate']));
$this->assertExpected(
[
'<p style="margin-bottom: 14px;">Ievadiet kodu, lai deaktivizētu 2FA</p>',
'<p>Ja atslēgsiet 2FA autentifikāciju, daži moduļi var nebūt pieejami!</p>',
],
$response['html']
);
}
}
public function testBaseCaseActionGenRandomPwd(): void
{
$this->setPost(['action' => 'genRandomPwd']);
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(['"jsonok":true,"key":"'], $error->getMessage());
}
}
public function testBaseCaseActionGetTableSettings(): void
{
$this->setPost(['action' => 'getTableSettings', 'mod' => 'pubUserManager']);
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
// get JSON response
$response = json_decode($error->getMessage(), true);
$this->assertTrue(isset($response['jsonok']));
$this->assertTrue(isset($response['vCfg']));
$this->assertTrue(isset($response['mod_title']));
$this->assertTrue(isset($response['save_data']));
$this->assertTrue(isset($response['body']));
$this->assertExpected(
[
'<div id="custom-sticky-status-cnt-top"></div>',
'<h4 class="no-border">Pielāgojiet tabulas kolonnas</h4>',
'<h4 class="no-border">Tablulas rindas</h4>',
'<h4 class="no-border">Atiestatīt izkārtojumu</h4>',
],
$response['body']
);
}
}
public function testBaseCaseActionSaveTableSettings(): void
{
$this->setPost([
'action' => 'saveTableSettings',
'mod' => 'pubUserManager',
'tbl' => '{"pubUserManager":["h_created_by","h_user_name","h_id","h_user_login","h_user_email","h_user_phone' .
'","h_user_last_ip","h_user_last_login","h_user_modified","h_user_created","h_status"],"base_only":true}',
'data' => '{"a_rec_per_page":"25"}'
]);
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"jsonok":true,"data":true}'],
$error->getMessage()
);
}
}
public function testBaseCaseActionResetTableSettings(): void
{
$this->setPost([
'action' => 'resetTableSettings',
'mod' => 'pubUserManager'
]);
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"jsonok":true,"data":true}'],
$error->getMessage()
);
}
}
private function addExtraRecordInTableAndResetPost(): int
{
// Create user for load
$newUserCfg = $this->newUserCfg;
$newUserCfg['fields'] = str_replace(
'"u_login":"test@test.lv"',
'"u_login":"extra.record@test.lv"',
$newUserCfg['fields']
);
$newUserCfg['fields'] = base64_encode($newUserCfg['fields']);
$this->setPost($newUserCfg);
try {
$this->pubUserManager->run();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(['"jsonok":true'], $error->getMessage());
// get JSON response
$response = json_decode($error->getMessage(), true);
$this->assertIsInt($response['newid']);
}
$this->resetGetAndPost();
return $response['newid'];
}
public function testGetUploadConfig(): void
{
$this->pubUserManager = new pubUserManager(getFirstMatchByMapId(SiteMap::PUB_USER_MANAGER));
$data = $this->pubUserManager->controller->getUploadConfig();
$this->assertIsArray($data);
}
public function testGetFileUploadConfig(): void
{
$this->pubUserManager = new pubUserManager(getFirstMatchByMapId(SiteMap::PUB_USER_MANAGER));
$data = $this->pubUserManager->controller->getFileUploadConfig();
$this->assertIsArray($data);
}
}

View File

@ -0,0 +1,96 @@
<?php
namespace ElixirAudit\Tests\UnitTests\App\PubUserManager;
use BRSystems\Core\App\pubUserManager\pubUserManager;
use BRSystems\Core\App\pubUserManager\inc\pubUserManagerModule;
use ElixirAudit\Tests\BasePhpUnitCase;
use ElixirAudit\Tests\DataSetup\Constants\siteMap;
use ElixirAudit\Tests\DataSetup\Constants\siteUsers;
class pubUserManagerModuleTest extends BasePhpUnitCase
{
private pubUserManager $pubUserManager;
private pubUserManagerModule $pubUserManagerModule;
protected function setUp(): void
{
// Init base structure
$this->unitTestsAreRunning = true;
parent::setUp();
$this->reloadDbTables(['mod_users']);
// Create new class
$this->pubUserManager = $this->initBaseClassObjectBySiteMapId(SiteMap::PUB_USER_MANAGER);
$this->pubUserManagerModule = $this->pubUserManager->controller->module;
}
protected function tearDown(): void
{
$this->reloadDbTables(['mod_users']);
parent::tearDown();
}
public function testChangeRecordsStatus(): void
{
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
$this->pubUserManagerModule->changeRecordsStatus(
[$loginData['id']], 'user_blocked'
);
$data = $this->pubUserManagerModule->getRecordDataById(
$loginData['id']
);
$this->assertNull($data);
}
public function testGetUserLinkedCompanies(): void
{
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
$data = $this->pubUserManagerModule->getUserLinkedCompanies(
[$loginData['id']], [$loginData['sel_comp_id']]
);
$this->assertEquals([12 => 12], $data);
}
public function testGetUserStatus(): void
{
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
$data = $this->pubUserManagerModule->getUserStatus(
$loginData['sel_comp_id'], $loginData['id']
);
$this->assertEquals('0', $data);
}
public function testGetArticleData(): void
{
$data = $this->pubUserManagerModule->getArticleData(
366, 7, true
);
$this->assertIsArray($data);
$this->assertEquals('Mērķa grupa', $data[3]['t']);
}
public function testGetUserDataById(): void
{
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
$data = $this->pubUserManagerModule->getUserDataById(
$loginData['id']
);
$this->assertIsArray($data);
$this->assertEquals('Mareks', $data['user_name']);
$this->assertEquals('testmareks', $data['user_login']);
}
public function testGetUserFieldById(): void
{
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
$data = $this->pubUserManagerModule->getUserFieldById(
$loginData['id'], 'user_login'
);
$this->assertEquals('testmareks', $data);
}
}

View File

@ -0,0 +1,244 @@
<?php
namespace ElixirAudit\Tests\UnitTests\App\PubUserManager;
use BRSystems\Core\Library\cCore\cCore;
use BRSystems\Core\Library\cGoogle2FA\cGoogle2FA;
use Exception;
use BRSystems\Core\App\pubUserManager\pubUserManager;
use ElixirAudit\Tests\BasePhpUnitCase;
use ElixirAudit\Tests\DataSetup\Constants\siteMap;
use ElixirAudit\Tests\DataSetup\Constants\siteUsers;
class securityEnforcement2faTrapActionTest extends BasePhpUnitCase
{
private pubUserManager $pubUserManager;
protected function setUp(): void
{
// Init base structure
$this->unitTestsAreRunning = true;
$this->resetGetAndPost();
parent::setUp();
$this->reloadDbTables(['mod_users']);
// Create new class
$this->pubUserManager = $this->initBaseClassObjectBySiteMapId(siteMap::PUB_USER_SECURITY_ENFORCEMENT);
}
protected function tearDown(): void
{
$this->reloadDbTables(['mod_users', 'mod_users_permissions']);
$this->logOutUnitTestUser();
parent::tearDown();
}
public function testSecurityEnforcement2faTrapActionBaseCase(): void
{
$this->logOutUnitTestUser();
// Clear 2fa
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
$this->cDb->_queryUpdate('mod_users', ['user_2fa_secret_enabled' => ''], ['id' => $loginData['id']]);
// Log in & catch redirect exception
$this->loginUnitTestUserForCoverage(siteUsers::loginAppSelfEmployed, false, false);
ob_start();
$this->pubUserManager->securityEnforcement2faTrapAction();
$pageHTML = ob_get_contents();
ob_end_clean();
$this->assertExpected(
[
'<title>Zutenis | Lapas piekļuves kļūda ...</title>',
'<span>Lai piekļūtu grāmatvedības sistēmai, ir jāiespējo <br/>2FA - Divu faktoru autentifikācijas drošība! </span>',
'Divu faktoru autentifikācijas uzstādīšana</p>',
'Uzinstalējiet "Google Authenticator" lietojumprogrammu savā ierīcē',
'Noskenējiet svītrkodu ar "Google Authenticator"',
'<p>Ievadi Google Authenticator lietotnes piešķirto <br/>Divu faktoru autentifikācijas kodu</p>',
'<button class="submit',
'data-href="/ienakt-gramatvedibas-sistema/divu-faktoru-iestatisana">Ieslēgt</button>',
],
$pageHTML
);
}
public function testSecurityEnforcement2faTrapActionBaseCaseWhenUserHasLoggedIn(): void
{
try {
$this->pubUserManager->securityEnforcement2faTrapAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['Redirected to Location: /gramatvedibas-sistema/sistemas-informacijas-panelis'],
$error->getMessage()
);
}
}
public function testSecurityEnforcement2faTrapActionSet2FAQRCode(): void
{
$this->logOutUnitTestUser();
// Clear 2fa
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
$this->cDb->_queryUpdate('mod_users', ['user_2fa_secret_enabled' => ''], ['id' => $loginData['id']]);
// Log in & catch redirect exception
$this->loginUnitTestUserForCoverage(siteUsers::loginAppSelfEmployed, false, false);
$oGoogle2FA = new cGoogle2FA();
$secret = $oGoogle2FA->getNewGoogleAuthSecret();
$this->setPost([
'action' => cCore::C_ACTION_ACTIVATE_2FA,
'secret' => $secret,
'code' => $oGoogle2FA->getGoogleAuthCode($secret)
]);
try {
$this->pubUserManager->securityEnforcement2faTrapAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"jsonok":true,"url":"\/gramatvedibas-sistema\/sistemas-informacijas-panelis"}'],
$error->getMessage()
);
}
}
public function testSecurityEnforcement2faTrapActionSet2FAQRCodeErrorCase(): void
{
$this->logOutUnitTestUser();
// Clear 2fa
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
$this->cDb->_queryUpdate('mod_users', ['user_2fa_secret_enabled' => ''], ['id' => $loginData['id']]);
// Log in & catch redirect exception
$this->loginUnitTestUserForCoverage(siteUsers::loginAppSelfEmployed, false, false);
$this->setPost([
'action' => cCore::C_ACTION_ACTIVATE_2FA,
'secret' => '',
'code' => ''
]);
try {
$this->pubUserManager->securityEnforcement2faTrapAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
[
'{"error":true,"data":{"code":"Ievad\u012bts k\u013c\u016bdains ' .
'2FA iestat\u012b\u0161anas dro\u0161\u012bbas kods!"}}'
],
$error->getMessage()
);
}
}
public function testSecurityEnforcement2faTrapActionDeactivate2FA(): void
{
$oGoogle2FA = new cGoogle2FA();
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
$this->setPost([
'action' => 'deactivate-2FA',
'code' => $oGoogle2FA->getGoogleAuthCode($loginData['2fa'])
]);
try {
$this->pubUserManager->securityEnforcement2faTrapAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"jsonok":true,"data":true}'],
$error->getMessage()
);
}
}
public function testSecurityEnforcement2faTrapActionDeactivate2FAErrorCase1(): void
{
$this->setPost([
'action' => 'deactivate-2FA',
'code' => '123456'
]);
try {
$this->pubUserManager->securityEnforcement2faTrapAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"error":true,"data":{"code":"Login 2FA Security removal code input error!"}}'],
$error->getMessage()
);
}
}
public function testSecurityEnforcement2faTrapActionDeactivate2FAErrorCase2(): void
{
$this->setPost([
'action' => 'deactivate-2FA',
'code' => ''
]);
try {
$this->pubUserManager->securityEnforcement2faTrapAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
$this->assertExpected(
['{"error":true,"data":{"code":"Login 2FA Security removal code input error!"}}'],
$error->getMessage()
);
}
}
public function testSecurityEnforcement2faTrapActionGet2FAQRCodeCase1(): void
{
$this->setPost(['action' => 'get2FA-QRCode']);
try {
$this->pubUserManager->securityEnforcement2faTrapAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
// get JSON response
$response = json_decode($error->getMessage(), true);
$this->assertTrue(isset($response['jsonok']));
$this->assertTrue(isset($response['html']));
$this->assertTrue(isset($response['msgEnableAuth']));
$this->assertTrue(isset($response['buttonYes']));
$this->assertTrue(isset($response['buttonCancel']));
$this->assertTrue(isset($response['buttonActivate']));
$this->assertExpected(
[
'<p>Pierakstiet savu slepeno atslēgu un glabājiet to droši.<br/>',
'Tā būs nepieciešama, lai atgūtu 2FA, nozaudēšanas gadījumā.</p>',
'<input id="code" value="" data-validator="code" autocomplete="off"/>',
],
$response['html']
);
}
}
public function testSecurityEnforcement2faTrapActionGet2FAQRCodeCase2(): void
{
$this->setPost([
'action' => 'get2FA-QRCode',
'reload' => true
]);
try {
$this->pubUserManager->securityEnforcement2faTrapAction();
$this->fail("Exception expected!");
} catch (Exception $error) {
// get JSON response
$response = json_decode($error->getMessage(), true);
$this->assertTrue(isset($response['jsonok']));
$this->assertTrue(isset($response['sUrl']));
$this->assertTrue(isset($response['sSecret']));
$this->assertTrue(strlen($response['sSecret']) > 0);
}
}
}

View File

@ -0,0 +1,81 @@
<?php
namespace ElixirAudit\Tests\UnitTests\App\PubUsers;
use BRSystems\Core\Cms\cmsAccountActivation\inc\cmsAccountActivationController;
use Exception;
use BRSystems\Core\App\pubUsers\pubUsers;
use ElixirAudit\Tests\BasePhpUnitCase;
use ElixirAudit\Tests\DataSetup\Constants\SiteMap;
use ElixirAudit\Tests\DataSetup\Constants\siteUsers;
class accountActivationTest extends BasePhpUnitCase
{
private pubUsers $users;
protected function setUp(): void
{
// Init base structure
$this->unitTestsAreRunning = true;
$this->resetGetAndPost();
parent::setUp();
// Create new class
$this->users = $this->initBaseClassObjectBySiteMapId(SiteMap::PUB_LOGIN, null);
}
protected function tearDown(): void
{
$this->reloadDbTables(['mod_users']);
parent::tearDown();
}
public function testUserAccountActivationViaLinkOnActivatedUser(): void
{
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
$this->setGet([
'act' => $this->users->controller->oDefuseCrypt->encrypt(
$loginData['id'] . cmsAccountActivationController::ACTIVATION_LINK_SEP .
$this->users->controller->oDefuseCrypt->encrypt($loginData['password'])
)
]);
try {
$this->users->loginAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['Redirected to Location: /ienakt-gramatvedibas-sistema'],
$error->getMessage()
);
}
}
public function testUserAccountActivationViaLinkWhileLoggedIn(): void
{
$this->loginUnitTestUserForCoverage();
$loginData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
// Set user not activated
$this->cDb->_queryUpdate('mod_users', ['user_activated' => '0'], ['id' => $loginData['id']]);
$this->setGet([
'act' => $this->users->controller->oDefuseCrypt->encrypt(
$loginData['id'] . cmsAccountActivationController::ACTIVATION_LINK_SEP . $loginData['password']
)
]);
try {
$this->users->loginAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertEquals(
'Redirected to Location: /ienakt-gramatvedibas-sistema/divi-faktori',
$error->getMessage()
);
}
$this->logOutUnitTestUser();
}
}

View File

@ -0,0 +1,225 @@
<?php
namespace ElixirAudit\Tests\UnitTests\App\PubUsers;
use BRSystems\Core\Library\cPasswordMaster\cPasswordMaster;
use Exception;
use BRSystems\Core\App\pubUsers\pubUsers;
use ElixirAudit\Tests\BasePhpUnitCase;
use ElixirAudit\Tests\DataSetup\Constants\siteUsers;
class loginActionRequestTest extends BasePhpUnitCase
{
private pubUsers $users;
protected function setUp(): void
{
// Init base structure
$this->unitTestsAreRunning = true;
parent::setUp();
$this->clearDbState();
// Create new class
$this->users = $this->initBaseClassObjectBySiteMapId();
}
protected function tearDown(): void
{
$this->clearDbState();
parent::tearDown();
}
protected function clearDbState(): void
{
$this->resetGetAndPost();
$this->logOutUnitTestUser();
$this->reloadDbTables(['mod_users', 'mod_account_manager']);
}
public function testLoginActionRequests(): void
{
// Check while logged in
try {
$this->users->loginAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(['Redirected to Location'], $error->getMessage());
}
// Try force login
// Generate base HTML layout & save output to var
ob_start();
$this->setGet(['action' => 'loginf']);
$this->users->loginAction();
$pageHTML = ob_get_contents();
ob_end_clean();
$this->assertExpected(
[
'<title>Zutenis | Autentifikācija</title>',
'Ienākt grāmatvedības sistēmā',
'<input name="user_login" id="user_login" data-validator="user_login"',
'<input name="user_password" id="user_password" data-validator="user_password" type="password"',
'<div id="agree_to_terms" class="chk">',
'<button type="submit"',
],
$pageHTML
);
// Test set year fn
$this->setGet([
'action' => 'setYear',
'id' => 'ZGVmNTAyMDA1NTYzYzVmZmIzMjIwOTlkZDdlYmE5NjAyMWM5NjFjMzUwMDM0MDk4MWMyNGMyNGFlZDFkMzkzZDE1Mzk0' .
'ZGJmNDA3ZGY4MGMyMDJiOTU2ZmQzZDlmNjQ0OTA3ZWZhZTM4NTdjYzM4ZTc3NzNlNmM4OGZhMjE1ODRmZjFkODRiY2Y1OWVm' .
'MmE1ODMyNjQwNGE5Mzc1MzdmNzExMzA2NDM3NmE2NGMwNDA1ZWQ0YTYxMWExNTZiNjViN2JiNjE1MWFiNmQ2Zjc1NDU5ZDFj' .
'MzFiZTllMjc0NzFkYTljNDNkNTg1MjY1NDM0Y2NhMjZlOWNmZDBiMGUyMDQyZDE1OWYzNjY2MGZhNzhjZTQzYTI5M2Y0NWI',
]);
try {
$this->users->loginAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['Redirected to Location: /gramatvedibas-sistema/sistemas-informacijas-panelis'],
$error->getMessage()
);
}
// Test Login function - get user data for extra registration
$this->setPost([
'action' => 'login',
'user_uoa' => 1,
]);
try {
$this->users->loginAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['"jsonok":true,"data":{"login":"testmareks","uid":"'],
$error->getMessage()
);
}
// Test Login function - get user logged in status on force login
$this->setPost([
'action' => 'login',
'user_flogin' => 1
]);
try {
$this->users->loginAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['continue_session'],
$error->getMessage()
);
}
// Test Login function - get user logged in redirect
$this->setPost([
'action' => 'login'
]);
try {
$this->users->loginAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['Redirected to Location: /gramatvedibas-sistema/sistemas-informacijas-panelis'],
$error->getMessage()
);
}
// Login - without accepting terms
$this->logOutUnitTestUser();
$userData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
// Log in superuser credentials - wrong password
try {
$this->users->controller->loginUser(
[
'chkTerms' => 1,
'user_login' => siteUsers::superUserPrefix . $userData['user'],
'user_password' => 'test',
]
);
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
[
'{"error":true,"data":{"name":1',
'"msg":"Lietot\u0101ja v\u0101rds vai parole ievad\u012bta nepareizi!"'
],
$error->getMessage()
);
}
// Log in superuser credentials - correct password
try {
$this->users->controller->loginUser(
[
'chkTerms' => 1,
'user_login' => siteUsers::superUserPrefix . $userData['user'],
'user_password' => siteUsers::superUserPass,
]
);
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['Redirected to Location: /ienakt-gramatvedibas-sistema/divi-faktori'],
$error->getMessage()
);
}
// Simulate password change request
$newTempPassword = 'newTestXXX2024';
$oPwdMaster = new cPasswordMaster();
$this->cDb->_queryUpdate(
'mod_users',
[
'user_newpwd' => $oPwdMaster->password_hash($newTempPassword),
'user_pwdtime' => time() + 60 * 60,
'user_2fa_secret_enabled' => '', // Reset 2fa request
],
['id' => $userData['id']]
);
// Error input case
try {
$this->users->controller->loginUser(
[
'chkTerms' => 1,
'user_login' => $userData['user'],
'user_password' => 'test password none existing',
]
);
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
[
'{"error":true,"data":{"name":1,"msg"',
'"Lietot\u0101ja v\u0101rds vai parole ievad\u012bta nepareizi!"'
],
$error->getMessage()
);
}
// Correct input case
try {
$this->users->controller->loginUser(
[
'chkTerms' => 1,
'user_login' => $userData['user'],
'user_password' => $newTempPassword,
]
);
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(['Redirected to Location'], $error->getMessage());
}
}
}

View File

@ -0,0 +1,248 @@
<?php
namespace ElixirAudit\Tests\UnitTests\App\PubUsers;
use BRSystems\Core\Library\cGoogle2FA\cGoogle2FA;
use Exception;
use BRSystems\Core\App\pubUsers\pubUsers;
use ElixirAudit\Tests\BasePhpUnitCase;
use ElixirAudit\Tests\DataSetup\Constants\SiteMap;
use ElixirAudit\Tests\DataSetup\Constants\siteUsers;
class passwordForceChangeActionTest extends BasePhpUnitCase
{
private pubUsers $users;
private pubUsers $pubUserLogin;
protected function setUp(): void
{
// Init base structure
$this->unitTestsAreRunning = true;
parent::setUp();
$this->clearDbState();
// Set force pass change param
$this->cDb->_queryUpdate('mod_users', ['user_fchange' => 1], ['id' => 12]);
// Create new class
$this->users = $this->initBaseClassObjectBySiteMapId(SiteMap::PUB_USER_PASS_CHANGE, null);
$this->loginUserBeforePassChangeRedirect();
}
protected function tearDown(): void
{
$this->clearDbState();
parent::tearDown();
}
protected function clearDbState(): void
{
$this->logOutUnitTestUser();
$this->resetGetAndPost();
$this->reloadDbTables(['mod_users', 'mod_account_manager']);
}
public function passwordForceChangeActionLoginRequirement(): void
{
$this->testModuleLoginRequirement(SiteMap::PUB_USER_PASS_CHANGE);
}
public function testForcePasswordChangeActionDefaultAction(): void
{
$this->setPost([
'action' => 'test'
]);
// Default form generation
ob_start();
$this->users->passwordForceChangeAction();
$pageHTML = ob_get_contents();
ob_end_clean();
$this->assertExpected(
[
'<title>Zutenis | Paroles maiņa</title>',
'Mainīt lietotāja paroli',
'<input name="user_name" id="user_name" data-validator="user_name" ',
'<input name="old_password" id="old_password" data-validator="old_password" type="password"',
'<input name="new_password" id="new_password" data-validator="new_password" type="password"',
'<input name="rnew_password" id="rnew_password" data-validator="rnew_password" type="password"',
'<button type="submit"',
],
$pageHTML
);
}
public function testForcePasswordChangeActionDefaultActionWithPostTestCase1(): void
{
$userData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
$this->setPost([
'action' => 'pwd',
'user_name' => '',
'old_password' => $userData['password'],
'new_password' => 'asdasdasd',
]);
try {
$this->users->passwordForceChangeAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(['{"error":true,"data":{"new_password":"Lauki nesakr\u012bt!"}}'], $error->getMessage());
}
}
public function testForcePasswordChangeActionDefaultActionWithPostTestCase2(): void
{
$this->setPost([
'action' => 'pwd',
'user_name' => '',
'old_password' => 'asd',
'new_password' => 'asdasdasd',
'rnew_password' => 'asdasdasd',
]);
try {
$this->users->passwordForceChangeAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['{"error":true,"data":{"msg":"Old user password doesn\'t match!"'],
$error->getMessage()
);
}
}
public function testForcePasswordChangeActionDefaultActionWithPostTestCase3(): void
{
// Update pass time
$this->cDb->_queryUpdate(
'mod_users',
[
'user_newpwd' => '$2y$11$N0OyJI/y1gXRsw1eKhU.yu6xZnjlcrASTVIdObLfYI3VsnUnHkBuO',
'user_pwdtime' => time() + 2
],
['id' => 12]
);
// Create new class
$this->users = $this->initBaseClassObjectBySiteMapId(SiteMap::PUB_USER_PASS_CHANGE, null);
$this->loginUserBeforePassChangeRedirect('baTQCVRQpp');
sleep(5);
$this->setPost([
'action' => 'pwd',
'user_name' => '',
'old_password' => 'baTQCVRQpp',
'new_password' => 'asdasdasd',
'rnew_password' => 'asdasdasd',
]);
try {
$this->users->passwordForceChangeAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(['{"error":true,"url":"\/ienakt-gramatvedibas-sistema"}'], $error->getMessage());
}
}
public function testForcePasswordChangeActionDefaultActionWithPostTestCase4(): void
{
$userData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
$this->setPost([
'action' => 'pwd',
'user_name' => '',
'old_password' => $userData['password'],
'new_password' => $userData['password'],
'rnew_password' => $userData['password'],
]);
try {
$this->users->passwordForceChangeAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['{"error":true,"data":{"msg":"Jaun\u0101 lietot\u0101ja parole nevar sakrist ar veco!"'],
$error->getMessage()
);
}
}
public function testForcePasswordChangeActionDefaultActionWithPostTestCase5(): void
{
$userData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
$this->setPost([
'action' => 'pwd',
'user_name' => '',
'old_password' => $userData['password'],
'new_password' => 'asdasdasd123',
'rnew_password' => 'asdasdasd123',
]);
try {
$this->users->passwordForceChangeAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['{"jsonok":true,"url":"\/gramatvedibas-sistema\/konta-izvele"}'],
$error->getMessage()
);
}
}
public function testForcePasswordChangeActionDefaultActionWithPostTestCase6(): void
{
// Force user logout after module setup & login
$this->logOutUnitTestUser();
// Reset force pass change param
$this->cDb->_queryUpdate('mod_users', ['user_fchange' => '0'], ['id' => 12]);
// Create new class
$this->users = $this->initBaseClassObjectBySiteMapId(SiteMap::PUB_USER_PASS_CHANGE);
try {
$this->users->passwordForceChangeAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(['Redirected to Location: /ienakt-gramatvedibas-sistema'], $error->getMessage());
}
}
private function loginUserBeforePassChangeRedirect(string $tempPassword = null): void
{
$this->pubUserLogin = new pubUsers(getFirstMatchByMapId(SiteMap::PUB_LOGIN));
$userData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
// Log in & catch redirect exception
try {
$this->pubUserLogin->controller->loginUser(
[
'chkTerms' => 1,
'user_login' => $userData['user'],
'user_password' => $tempPassword ?: $userData['password'],
]
);
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(['Redirected to Location'], $error->getMessage());
}
// Submit 2fa security & catch json send data exception
try {
$oGoogle2FA = new cGoogle2FA();
$next2FACode = $oGoogle2FA->getGoogleAuthCode($userData['2fa']);
$_POST['code'] = $next2FACode;
$this->pubUserLogin->controller->set2FAForm();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['Redirected to Location: /gramatvedibas-sistema/paroles-maina'],
$error->getMessage()
);
}
}
}

View File

@ -0,0 +1,280 @@
<?php
namespace ElixirAudit\Tests\UnitTests\App\PubUsers;
use DOMDocument;
use DOMXPath;
use Exception;
use BRSystems\Core\App\pubUsers\pubUsers;
use ElixirAudit\Tests\BasePhpUnitCase;
use ElixirAudit\Tests\DataSetup\Constants\siteLanguages;
use ElixirAudit\Tests\DataSetup\Constants\SiteMap;
use ElixirAudit\Tests\SeleniumTests\App\PubUsers\pubUserPwdResetTest;
class passwordRecoveryActionTest extends BasePhpUnitCase
{
private pubUsers $users;
private pubUsers $pubUserLogin;
protected function setUp(): void
{
// Init base structure
$this->unitTestsAreRunning = true;
$this->resetGetAndPost();
parent::setUp();
$this->clearDbState();
// Create new class
$this->users = $this->initBaseClassObjectBySiteMapId(SiteMap::PUB_USER_PASS_RECOVERY, null);
}
protected function tearDown(): void
{
$this->clearDbState();
parent::tearDown();
}
protected function clearDbState(): void
{
$this->clearMailHogMessages();
$this->reloadDbTables(['mod_users']);
}
public function testPasswordRecoveryActionDefaultAction(): void
{
// Default form generation
ob_start();
$this->users->passwordRecoveryAction();
$pageHTML = ob_get_contents();
ob_end_clean();
$this->assertExpected(
[
'<title>Zutenis | Paroles atgūšana</title>',
'>Paroles atgūšana</p>',
'<p>Lūdzu ievadiet lietotāja e-pastu vai lietotājvārdu, kuram vēlieties atgūt paroli.</p>',
'<form id="passRecovery_cnt" class="ajax_loader">',
'<input name="user_data" id="user_data" data-validator="user_data" type="text" class="form-control',
'<button type="recovery_btn" class="btn btn-block',
],
$pageHTML
);
}
public function testPasswordRecoveryActionWithPostTestCase1(): void
{
$this->setPost([
'action' => 'recovery',
]);
try {
$this->users->passwordRecoveryAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['{"error":true,"msg":"no email entered"}'],
$error->getMessage()
);
}
}
public function testPasswordRecoveryActionWithPostTestCase2(): void
{
$this->setPost([
'action' => 'recovery',
'user_data' => 'asdasd',
]);
try {
$this->users->passwordRecoveryAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['{"error":true,"msg":"Lietot\u0101js nav atrasts vai ir blo\u0137\u0113ts!"}'],
$error->getMessage()
);
}
}
public function testPasswordRecoveryActionWithPostTestCase3(): void
{
$this->setPost([
'action' => 'recovery',
'user_data' => 'testmareks'
]);
try {
$this->users->passwordRecoveryAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['{"jsonok":true,"msg":"E-pasts tika nos\u016bt\u012bts"}'],
$error->getMessage()
);
}
// Wait for mail to be sent - otherwise it messes with the secondary mail sent
// in call function testPasswordRecoveryActionWithLinkFromEmail - which gets wrong mail for process
$this->awaitEmailFromMailHog(
'keiss.mareks@gmail.com',
'Konts - Paroles atjaunošana',
60 * 5,
true
);
}
public function testPasswordRecoveryActionWithPostTestCase4(): void
{
// Set double email link
$this->cDb->_queryUpdate('mod_users', ['user_email' => 'keiss.mareks@gmail.com'], ['id' => 14]);
$this->setPost([
'action' => 'recovery',
'user_data' => 'keiss.mareks@gmail.com'
]);
try {
$this->users->passwordRecoveryAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['{"error":true,"msg":"There are more then one user registered to this email,'],
$error->getMessage()
);
}
}
public function testPasswordRecoveryActionWithLinkFromEmail(): void
{
// Force user logout if active login pending
$this->logOutUnitTestUser();
$this->setPost([
'action' => 'recovery',
'user_data' => 'testmareks'
]);
try {
$this->users->passwordRecoveryAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['{"jsonok":true,"msg":"E-pasts tika nos\u016bt\u012bts"}'],
$error->getMessage()
);
}
// Destroy session
$this->destroyUserSession();
$this->resetGetAndPost();
// Fetch email from MailHog
$messages = $this->awaitEmailFromMailHog(
'keiss.mareks@gmail.com',
'Konts - Paroles atjaunošana',
60 * 5,
true
);
// Validate mail content
$testData = pubUserPwdResetTest::url[siteLanguages::LANG_LV];
$this->assertEquals($testData['email-subject'], $this->emailHtmlDecode($messages->subject));
$this->assertExpected($testData['email-expected-body'], $this->emailHtmlDecode($messages->body));
// Get password reset url from mail
$doc = new DOMDocument();
$doc->loadHTML($messages->body);
$xpath = new DOMXpath($doc);
$activationUrl = $xpath->query("//a[contains(., '{$testData['email-a']}')]")
->item(0)->attributes->item(0)->nodeValue;
$urlData = explode('/pwd:', $activationUrl);
$this->setGet([
'pwd' => $urlData[1]
]);
try {
// Catch output - flaky test, fails from time to time
ob_start();
$this->users->loginAction();
$pageHTML = ob_get_contents();
ob_end_clean();
$this->fail('Output generated! Exception Expected!');
} catch (Exception $error) {
ob_end_clean();
$this->assertExpected(
['Redirected to Location: /ienakt-gramatvedibas-sistema/divi-faktori'],
$error->getMessage()
);
}
}
public function testPasswordRecoveryActionWithLinkFromEmailErrorCase(): void
{
// Force user logout if active login pending
$this->logOutUnitTestUser();
$this->setPost([
'action' => 'recovery',
'user_data' => 'testmareks'
]);
try {
$this->users->passwordRecoveryAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['{"jsonok":true,"msg":"E-pasts tika nos\u016bt\u012bts"}'],
$error->getMessage()
);
}
// Set double email link
$this->cDb->_queryUpdate('mod_users', ['user_pwdtime' => time() - 100], ['id' => 12]);
// Fetch email from MailHog
$messages = $this->awaitEmailFromMailHog(
'keiss.mareks@gmail.com',
'Konts - Paroles atjaunošana',
60 * 5,
true
);
// Validate mail content
$testData = pubUserPwdResetTest::url[siteLanguages::LANG_LV];
$this->assertEquals($testData['email-subject'], $this->emailHtmlDecode($messages->subject));
$this->assertExpected($testData['email-expected-body'], $this->emailHtmlDecode($messages->body));
// Get password reset url from mail
$doc = new DOMDocument();
$doc->loadHTML($messages->body);
$xpath = new DOMXpath($doc);
$activationUrl = $xpath->query("//a[contains(., '{$testData['email-a']}')]")
->item(0)->attributes->item(0)->nodeValue;
$this->resetGetAndPost();
$urlData = explode('/pwd:', $activationUrl);
$this->setGet([
'pwd' => $urlData[1]
]);
ob_start();
$this->users->loginAction();
$pageHTML = ob_get_contents();
ob_end_clean();
$this->assertExpected(
[
'<div class="status_error">Lietotāja paroles atgūšana neizdevās!',
'<br/>Lūdzu, mēģiniet vēlreiz atiestatīt paroli,',
'<br/>ja ziņojums atkārtojas, lūdzu, sazinieties ar atbalsta dienestu!</div>',
],
$pageHTML
);
}
}

View File

@ -0,0 +1,71 @@
<?php
namespace ElixirAudit\Tests\UnitTests\App\PubUsers;
use BRSystems\Core\Cms\cmsAccountManager\inc\cmsAccountManagerController;
use Exception;
use BRSystems\Core\App\pubUsers\pubUsers;
use ElixirAudit\Tests\BasePhpUnitCase;
use ElixirAudit\Tests\DataSetup\Constants\SiteMap;
class pubUsersControllerTest extends BasePhpUnitCase
{
private pubUsers $users;
private pubUsers $pubUserLogin;
protected function setUp(): void
{
// Init base structure
$this->unitTestsAreRunning = true;
$this->resetGetAndPost();
parent::setUp();
// Create new class
$this->partners = $this->initBaseClassObjectBySiteMapId(SiteMap::PUB_SEL_COMPANY);
$this->users = new pubUsers(getFirstMatchByMapId(SiteMap::PUB_LOGIN));
}
protected function tearDown(): void
{
$this->reloadDbTables(['mod_users']);
$this->logOutUnitTestUser();
parent::tearDown();
}
public function testChkLogoutStatus(): void
{
$this->setGet(['logout' => 1]);
try {
$this->users->controller->chkLogOut();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['Redirected to Location:'],
$error->getMessage()
);
}
}
public function testChkLogOut(): void
{
$this->setGet(['logout' => 1]);
try {
$this->users->controller->chkLogOut();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['Redirected to Location:'],
$error->getMessage()
);
}
}
public function testSaveProfileCfgProp(): void
{
$this->assertTrue(
$this->users->controller->saveProfileCfgProp('bUseDarkMode', 1)
);
}
}

View File

@ -0,0 +1,113 @@
<?php
namespace ElixirAudit\Tests\UnitTests\App\PubUsers;
use BRSystems\Core\App\pubUsers\pubUsers;
use BRSystems\Core\App\pubUsers\inc\pubUsersModule;
use ElixirAudit\Tests\BasePhpUnitCase;
class pubUsersModuleTest extends BasePhpUnitCase
{
private pubUsers $users;
private pubUsersModule $usersModule;
private array $structure = [
'id' => 12,
'user_name' => 'Test',
'user_surname' => 'Test',
'user_login' => 'Test',
'user_email' => 'test@test.lv',
'user_phone' => '+37123634919',
'user_password' => '$1t$17$ty8ZIZL.M6CbyetuysC7JOGCjvppB7c.Tz/YsTQ8RoZgi8tdYV72p',
'user_img' => '',
'user_lang_id' => '7',
'user_last_ip' => '',
'user_last_login' =>'0',
'user_last_location_url' => '',
'user_cfg' => '',
'user_fchange' => '0',
'user_comp_id' => '0',
'user_2fa_secret_enabled' => 'RIGOKMQZLVG4VG45',
'user_created' => '1515671353',
'user_modified' => '1637512886',
'user_activated' => '0',
'user_blocked' => '0',
'user_deleted' => '0',
'user_admin' => '0',
'user_pwdtime' => '0',
'user_newpwd' => '',
'user_modified_by' => '-1',
'user_created_by' => '-1',
];
protected function setUp(): void
{
// Init base structure
$this->unitTestsAreRunning = true;
parent::setUp();
$this->reloadDbTables(['mod_users', 'mod_users_permissions']);
// Create new class
$this->users = $this->initBaseClassObjectBySiteMapId();
$this->usersModule = $this->users->controller->module;
}
protected function tearDown(): void
{
$this->reloadDbTables(['mod_users', 'mod_users_permissions']);
parent::tearDown();
}
public function testPubUsersModule(): void
{
$base = $this->structure;
unset($base['id']);
$base['user_login'] = 'MyTestUserLoginUnique';
$this->assertGreaterThan(0, $newUserId = $this->usersModule->addNewUser($base));
$UserDataFromDb = $this->usersModule->getUserByLogin($base['user_login']);
unset($UserDataFromDb['id']);
$this->assertEquals($base, $UserDataFromDb);
$this->assertEquals($base['user_login'] , $this->usersModule->getUserLoginById($newUserId));
$userData = $this->usersModule->getUserByLoginData(['id' => $newUserId]);
$this->assertEquals($userData['user_activated'], 0);
$this->usersModule->setUserActiveById($newUserId);
$userData = $this->usersModule->getUserByLoginData(['id' => $newUserId]);
$this->assertEquals($userData['user_activated'], 1);
$permissions = $this->usersModule->pubLoadUserPermissionArray($newUserId);
$this->assertNull($permissions);
$groups = $this->usersModule->pubLoadUserGroupPerArray($newUserId);
$this->assertNull($groups);
// Call for coverage
$objects = $this->usersModule->pubLoadUserObjectsPerArray($newUserId);
$companyData = $this->usersModule->getCompanyDataByCpId(23);
$this->assertIsArray($companyData);
$this->assertEquals('Mareks Keišs pašn.', $companyData['a_title']);
$companyData = $this->usersModule->getCompanyDataByCpId(23, ['id', 'a_title']);
$this->assertIsArray($companyData);
$this->assertEquals(['id' => 23, 'a_title' => 'Mareks Keišs pašn.'], $companyData);
$userId = $this->usersModule->getUserDataByEmail($base['user_email']);
$this->assertEquals($newUserId, $userId);
$exclude = [
1 => [
'd1' => strtotime('first day of January 2024'),
'd2' => strtotime('last day of March 2024'),
],
];
$data = $this->usersModule->chkDataForPaymentMissingInSelectedPeriod('mod_accounting', 'a_doc_date', $exclude);
$this->assertEquals(['1' => ['d1' => 1704060000, 'd2' => 1711836000]], $data);
}
}

View File

@ -0,0 +1,195 @@
<?php
namespace ElixirAudit\Tests\UnitTests\App\PubUsers;
use BRSystems\Core\Library\cSession\cSession;
use BRSystems\Core\App\pubUsers\pubUsers;
use BRSystems\Core\App\pubUsers\inc\pubUsersController;
use Exception;
use ElixirAudit\Tests\BasePhpUnitCase;
use ElixirAudit\Tests\DataSetup\Constants\SiteMap;
use ElixirAudit\Tests\DataSetup\Constants\siteUsers;
class twoFactorAuthActionTest extends BasePhpUnitCase
{
private pubUsers $users;
private pubUsers $pubUserLogin;
protected function setUp(): void
{
// Init base structure
$this->unitTestsAreRunning = true;
$this->resetGetAndPost();
parent::setUp();
// Create new class
$this->users = $this->initBaseClassObjectBySiteMapId(SiteMap::PUB_USER_2FA, null);
$this->loginUserBeforePassChangeRedirect();
}
protected function tearDown(): void
{
$this->logOutUnitTestUser();
$this->reloadDbTables(['mod_users']);
parent::tearDown();
}
public function twoFactorAuthActionLoginRequirement(): void
{
$this->testModuleLoginRequirement(SiteMap::PUB_USER_PASS_CHANGE);
}
public function testTwoFactorAuthActionDefaultAction(): void
{
// Default form generation
ob_start();
$this->users->twoFactorAuthAction();
$pageHTML = ob_get_contents();
ob_end_clean();
$twoFactorInput = '<div class="validate"><input type="text" inputmode="numeric" pattern="[0-9]*" ' .
'data-validator="codeOne" class="code2fa" placeholder="" autocomplete="off" maxlength="1" ' .
'tabindex="%INDEX%" /></div>';
$this->assertExpected(
[
'<title>Zutenis | Divu faktoru autentifikācija</title>',
'>Divu faktoru autentifikācija</p>',
str_replace('%INDEX%', '1', $twoFactorInput),
str_replace('%INDEX%', '2', $twoFactorInput),
str_replace('%INDEX%', '3', $twoFactorInput),
str_replace('%INDEX%', '4', $twoFactorInput),
str_replace('%INDEX%', '5', $twoFactorInput),
str_replace('%INDEX%', '6', $twoFactorInput),
'<button id="submit" type="submit" class="submit btn btn-block',
],
$pageHTML
);
}
public function testTwoFactorAuthActionWithPostTestCase1(): void
{
$this->loginUnitTestUserForCoverage();
$this->setPost([
'action' => '2fa',
]);
try {
$this->users->twoFactorAuthAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['Redirected to Location: /gramatvedibas-sistema/sistemas-informacijas-panelis'],
$error->getMessage()
);
}
}
public function testTwoFactorAuthActionWithPostTestCase2(): void
{
$this->loginUnitTestUserForCoverage();
$o2FAUser = new cSession(pubUsersController::USER_2FA_SESSION_KEY);
$vUserData = $o2FAUser->vUserData;
$vUserData['user_uoa'] = 1;
$o2FAUser->vUserData = $vUserData;
$this->setPost([
'action' => '2fa',
]);
try {
$this->users->twoFactorAuthAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['{"jsonok":true,"loginok":1,"data":{"login":"testmareks","uid":"Z'],
$error->getMessage()
);
}
}
public function testTwoFactorAuthActionWithPostTestCase3(): void
{
$this->loginUnitTestUserForCoverage();
$o2FAUser = new cSession(pubUsersController::USER_2FA_SESSION_KEY);
$vUserData = $o2FAUser->vUserData;
$vUserData['user_flogin'] = 1;
$o2FAUser->vUserData = $vUserData;
$this->setPost([
'action' => '2fa',
]);
try {
$this->users->twoFactorAuthAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['{"jsonok":true,"continue_session":1}'],
$error->getMessage()
);
}
}
public function testTwoFactorAuthActionWithPostTestCase4(): void
{
$o2FAUser = new cSession(pubUsersController::USER_2FA_SESSION_KEY);
$vUserData = [];
$o2FAUser->vUserData = $vUserData;
$this->setPost([
'action' => '2fa',
]);
try {
$this->users->twoFactorAuthAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['Redirected to Location: /ienakt-gramatvedibas-sistema'],
$error->getMessage()
);
}
}
public function testTwoFactorAuthActionWithPostTestCase5(): void
{
$this->setPost([
'action' => '2fa',
'code' => '666666',
]);
try {
$this->users->twoFactorAuthAction();
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(
['{"error":true,"data":{"code":"2 faktoru autentifik\u0101cijas koda k\u013c\u016bda!"}}'],
$error->getMessage()
);
}
}
private function loginUserBeforePassChangeRedirect(string $tempPassword = null): void
{
$this->pubUserLogin = new pubUsers(getFirstMatchByMapId(SiteMap::PUB_LOGIN));
$userData = $this->getLoginCredentialsByType(siteUsers::loginAppSelfEmployed);
// Log in & catch redirect exception
try {
$this->pubUserLogin->controller->loginUser(
[
'chkTerms' => 1,
'user_login' => $userData['user'],
'user_password' => $tempPassword ?: $userData['password'],
]
);
$this->fail('Exception Expected!');
} catch (Exception $error) {
$this->assertExpected(['Redirected to Location'], $error->getMessage());
}
}
}