Skip to content

Commit d895e9a

Browse files
committed
Merge pull request #2075 from MPOS/development
UPDATE : Development to Master - RC1
2 parents d0c40ba + 5907f34 commit d895e9a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+1369
-783
lines changed

cronjobs/payouts.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@
4646

4747
// Fetch unconfirmed amount from blocks table
4848
empty($config['network_confirmations']) ? $confirmations = 120 : $confirmations = $config['network_confirmations'];
49+
$aBlocksUnconfirmed = $block->getAllUnconfirmed($confirmations);
50+
$dBlocksUnconfirmedBalance = 0;
51+
if (!empty($aBlocksUnconfirmed))foreach ($aBlocksUnconfirmed as $aData) $dBlocksUnconfirmedBalance += $aData['amount'];
4952
if ($config['getbalancewithunconfirmed']) {
50-
$aBlocksUnconfirmed = $block->getAllUnconfirmed($confirmations);
51-
$dBlocksUnconfirmedBalance = 0;
52-
if (!empty($aBlocksUnconfirmed))foreach ($aBlocksUnconfirmed as $aData) $dBlocksUnconfirmedBalance += $aData['amount'];
5353
$dWalletBalance -= $dBlocksUnconfirmedBalance;
5454
}
5555
// Fetch Newmint
@@ -133,10 +133,10 @@
133133

134134
// Fetch unconfirmed amount from blocks table
135135
empty($config['network_confirmations']) ? $confirmations = 120 : $confirmations = $config['network_confirmations'];
136+
$aBlocksUnconfirmed = $block->getAllUnconfirmed($confirmations);
137+
$dBlocksUnconfirmedBalance = 0;
138+
if (!empty($aBlocksUnconfirmed))foreach ($aBlocksUnconfirmed as $aData) $dBlocksUnconfirmedBalance += $aData['amount'];
136139
if ($config['getbalancewithunconfirmed']) {
137-
$aBlocksUnconfirmed = $block->getAllUnconfirmed($confirmations);
138-
$dBlocksUnconfirmedBalance = 0;
139-
if (!empty($aBlocksUnconfirmed))foreach ($aBlocksUnconfirmed as $aData) $dBlocksUnconfirmedBalance += $aData['amount'];
140140
$dWalletBalance -= $dBlocksUnconfirmedBalance;
141141
}
142142
// Fetch Newmint

public/include/classes/coins/coin_base.class.php

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,22 @@ public function calcEstaimtedShares($dDifficulty) {
4747
* Calculate our networks expected time per block
4848
**/
4949
public function calcNetworkExpectedTimePerBlock($dDifficulty, $dNetworkHashrate) {
50-
return pow(2, 32) * $dDifficulty / $dNetworkHashrate;
50+
if ($dNetworkHashrate > 0) {
51+
return pow(2, 32) * $dDifficulty / $dNetworkHashrate;
52+
} else {
53+
return 0;
54+
}
5155
}
5256
/**
5357
* Calculate next expected difficulty based on current difficulty
5458
**/
5559
public function calcExpectedNextDifficulty($dDifficulty, $dNetworkHashrate) {
56-
return round($dDifficulty * $this->config['cointarget'] / $this->calcNetworkExpectedTimePerBlock($dDifficulty, $dNetworkHashrate), 8);
60+
$iExpectedTimePerBlock = $this->calcNetworkExpectedTimePerBlock($dDifficulty, $dNetworkHashrate);
61+
if (!empty($iExpectedTimePerBlock) && $iExpectedTimePerBlock > 0) {
62+
return round($dDifficulty * $this->config['cointarget'] / $iExpectedTimePerBlock, 8);
63+
} else {
64+
return 0;
65+
}
5766
}
5867
}
5968

public/include/classes/mail.class.php

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public function contactform($senderName, $senderEmail, $senderSubject, $senderMe
3434
$aData['senderEmail'] = $senderEmail;
3535
$aData['senderSubject'] = $senderSubject;
3636
$aData['senderMessage'] = $senderMessage;
37-
$aData['email'] = $this->setting->getValue('website_email');
37+
$aData['email'] = $this->setting->getValue('website_email', 'test@example.com');
3838
$aData['subject'] = 'Contact Form';
3939
if ($this->sendMail('contactform/body', $aData)) {
4040
return true;
@@ -52,7 +52,7 @@ public function contactform($senderName, $senderEmail, $senderSubject, $senderMe
5252
* subject : Mail Subject
5353
* email : Destination address
5454
**/
55-
public function sendMail($template, $aData) {
55+
public function sendMail($template, $aData, $throttle=false) {
5656
// Prepare SMTP transport and mailer
5757
$transport_type = $this->config['swiftmailer']['type'];
5858
if ($transport_type == 'sendmail') {
@@ -65,6 +65,14 @@ public function sendMail($template, $aData) {
6565
}
6666
}
6767
$mailer = Swift_Mailer::newInstance($transport);
68+
69+
// Throttle mails to x per minute, used for newsletter for example
70+
if ($this->config['swiftmailer']['type'] == 'smtp' && $throttle) {
71+
$mailer->registerPlugin(new Swift_Plugins_ThrottlerPlugin(
72+
$this->config['switfmailer']['smtp']['throttle'], Swift_Plugins_ThrottlerPlugin::MESSAGES_PER_MINUTE
73+
));
74+
}
75+
6876
// Prepare the smarty templates used
6977
$this->smarty->clearCache(BASEPATH . 'templates/mail/' . $template . '.tpl');
7078
$this->smarty->clearCache(BASEPATH . 'templates/mail/subject.tpl');
@@ -73,14 +81,20 @@ public function sendMail($template, $aData) {
7381
$this->smarty->assign('DATA', $aData);
7482

7583
// Create new message for Swiftmailer
84+
$senderEmail = $this->setting->getValue('website_email', 'test@example.com');
85+
$senderName = $this->setting->getValue('website_name', 'test@example.com');
7686
$message = Swift_Message::newInstance()
7787
->setSubject($this->smarty->fetch(BASEPATH . 'templates/mail/subject.tpl'))
78-
->setFrom(array( $this->setting->getValue('website_email') => $this->setting->getValue('website_name')))
88+
->setFrom(array( $senderEmail => $senderName))
7989
->setTo($aData['email'])
80-
->setSender($this->setting->getValue('website_email'))
81-
->setReturnPath($this->setting->getValue('website_email'))
90+
->setSender($senderEmail)
91+
->setReturnPath($senderEmail)
8292
->setBody($this->smarty->fetch(BASEPATH . 'templates/mail/' . $template . '.tpl'), 'text/html');
83-
if (strlen(@$aData['senderName']) > 0 && @strlen($aData['senderEmail']) > 0 )
93+
if (isset($aData['senderName']) &&
94+
isset($aData['senderEmail']) &&
95+
strlen($aData['senderName']) > 0 &&
96+
strlen($aData['senderEmail']) > 0 &&
97+
filter_var($aData['senderEmail'], FILTER_VALIDATE_EMAIL))
8498
$message->setReplyTo(array($aData['senderEmail'] => $aData['senderName']));
8599

86100
// Send message out with configured transport

public/include/classes/notification.class.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,26 @@ public function getNotifications($account_id,$limit=50) {
7272
* @return array Notification settings
7373
**/
7474
public function getNotificationSettings($account_id) {
75+
// Some defaults, we cover them here so we can avoid adding default settings on user creation
76+
$aDefaults = array( 'newsletter' => 1 );
7577
$this->debug->append("STA " . __METHOD__, 4);
7678
$stmt = $this->mysqli->prepare("SELECT * FROM $this->tableSettings WHERE account_id = ?");
7779
if ($stmt && $stmt->bind_param('i', $account_id) && $stmt->execute() && $result = $stmt->get_result()) {
7880
if ($result->num_rows > 0) {
81+
$aFound = array();
7982
while ($row = $result->fetch_assoc()) {
83+
if (array_key_exists($row['type'], $aDefaults)) $aFound[] = $row['type'];
8084
$aData[$row['type']] = $row['active'];
8185
}
86+
// Check found types against our defaults, set if required
87+
foreach ($aDefaults as $type => $value) {
88+
if (!in_array($type, $aFound)) {
89+
$aData[$type] = $value;
90+
}
91+
}
92+
return $aData;
93+
} else {
94+
foreach ($aDefaults as $type => $value) $aData[$type] = $value;
8295
return $aData;
8396
}
8497
}

public/include/classes/transaction.class.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,8 @@ public function getTransactionTypebyTime($account_id=NULL) {
150150
IFNULL(SUM(IF(t.type = 'TXFee' AND timestamp >= DATE_SUB(now(), INTERVAL 31536000 SECOND), t.amount, 0)), 0) AS 1YearTXFee,
151151
IFNULL(SUM(IF(t.type = 'Fee' AND timestamp >= DATE_SUB(now(), INTERVAL 31536000 SECOND), t.amount, 0)), 0) AS 1YearFee,
152152
IFNULL(SUM(IF(t.type = 'Donation' AND timestamp >= DATE_SUB(now(), INTERVAL 31536000 SECOND), t.amount, 0)), 0) AS 1YearDonation
153-
FROM transactions AS t
154-
LEFT OUTER JOIN blocks AS b ON b.id = t.block_id
153+
FROM $this->table AS t
154+
LEFT OUTER JOIN " . $this->block->getTableName() . " AS b ON b.id = t.block_id
155155
WHERE
156156
t.account_id = ? AND (b.confirmations > 0 OR b.id IS NULL)");
157157
if ($this->checkStmt($stmt) && $stmt->bind_param("i", $account_id) && $stmt->execute() && $result = $stmt->get_result())

public/include/classes/user.class.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,11 @@ public function checkLogin($username, $password) {
192192
return false;
193193
}
194194
if ($this->checkUserPassword($username, $password)) {
195+
// delete notification cookies
196+
setcookie("motd-box", "", time()-3600);
197+
setcookie("lastlogin-box", "", time()-3600);
198+
setcookie("backend-box", "", time()-3600);
199+
// rest of login process
195200
$uid = $this->getUserId($username);
196201
$lastLoginTime = $this->getLastLogin($uid);
197202
$this->updateLoginTimestamp($uid);

public/include/config/admin_settings.inc.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,20 @@
272272
'name' => 'acl_chat_page', 'value' => $setting->getValue('acl_chat_page'),
273273
'tooltip' => 'Make the chat page private (users only) or public.'
274274
);
275+
$aSettings['acl'][] = array(
276+
'display' => 'MOOT Forum Page', 'type' => 'select',
277+
'options' => array( 0 => 'Private', 1 => 'Public', 2 => 'Disabled' ),
278+
'default' => 2,
279+
'name' => 'acl_moot_forum', 'value' => $setting->getValue('acl_moot_forum'),
280+
'tooltip' => 'Make the forum page private (users only) or public.'
281+
);
282+
$aSettings['acl'][] = array(
283+
'display' => 'QRCode', 'type' => 'select',
284+
'options' => array( 0 => 'Enabled', 1 => 'Disabled' ),
285+
'default' => 0,
286+
'name' => 'acl_qrcode', 'value' => $setting->getValue('acl_qrcode'),
287+
'tooltip' => 'Hide or Show the QRCode Page.'
288+
);
275289
$aSettings['system'][] = array(
276290
'display' => 'E-mail address for system error notifications', 'type' => 'text',
277291
'size' => 25,
@@ -370,6 +384,13 @@
370384
'name' => 'system_irc_chat', 'value' => $setting->getValue('system_irc_chat'),
371385
'tooltip' => 'Your IRC support channel name.'
372386
);
387+
$aSettings['system'][] = array(
388+
'display' => 'Moot Forum Channel', 'type' => 'text',
389+
'size' => 25,
390+
'default' => 'lazypoolop',
391+
'name' => 'system_moot_forum', 'value' => $setting->getValue('system_moot_forum'),
392+
'tooltip' => 'Your MOOT support forum name.'
393+
);
373394
$aSettings['recaptcha'][] = array(
374395
'display' => 'Enable re-Captcha', 'type' => 'select',
375396
'options' => array( 0 => 'No', 1 => 'Yes' ),
@@ -447,6 +468,13 @@
447468
'name' => 'notifications_disable_idle_worker', 'value' => $setting->getValue('notifications_disable_idle_worker'),
448469
'tooltip' => 'Enable/Disable IDLE worker notifications globally. Will remove the user option too.'
449470
);
471+
$aSettings['notifications'][] = array(
472+
'display' => 'Disable Pool Newsletter', 'type' => 'select',
473+
'options' => array( 0 => 'No', 1 => 'Yes'),
474+
'default' => 0,
475+
'name' => 'notifications_disable_pool_newsletter', 'value' => $setting->getValue('notifications_disable_pool_newsletter'),
476+
'tooltip' => 'Enable/Disable pool newsletter globally. Will remove the user option too.'
477+
);
450478
$aSettings['pools'][] = array(
451479
'display' => 'Enable Pool Navigation', 'type' => 'select',
452480
'options' => array( 0 => 'No', 1 => 'Yes' ),

public/include/config/global.inc.dist.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
$config['switfmailer']['smtp']['encryption'] = 'tls';
7171
$config['switfmailer']['smtp']['username'] = '';
7272
$config['switfmailer']['smtp']['password'] = '';
73+
$config['switfmailer']['smtp']['throttle'] = 100;
7374

7475
/**
7576
* Getting Started Config
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
$defflip = (!cfip()) ? exit(header('HTTP/1.1 401 Unauthorized')) : 1;
3+
4+
// ACL check
5+
switch($setting->getValue('acl_moot_forum', 2)) {
6+
case '0':
7+
if ($user->isAuthenticated()) {
8+
$smarty->assign('CHATROOM', $setting->getValue('system_moot_forum', 'lazypoolop'));
9+
$smarty->assign("CONTENT", "default.tpl");
10+
}
11+
break;
12+
case '1':
13+
$smarty->assign('CHATROOM', $setting->getValue('system_moot_forum', 'lazypoolop'));
14+
$smarty->assign("CONTENT", "default.tpl");
15+
break;
16+
case '2':
17+
$_SESSION['POPUP'][] = array('CONTENT' => 'Page currently disabled. Please try again later.', 'TYPE' => 'alert alert-danger');
18+
$smarty->assign("CONTENT", "disabled.tpl");
19+
break;
20+
}

public/include/pages/account/edit.inc.php

Lines changed: 51 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -12,52 +12,54 @@
1212

1313
if ($user->isAuthenticated()) {
1414
if ($config['twofactor']['enabled']) {
15-
$popupmsg = 'E-mail confirmations are required for ';
16-
$popuptypes = array();
17-
if ($config['twofactor']['options']['details'] && $oldtoken_ea !== "") {
18-
$popuptypes[] = 'editing your details';
19-
$ea_editable = $user->token->isTokenValid($_SESSION['USERDATA']['id'], $oldtoken_ea, 5);
20-
$ea_sent = $user->token->doesTokenExist('account_edit', $_SESSION['USERDATA']['id']);
21-
}
22-
if ($config['twofactor']['options']['changepw'] && $oldtoken_cp !== "") {
23-
$popuptypes[] = 'changing your password';
24-
$cp_editable = $user->token->isTokenValid($_SESSION['USERDATA']['id'], $oldtoken_cp, 6);
25-
$cp_sent = $user->token->doesTokenExist('change_pw', $_SESSION['USERDATA']['id']);
26-
}
27-
if ($config['twofactor']['options']['withdraw'] && $oldtoken_wf !== "") {
28-
$popuptypes[] = 'withdrawals';
29-
$wf_editable = $user->token->isTokenValid($_SESSION['USERDATA']['id'], $oldtoken_wf, 7);
30-
$wf_sent = $user->token->doesTokenExist('withdraw_funds', $_SESSION['USERDATA']['id']);
31-
}
15+
if ($config['twofactor']['options']['details'] OR $config['twofactor']['options']['changepw'] OR $config['twofactor']['options']['withdraw']) {
16+
$popupmsg = 'E-mail confirmations are required for ';
17+
$popuptypes = array();
18+
if ($config['twofactor']['options']['details'] && $oldtoken_ea !== "") {
19+
$popuptypes[] = 'editing your details';
20+
$ea_editable = $user->token->isTokenValid($_SESSION['USERDATA']['id'], $oldtoken_ea, 5);
21+
$ea_sent = $user->token->doesTokenExist('account_edit', $_SESSION['USERDATA']['id']);
22+
}
23+
if ($config['twofactor']['options']['changepw'] && $oldtoken_cp !== "") {
24+
$popuptypes[] = 'changing your password';
25+
$cp_editable = $user->token->isTokenValid($_SESSION['USERDATA']['id'], $oldtoken_cp, 6);
26+
$cp_sent = $user->token->doesTokenExist('change_pw', $_SESSION['USERDATA']['id']);
27+
}
28+
if ($config['twofactor']['options']['withdraw'] && $oldtoken_wf !== "") {
29+
$popuptypes[] = 'withdrawals';
30+
$wf_editable = $user->token->isTokenValid($_SESSION['USERDATA']['id'], $oldtoken_wf, 7);
31+
$wf_sent = $user->token->doesTokenExist('withdraw_funds', $_SESSION['USERDATA']['id']);
32+
}
3233

33-
// get the status of a token if set
34-
$message_tokensent_invalid = 'A token was sent to your e-mail that will allow you to ';
35-
$message_tokensent_valid = 'You can currently ';
36-
$messages_tokensent_status = array(
37-
'ea' => 'edit your account details',
38-
'wf' => 'withdraw funds',
39-
'cp' => 'change your password'
40-
);
41-
// build the message we're going to show them for their token(s)
42-
$eaprep_sent = ($ea_sent) ? $message_tokensent_valid.$messages_tokensent_status['ea'] : "";
43-
$eaprep_edit = ($ea_editable) ? $message_tokensent_invalid.$messages_tokensent_status['ea'] : "";
44-
$wfprep_sent = ($wf_sent) ? $message_tokensent_valid.$messages_tokensent_status['wf'] : "";
45-
$wfprep_edit = ($wf_editable) ? $message_tokensent_invalid.$messages_tokensent_status['wf'] : "";
46-
$cpprep_sent = ($cp_sent) ? $message_tokensent_valid.$messages_tokensent_status['cp'] : "";
47-
$cpprep_edit = ($cp_editable) ? $message_tokensent_invalid.$messages_tokensent_status['cp'] : "";
48-
$ptc = 0;
49-
$ptcn = count($popuptypes);
50-
foreach ($popuptypes as $pt) {
51-
if ($ptcn == 1) { $popupmsg.= $popuptypes[$ptc]; continue; }
52-
if ($ptc !== ($ptcn-1)) {
53-
$popupmsg.= $popuptypes[$ptc].', ';
54-
} else {
55-
$popupmsg.= 'and '.$popuptypes[$ptc];
34+
// get the status of a token if set
35+
$message_tokensent_invalid = 'A token was sent to your e-mail that will allow you to ';
36+
$message_tokensent_valid = 'You can currently ';
37+
$messages_tokensent_status = array(
38+
'ea' => 'edit your account details',
39+
'wf' => 'withdraw funds',
40+
'cp' => 'change your password'
41+
);
42+
// build the message we're going to show them for their token(s)
43+
$eaprep_sent = ($ea_sent) ? $message_tokensent_valid.$messages_tokensent_status['ea'] : "";
44+
$eaprep_edit = ($ea_editable) ? $message_tokensent_invalid.$messages_tokensent_status['ea'] : "";
45+
$wfprep_sent = ($wf_sent) ? $message_tokensent_valid.$messages_tokensent_status['wf'] : "";
46+
$wfprep_edit = ($wf_editable) ? $message_tokensent_invalid.$messages_tokensent_status['wf'] : "";
47+
$cpprep_sent = ($cp_sent) ? $message_tokensent_valid.$messages_tokensent_status['cp'] : "";
48+
$cpprep_edit = ($cp_editable) ? $message_tokensent_invalid.$messages_tokensent_status['cp'] : "";
49+
$ptc = 0;
50+
$ptcn = count($popuptypes);
51+
foreach ($popuptypes as $pt) {
52+
if ($ptcn == 1) { $popupmsg.= $popuptypes[$ptc]; continue; }
53+
if ($ptc !== ($ptcn-1)) {
54+
$popupmsg.= $popuptypes[$ptc].', ';
55+
} else {
56+
$popupmsg.= 'and '.$popuptypes[$ptc];
57+
}
58+
$ptc++;
5659
}
57-
$ptc++;
60+
// display global notice about tokens being in use and for which bits they're active
61+
$_SESSION['POPUP'][] = array('CONTENT' => $popupmsg, 'TYPE' => 'alert alert-warning');
5862
}
59-
// display global notice about tokens being in use and for which bits they're active
60-
$_SESSION['POPUP'][] = array('CONTENT' => $popupmsg, 'TYPE' => 'alert alert-warning');
6163
}
6264

6365
if (isset($_POST['do']) && $_POST['do'] == 'genPin') {
@@ -174,12 +176,12 @@
174176
}
175177

176178
// display token info per each - only when sent and editable or just sent, not by default
177-
(!empty($eaprep_sent) && !empty($eaprep_edit)) ? $_SESSION['POPUP'][] = array('CONTENT' => $eaprep_sent, 'TYPE' => 'success'):"";
178-
(!empty($eaprep_sent) && empty($eaprep_edit)) ? $_SESSION['POPUP'][] = array('CONTENT' => $message_tokensent_invalid.$messages_tokensent_status['ea'], 'TYPE' => 'success'):"";
179-
(!empty($wfprep_sent) && !empty($wfprep_edit)) ? $_SESSION['POPUP'][] = array('CONTENT' => $wfprep_sent, 'TYPE' => 'success'):"";
180-
(!empty($wfprep_sent) && empty($wfprep_edit)) ? $_SESSION['POPUP'][] = array('CONTENT' => $message_tokensent_invalid.$messages_tokensent_status['wf'], 'TYPE' => 'success'):"";
181-
(!empty($cpprep_sent) && !empty($cpprep_edit)) ? $_SESSION['POPUP'][] = array('CONTENT' => $cpprep_sent, 'TYPE' => 'success'):"";
182-
(!empty($cpprep_sent) && empty($cpprep_edit)) ? $_SESSION['POPUP'][] = array('CONTENT' => $message_tokensent_invalid.$messages_tokensent_status['cp'], 'TYPE' => 'success'):"";
179+
(!empty($eaprep_sent) && !empty($eaprep_edit)) ? $_SESSION['POPUP'][] = array('CONTENT' => $eaprep_sent, 'TYPE' => 'alert alert-success'):"";
180+
(!empty($eaprep_sent) && empty($eaprep_edit)) ? $_SESSION['POPUP'][] = array('CONTENT' => $message_tokensent_invalid.$messages_tokensent_status['ea'], 'TYPE' => 'alert alert-success'):"";
181+
(!empty($wfprep_sent) && !empty($wfprep_edit)) ? $_SESSION['POPUP'][] = array('CONTENT' => $wfprep_sent, 'TYPE' => 'alert alert-success'):"";
182+
(!empty($wfprep_sent) && empty($wfprep_edit)) ? $_SESSION['POPUP'][] = array('CONTENT' => $message_tokensent_invalid.$messages_tokensent_status['wf'], 'TYPE' => 'alert alert-success'):"";
183+
(!empty($cpprep_sent) && !empty($cpprep_edit)) ? $_SESSION['POPUP'][] = array('CONTENT' => $cpprep_sent, 'TYPE' => 'alert alert-success'):"";
184+
(!empty($cpprep_sent) && empty($cpprep_edit)) ? $_SESSION['POPUP'][] = array('CONTENT' => $message_tokensent_invalid.$messages_tokensent_status['cp'], 'TYPE' => 'alert alert-success'):"";
183185
// two-factor stuff
184186
$smarty->assign("CHANGEPASSUNLOCKED", $cp_editable);
185187
$smarty->assign("WITHDRAWUNLOCKED", $wf_editable);

0 commit comments

Comments
 (0)