Compare commits

..

4 Commits

Author SHA1 Message Date
slawkens
c6ddcf829e Change message 2025-10-12 10:14:43 +02:00
slawkens
cbb88413d9 Nothing important: change variable name 2025-10-12 10:14:35 +02:00
slawkens
2a2512f5d0 Merge branch 'main' into feature/resend-email-verify 2025-10-12 00:15:18 +02:00
slawkens
9a0ec33f6d feat: Resend Email Verify
+ rework the whole concept, based on new table for email hashes
This make it possible that every email will work, not matter if first or last
2025-10-12 00:14:41 +02:00
6 changed files with 430 additions and 460 deletions

View File

@@ -220,8 +220,6 @@ switch ($action) {
} }
} }
/*
* not needed anymore?
if (fieldExist('premdays', 'accounts') && fieldExist('lastday', 'accounts')) { if (fieldExist('premdays', 'accounts') && fieldExist('lastday', 'accounts')) {
$save = false; $save = false;
$timeNow = time(); $timeNow = time();
@@ -258,7 +256,6 @@ switch ($action) {
$account->save(); $account->save();
} }
} }
*/
$worlds = [$world]; $worlds = [$world];
$playdata = compact('worlds', 'characters'); $playdata = compact('worlds', 'characters');

View File

@@ -1640,14 +1640,13 @@ function camelCaseToUnderscore($input)
return ltrim(strtolower(preg_replace('/[A-Z]([A-Z](?![a-z]))*/', '_$0', $input)), '_'); return ltrim(strtolower(preg_replace('/[A-Z]([A-Z](?![a-z]))*/', '_$0', $input)), '_');
} }
function removeIfFirstSlash(&$text): void function removeIfFirstSlash(&$text) {
{
if(strpos($text, '/') === 0) { if(strpos($text, '/') === 0) {
$text = str_replace_first('/', '', $text); $text = str_replace_first('/', '', $text);
} }
}; };
function escapeHtml($html): string { function escapeHtml($html) {
return htmlspecialchars($html); return htmlspecialchars($html);
} }
@@ -1661,7 +1660,7 @@ function getGuildNameById($id)
return false; return false;
} }
function getGuildLogoById($id): string function getGuildLogoById($id)
{ {
$logo = 'default.gif'; $logo = 'default.gif';
@@ -1677,8 +1676,7 @@ function getGuildLogoById($id): string
return BASE_URL . GUILD_IMAGES_DIR . $logo; return BASE_URL . GUILD_IMAGES_DIR . $logo;
} }
function displayErrorBoxWithBackButton($errors, $action = null): void function displayErrorBoxWithBackButton($errors, $action = null) {
{
global $twig; global $twig;
$twig->display('error_box.html.twig', ['errors' => $errors]); $twig->display('error_box.html.twig', ['errors' => $errors]);
$twig->display('account.back_button.html.twig', [ $twig->display('account.back_button.html.twig', [
@@ -1706,12 +1704,6 @@ function getAccountIdentityColumn(): string
return 'id'; return 'id';
} }
function isCanary(): bool
{
$vipSystemEnabled = configLua('vipSystemEnabled');
return isset($vipSystemEnabled);
}
// validator functions // validator functions
require_once SYSTEM . 'compat/base.php'; require_once SYSTEM . 'compat/base.php';

View File

@@ -443,18 +443,12 @@ class OTS_Account extends OTS_Row_DAO implements IteratorAggregate, Countable
throw new E_OTS_NotLoaded(); throw new E_OTS_NotLoaded();
} }
if(isset($this->data['premium_ends_at']) || isset($this->data['premend']) || if(isset($this->data['premium_ends_at']) || isset($this->data['premend'])) {
(isCanary() && isset($this->data['lastday']))) { $col = isset($this->data['premium_ends_at']) ? 'premium_ends_at' : 'premend';
$col = (isset($this->premium_ends_at) ? 'premium_ends_at' : (isset($this->data['lastday']) ? 'lastday' : 'premend'));
$ret = ceil(($this->data[$col] - time()) / (24 * 60 * 60)); $ret = ceil(($this->data[$col] - time()) / (24 * 60 * 60));
return max($ret, 0); return max($ret, 0);
} }
if (isCanary() && isset($this->data['lastday'])) {
$ret = ceil(($this->data['lastday'] - time()) / 86400);
return max($ret, 0);
}
if($this->data['premdays'] == 0) { if($this->data['premdays'] == 0) {
return 0; return 0;
} }

View File

@@ -38,24 +38,15 @@ csrfProtect();
$groups = new OTS_Groups_List(); $groups = new OTS_Groups_List();
$freePremium = isset($config['lua']['freePremium']) && getBoolean($config['lua']['freePremium']) || $account_logged->getPremDays() == OTS_Account::GRATIS_PREMIUM_DAYS;
$dayOrDays = $account_logged->getPremDays() == 1 ? 'day' : 'days';
/** /**
* @var OTS_Account $account_logged * @var OTS_Account $account_logged
*/ */
$premDays = $account_logged->getPremDays(); if(!$account_logged->isPremium())
$freePremium = isset($config['lua']['freePremium']) && getBoolean($config['lua']['freePremium']) || $premDays == OTS_Account::GRATIS_PREMIUM_DAYS;
$dayOrDays = ($premDays == 1 ? 'day' : 'days');
$vipSystemEnabled = isset($config['lua']['vipSystemEnabled']) && getBoolean($config['lua']['vipSystemEnabled']);
$premiumLabel = $vipSystemEnabled ? 'VIP' : 'Premium Account';
if ($freePremium && !$vipSystemEnabled) {
$account_status = '<b><span style="color: green">Gratis Premium Account</span></b>';
} else if(!$account_logged->isPremium()) {
$account_status = '<b><span style="color: red">Free Account</span></b>'; $account_status = '<b><span style="color: red">Free Account</span></b>';
} else { else
$account_status = '<b><span style="color: green">' . $premiumLabel . ', ' . $premDays . ' '.$dayOrDays.' left</span></b>'; $account_status = '<b><span style="color: green">' . ($freePremium ? 'Gratis Premium Account' : 'Premium Account, ' . $account_logged->getPremDays() . ' '.$dayOrDays.' left') . '</span></b>';
}
$recovery_key = $account_logged->getCustomField('key'); $recovery_key = $account_logged->getCustomField('key');
if(empty($recovery_key)) if(empty($recovery_key))

View File

@@ -21,9 +21,6 @@ if(!$logged) {
$errors[] = 'You are not logged in. You can\'t create guild.'; $errors[] = 'You are not logged in. You can\'t create guild.';
} }
$configLuaFreePremium = configLua('freePremium');
$freePremium = (isset($configLuaFreePremium) && getBoolean($configLuaFreePremium)) || ($logged && $account_logged->getPremDays() == OTS_Account::GRATIS_PREMIUM_DAYS);
$array_of_player_nig = array(); $array_of_player_nig = array();
if(empty($errors)) if(empty($errors))
{ {
@@ -34,7 +31,7 @@ if(empty($errors))
if(!$player_rank->isLoaded()) if(!$player_rank->isLoaded())
{ {
if($player->getLevel() >= setting('core.guild_need_level')) { if($player->getLevel() >= setting('core.guild_need_level')) {
if(!setting('core.guild_need_premium') || $account_logged->isPremium() || $freePremium) { if(!setting('core.guild_need_premium') || $account_logged->isPremium()) {
$array_of_player_nig[] = $player->getName(); $array_of_player_nig[] = $player->getName();
} }
} }
@@ -98,7 +95,7 @@ if($todo == 'save')
if($player->getLevel() < setting('core.guild_need_level')) { if($player->getLevel() < setting('core.guild_need_level')) {
$errors[] = 'Character <b>'.$name.'</b> has too low level. To create guild you need character with level <b>' . setting('core.guild_need_level') . '</b>.'; $errors[] = 'Character <b>'.$name.'</b> has too low level. To create guild you need character with level <b>' . setting('core.guild_need_level') . '</b>.';
} }
if(setting('core.guild_need_premium') && !$account_logged->isPremium() && !$freePremium) { if(setting('core.guild_need_premium') && !$account_logged->isPremium()) {
$errors[] = 'Character <b>'.$name.'</b> is on FREE account. To create guild you need PREMIUM account.'; $errors[] = 'Character <b>'.$name.'</b> is on FREE account. To create guild you need PREMIUM account.';
} }
} }

View File

@@ -33,11 +33,10 @@ class Account extends Model {
public function getPremiumDaysAttribute() public function getPremiumDaysAttribute()
{ {
if(isset($this->premium_ends_at) || isset($this->premend) || if(isset($this->premium_ends_at) || isset($this->premend)) {
(isCanary() && isset($this->data['lastday']))) { $col = isset($this->premium_ends_at) ? 'premium_ends_at' : 'premend';
$col = (isset($this->premium_ends_at) ? 'premium_ends_at' : (isset($this->data['lastday']) ? 'lastday' : 'premend'));
$ret = ceil(($this->{$col}- time()) / (24 * 60 * 60)); $ret = ceil(($this->{$col}- time()) / (24 * 60 * 60));
return max($ret, 0); return $ret > 0 ? $ret : 0;
} }
if($this->premdays == 0) { if($this->premdays == 0) {