mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-04-02 01:52:10 +09:00
Merge branch 'rhymix:master' into master
This commit is contained in:
commit
bbd62dbea3
8 changed files with 85 additions and 26 deletions
|
|
@ -380,7 +380,7 @@ class Session
|
||||||
self::$_autologin_key = self::_getAutologinKey();
|
self::$_autologin_key = self::_getAutologinKey();
|
||||||
if (!$member_srl && self::$_autologin_key)
|
if (!$member_srl && self::$_autologin_key)
|
||||||
{
|
{
|
||||||
$member_srl = \MemberController::getInstance()->doAutologin(self::$_autologin_key);
|
$member_srl = \MemberController::doAutoLogin(self::$_autologin_key);
|
||||||
if ($member_srl && self::isValid($member_srl))
|
if ($member_srl && self::isValid($member_srl))
|
||||||
{
|
{
|
||||||
self::login($member_srl, false);
|
self::login($member_srl, false);
|
||||||
|
|
|
||||||
|
|
@ -528,7 +528,7 @@ class Template
|
||||||
*/
|
*/
|
||||||
public function isRelativePath(string $path): bool
|
public function isRelativePath(string $path): bool
|
||||||
{
|
{
|
||||||
return !preg_match('#^((?:https?|file|data):|[\/\{<])#i', $path);
|
return !preg_match('#^((?:https?|file|data):|[\/\{\\\\<$\#@]|&\#x1B;)#i', $path);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -20,17 +20,16 @@ class Notification extends Base
|
||||||
public function dispAdminConfigNotification()
|
public function dispAdminConfigNotification()
|
||||||
{
|
{
|
||||||
// Load advanced mailer module (for lang).
|
// Load advanced mailer module (for lang).
|
||||||
$oAdvancedMailerAdminView = \Advanced_mailerAdminView::getInstance();
|
$oAdvancedMailerController = \Advanced_mailerController::getInstance();
|
||||||
|
|
||||||
// Load advanced mailer config.
|
// Load advanced mailer config.
|
||||||
$advanced_mailer_config = $oAdvancedMailerAdminView->getConfig();
|
$advanced_mailer_config = $oAdvancedMailerController->getConfig();
|
||||||
Context::set('advanced_mailer_config', $advanced_mailer_config);
|
Context::set('advanced_mailer_config', $advanced_mailer_config);
|
||||||
|
|
||||||
// Load member config.
|
// Load member config.
|
||||||
$member_config = ModuleModel::getModuleConfig('member');
|
$default_identity = $oAdvancedMailerController->getDefaultEmailIdentity();
|
||||||
Context::set('member_config', $member_config);
|
Context::set('webmaster_name', $default_identity[1]);
|
||||||
Context::set('webmaster_name', !empty($member_config->webmaster_name) ? $member_config->webmaster_name : 'webmaster');
|
Context::set('webmaster_email', $default_identity[0]);
|
||||||
Context::set('webmaster_email', $member_config->webmaster_email ?? '');
|
|
||||||
|
|
||||||
// Load module config.
|
// Load module config.
|
||||||
$module_config = ModuleModel::getModuleConfig('module');
|
$module_config = ModuleModel::getModuleConfig('module');
|
||||||
|
|
@ -89,7 +88,7 @@ class Notification extends Base
|
||||||
$vars = Context::getRequestVars();
|
$vars = Context::getRequestVars();
|
||||||
|
|
||||||
// Load advanced mailer module (for lang).
|
// Load advanced mailer module (for lang).
|
||||||
$oAdvancedMailerAdminView = \Advanced_mailerAdminView::getInstance();
|
$oAdvancedMailerController = \Advanced_mailerController::getInstance();
|
||||||
|
|
||||||
// Validate the mail sender's information.
|
// Validate the mail sender's information.
|
||||||
if (!$vars->mail_default_name)
|
if (!$vars->mail_default_name)
|
||||||
|
|
|
||||||
|
|
@ -167,7 +167,7 @@ class LayoutModel extends Layout
|
||||||
|
|
||||||
if($layout)
|
if($layout)
|
||||||
{
|
{
|
||||||
if(count($instanceList) < 1 && $downloadedList[$layout])
|
if(count($instanceList) < 1 && isset($downloadedList[$layout]))
|
||||||
{
|
{
|
||||||
$insertArgs = new stdClass();
|
$insertArgs = new stdClass();
|
||||||
$insertArgs->layout_srl = getNextSequence();
|
$insertArgs->layout_srl = getNextSequence();
|
||||||
|
|
@ -383,7 +383,7 @@ class LayoutModel extends Layout
|
||||||
// Get information of the layout
|
// Get information of the layout
|
||||||
$layout_info = self::getLayoutInfo($layout, null, $layout_type);
|
$layout_info = self::getLayoutInfo($layout, null, $layout_type);
|
||||||
|
|
||||||
if(!$layout_info)
|
if (!$layout_info || !self::isExistsLayoutFile($layout, $layout_type))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1837,6 +1837,7 @@ class MemberController extends Member
|
||||||
}
|
}
|
||||||
Context::set('auth_args', $args);
|
Context::set('auth_args', $args);
|
||||||
|
|
||||||
|
// Prepare member information to be included in the email #2594 #2663
|
||||||
$memberInfo = array();
|
$memberInfo = array();
|
||||||
if (in_array('user_id', $member_config->identifiers))
|
if (in_array('user_id', $member_config->identifiers))
|
||||||
{
|
{
|
||||||
|
|
@ -1846,6 +1847,21 @@ class MemberController extends Member
|
||||||
{
|
{
|
||||||
$memberInfo[$lang->email_address] = $member_info->email_address;
|
$memberInfo[$lang->email_address] = $member_info->email_address;
|
||||||
}
|
}
|
||||||
|
if (in_array('phone_number', $member_config->identifiers))
|
||||||
|
{
|
||||||
|
$phone_number = $member_info->phone_number;
|
||||||
|
if($member_config->phone_number_hide_country !== 'Y')
|
||||||
|
{
|
||||||
|
$phone_number = Rhymix\Framework\i18n::formatPhoneNumber($phone_number, $member_info->phone_country);
|
||||||
|
}
|
||||||
|
elseif($member_config->phone_number_default_country === 'KOR' && ($member_info->phone_country === 'KOR' || $member_info->phone_country == '82'))
|
||||||
|
{
|
||||||
|
$phone_number = Rhymix\Framework\Korea::formatPhoneNumber($phone_number);
|
||||||
|
}
|
||||||
|
$memberInfo[$lang->phone_number] = $phone_number;
|
||||||
|
}
|
||||||
|
$memberInfo[$lang->user_name] = $member_info->user_name;
|
||||||
|
$memberInfo[$lang->nick_name] = $member_info->nick_name;
|
||||||
Context::set('memberInfo', $memberInfo);
|
Context::set('memberInfo', $memberInfo);
|
||||||
|
|
||||||
if(!$member_config->skin) $member_config->skin = "default";
|
if(!$member_config->skin) $member_config->skin = "default";
|
||||||
|
|
@ -2383,7 +2399,7 @@ class MemberController extends Member
|
||||||
* @param string $autologin_key
|
* @param string $autologin_key
|
||||||
* @return int|false
|
* @return int|false
|
||||||
*/
|
*/
|
||||||
function doAutologin($autologin_key = null)
|
public static function doAutoLogin($autologin_key = null)
|
||||||
{
|
{
|
||||||
// Validate the key.
|
// Validate the key.
|
||||||
if (strlen($autologin_key) == 48)
|
if (strlen($autologin_key) == 48)
|
||||||
|
|
@ -2426,6 +2442,28 @@ class MemberController extends Member
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get the member info and check it.
|
||||||
|
$member_info = MemberModel::getMemberInfo($output->data->member_srl);
|
||||||
|
if (!$member_info)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!empty($member_info->denied) && $member_info->denied === 'Y')
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!empty($member_info->limit_date) && substr($member_info->limit_date, 0, 8) >= date('Ymd'))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Call a trigger before auto-login.
|
||||||
|
$trigger_output = ModuleHandler::triggerCall('member.doAutoLogin', 'before', $member_info);
|
||||||
|
if (!$trigger_output->toBool())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// If the current security key matches, generate a new key.
|
// If the current security key matches, generate a new key.
|
||||||
// If the previous key matches, don't update until the client has the current key.
|
// If the previous key matches, don't update until the client has the current key.
|
||||||
// Resending the current key in this case will be handled by the Session class.
|
// Resending the current key in this case will be handled by the Session class.
|
||||||
|
|
@ -2458,13 +2496,10 @@ class MemberController extends Member
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the last login time.
|
// Update the last login time.
|
||||||
executeQuery('member.updateLastLogin', (object)['member_srl' => $output->data->member_srl]);
|
self::updateLastLogin($output->data->member_srl);
|
||||||
self::clearMemberCache($output->data->member_srl);
|
|
||||||
|
|
||||||
// Call a trigger after validate security key (after)
|
// Call a trigger after validate security key.
|
||||||
$trigger_obj = new stdClass();
|
ModuleHandler::triggerCall('member.doAutoLogin', 'after', $member_info);
|
||||||
$trigger_obj->member_srl = $output->data->member_srl;
|
|
||||||
ModuleHandler::triggerCall('member.doAutoLogin', 'after', $trigger_obj);
|
|
||||||
|
|
||||||
// Return the member_srl.
|
// Return the member_srl.
|
||||||
return intval($output->data->member_srl);
|
return intval($output->data->member_srl);
|
||||||
|
|
@ -2636,11 +2671,6 @@ class MemberController extends Member
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the latest login time
|
|
||||||
$args->member_srl = $member_info->member_srl;
|
|
||||||
$output = executeQuery('member.updateLastLogin', $args);
|
|
||||||
self::clearMemberCache($args->member_srl);
|
|
||||||
|
|
||||||
// Check if there is recoding table.
|
// Check if there is recoding table.
|
||||||
$oDB = DB::getInstance();
|
$oDB = DB::getInstance();
|
||||||
if($oDB->isTableExists('member_count_history') && $config->enable_login_fail_report != 'N')
|
if($oDB->isTableExists('member_count_history') && $config->enable_login_fail_report != 'N')
|
||||||
|
|
@ -2698,6 +2728,7 @@ class MemberController extends Member
|
||||||
|
|
||||||
// Log in!
|
// Log in!
|
||||||
Rhymix\Framework\Session::login($member_info->member_srl);
|
Rhymix\Framework\Session::login($member_info->member_srl);
|
||||||
|
self::updateLastLogin($member_info->member_srl);
|
||||||
$this->setSessionInfo();
|
$this->setSessionInfo();
|
||||||
|
|
||||||
// Log out all other sessions if so configured.
|
// Log out all other sessions if so configured.
|
||||||
|
|
@ -2712,10 +2743,23 @@ class MemberController extends Member
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the last login timestamp of a member.
|
||||||
|
*
|
||||||
|
* @param int $member_srl
|
||||||
|
* @return object
|
||||||
|
*/
|
||||||
|
public static function updateLastLogin(int $member_srl)
|
||||||
|
{
|
||||||
|
$output = executeQuery('member.updateLastLogin', ['member_srl' => $member_srl]);
|
||||||
|
self::clearMemberCache($member_srl);
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update or create session information
|
* Update or create session information
|
||||||
*/
|
*/
|
||||||
function setSessionInfo()
|
public function setSessionInfo()
|
||||||
{
|
{
|
||||||
// If your information came through the current session information to extract information from the users
|
// If your information came through the current session information to extract information from the users
|
||||||
$member_info = Rhymix\Framework\Session::getMemberInfo(true);
|
$member_info = Rhymix\Framework\Session::getMemberInfo(true);
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,13 @@
|
||||||
<hr noshade="noshade" />
|
<hr noshade="noshade" />
|
||||||
<ul>
|
<ul>
|
||||||
<li>{$lang->site} : <a href="{getUrl()}" target="_blank">{getUrl()}</a></li>
|
<li>{$lang->site} : <a href="{getUrl()}" target="_blank">{getUrl()}</a></li>
|
||||||
<li loop="$memberInfo=>$name,$value" cond="!is_object($value)&&!is_array($value)">{$name} : {$value}</li>
|
<!--@if($memberInfo[$lang->user_id])-->
|
||||||
|
<li>{$lang->user_id} : {$memberInfo[$lang->user_id]}</li>
|
||||||
|
<!--@elseif($memberInfo[$lang->email_address])-->
|
||||||
|
<li>{$lang->email_address} : {$memberInfo[$lang->email_address]}</li>
|
||||||
|
<!--@elseif($memberInfo[$lang->phone_number])-->
|
||||||
|
<li>{$lang->phone_number} : {$memberInfo[$lang->phone_number]}</li>
|
||||||
|
<!--@end-->
|
||||||
<li>{$lang->password} : <span style="color:red">{$auth_args->new_password}</span></li>
|
<li>{$lang->password} : <span style="color:red">{$auth_args->new_password}</span></li>
|
||||||
</ul>
|
</ul>
|
||||||
<hr noshade="noshade" />
|
<hr noshade="noshade" />
|
||||||
|
|
|
||||||
|
|
@ -1012,7 +1012,7 @@ class ModuleModel extends Module
|
||||||
$skin_list[$skin_name] = $skin_info;
|
$skin_list[$skin_name] = $skin_info;
|
||||||
}
|
}
|
||||||
|
|
||||||
$tmpPath = strtr($path, array('/' => ' '));
|
$tmpPath = strtr($path, array('/' => ' ', '\\' => ' '));
|
||||||
$tmpPath = trim($tmpPath);
|
$tmpPath = trim($tmpPath);
|
||||||
$module = array_last(explode(' ', $tmpPath));
|
$module = array_last(explode(' ', $tmpPath));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -676,6 +676,16 @@ class TemplateParserV2Test extends \Codeception\Test\Unit
|
||||||
$source = '<p class="url(foo.svg)" style="url(../foo.jpg)"> url(img/foo.jpg); } </p>';
|
$source = '<p class="url(foo.svg)" style="url(../foo.jpg)"> url(img/foo.jpg); } </p>';
|
||||||
$target = '<p class="url(foo.svg)" style="url(' . $this->baseurl . 'tests/_data/foo.jpg)"> url(img/foo.jpg); } </p>';
|
$target = '<p class="url(foo.svg)" style="url(' . $this->baseurl . 'tests/_data/foo.jpg)"> url(img/foo.jpg); } </p>';
|
||||||
$this->assertEquals($target, $this->_parse($source));
|
$this->assertEquals($target, $this->_parse($source));
|
||||||
|
|
||||||
|
// No conversion if it's a template variable
|
||||||
|
$source = '<img src="{ get_image_path(\'foo/bar.jpg\') }" />';
|
||||||
|
$target = '<img src="{ get_image_path(\'foo/bar.jpg\') }" />';
|
||||||
|
$this->assertEquals($target, $this->_parse($source));
|
||||||
|
|
||||||
|
// No conversion if it's a JS template variable
|
||||||
|
$source = '@verbatim let src = `<source src="${foo.url}" />` @endverbatim';
|
||||||
|
$target = ' let src = `<source src="${foo.url}" />` ';
|
||||||
|
$this->assertEquals($target, $this->_parse($source));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testBlockConditions()
|
public function testBlockConditions()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue