From 7ec8fa9b9532c0d6121417a7b27f3971f4b94af0 Mon Sep 17 00:00:00 2001 From: Sebastian Grewe Date: Tue, 20 Aug 2013 12:02:47 +0200 Subject: [PATCH] Moving a lot of settings from config to adminpanel * Migrated configuration options to admin panel * Removed configuration options from config file * Added help text for each configuration option into panel Addresses #622 and needs extensive testing by pools. A lot has changed so pool owners might have to adjust their own templates to match this new system. --- public/include/autoloader.inc.php | 41 +++-- public/include/classes/api.class.php | 3 +- public/include/classes/base.class.php | 5 +- public/include/classes/mail.class.php | 42 +----- public/include/classes/notification.class.php | 15 -- public/include/classes/setting.class.php | 6 +- public/include/classes/user.class.php | 10 +- public/include/config/admin_settings.inc.php | 140 +++++++++++++++++- public/include/config/global.inc.dist.php | 76 ---------- public/include/pages/register.inc.php | 5 +- .../include/pages/register/register.inc.php | 18 +-- .../include/pages/statistics/blocks.inc.php | 4 +- public/include/pages/statistics/pool.inc.php | 6 +- public/include/smarty_globals.inc.php | 20 ++- .../mmcFE/account/transactions/default.tpl | 2 +- .../mmcFE/admin/settings/default.tpl | 4 +- .../mmcFE/admin/transactions/default.tpl | 2 +- public/templates/mmcFE/global/header.tpl | 4 +- public/templates/mmcFE/global/navigation.tpl | 6 +- public/templates/mmcFE/master.tpl | 2 +- .../mmcFE/statistics/blocks/default.tpl | 6 +- .../mmcFE/statistics/blocks/small_table.tpl | 6 +- .../mmcFE/statistics/pool/authenticated.tpl | 12 +- public/templates/mobile/global/header.tpl | 2 +- public/templates/mobile/master.tpl | 2 +- .../mobile/statistics/blocks/default.tpl | 2 +- .../mobile/statistics/blocks/small_table.tpl | 2 +- .../mobile/statistics/pool/authenticated.tpl | 10 +- 28 files changed, 252 insertions(+), 201 deletions(-) diff --git a/public/include/autoloader.inc.php b/public/include/autoloader.inc.php index 8f8ea6dc..35ce807e 100644 --- a/public/include/autoloader.inc.php +++ b/public/include/autoloader.inc.php @@ -1,34 +1,40 @@ isMobile() && $config['website']['mobile']) { - // Set to mobile theme - $config['website']['mobile_theme'] ? $theme = $config['website']['mobile_theme'] : $theme = 'mobile'; -} else { - // Use configured theme, fallback to default theme - $config['website']['theme'] ? $theme = $config['website']['theme'] : $theme = 'mmcFE'; -} -define('THEME', $theme); - +// Default classes require_once(CLASS_DIR . '/debug.class.php'); require_once(CLASS_DIR . '/bitcoin.class.php'); require_once(CLASS_DIR . '/statscache.class.php'); require_once(CLASS_DIR . '/bitcoinwrapper.class.php'); require_once(INCLUDE_DIR . '/lib/KLogger.php'); require_once(INCLUDE_DIR . '/database.inc.php'); -require_once(INCLUDE_DIR . '/smarty.inc.php'); -// Load classes that need the above as dependencies + +// We need to load these two first require_once(CLASS_DIR . '/base.class.php'); +require_once(CLASS_DIR . '/setting.class.php'); + +// We need this one in here to properly set our theme +require_once(INCLUDE_DIR . '/lib/Mobile_Detect.php'); + +// Detect device +if ($detect->isMobile() && $setting->getValue('website_mobile_theme')) { + // Set to mobile theme + $setting->getValue('website_mobile_theme') ? $theme = $setting->getValue('website_mobile_theme') : $theme = 'mobile'; +} else { + // Use configured theme, fallback to default theme + $setting->getValue('website_theme') ? $theme = $setting->getValue('website_theme') : $theme = 'mmcFE'; +} +define('THEME', $theme); + +// Load smarty now that we have our theme defined +require_once(INCLUDE_DIR . '/smarty.inc.php'); + +// Load everything else in proper order require_once(CLASS_DIR . '/api.class.php'); require_once(CLASS_DIR . '/mail.class.php'); require_once(CLASS_DIR . '/tokentype.class.php'); require_once(CLASS_DIR . '/token.class.php'); require_once(CLASS_DIR . '/payout.class.php'); require_once(CLASS_DIR . '/block.class.php'); -require_once(CLASS_DIR . '/setting.class.php'); require_once(CLASS_DIR . '/monitoring.class.php'); require_once(CLASS_DIR . '/user.class.php'); require_once(CLASS_DIR . '/invitation.class.php'); @@ -40,3 +46,6 @@ require_once(CLASS_DIR . '/notification.class.php'); require_once(CLASS_DIR . '/news.class.php'); require_once(INCLUDE_DIR . '/lib/Michelf/Markdown.php'); require_once(INCLUDE_DIR . '/lib/scrypt.php'); + + +?> diff --git a/public/include/classes/api.class.php b/public/include/classes/api.class.php index 36374162..e1403ee5 100644 --- a/public/include/classes/api.class.php +++ b/public/include/classes/api.class.php @@ -8,7 +8,7 @@ if (!defined('SECURITY')) die('Hacking attempt'); **/ class Api extends Base { function isActive($error=true) { - if (!$this->config['website']['api']['disabled']) { + if (!$this->setting->getValue('disable_api')) { return true; } else { if ($error == true) { @@ -21,3 +21,4 @@ class Api extends Base { $api = new Api(); $api->setConfig($config); +$api->setSetting($setting); diff --git a/public/include/classes/base.class.php b/public/include/classes/base.class.php index 6dc88b02..2aae51ce 100644 --- a/public/include/classes/base.class.php +++ b/public/include/classes/base.class.php @@ -32,7 +32,10 @@ class Base { $this->token = $token; } public function setBlock($block) { - $this->block= $block; + $this->block = $block; + } + public function setSetting($setting) { + $this->setting = $setting; } public function setBitcoin($bitcoin) { $this->bitcoin = $bitcoin; diff --git a/public/include/classes/mail.class.php b/public/include/classes/mail.class.php index e34423c5..ca1342aa 100644 --- a/public/include/classes/mail.class.php +++ b/public/include/classes/mail.class.php @@ -4,30 +4,7 @@ if (!defined('SECURITY')) die('Hacking attempt'); -class Mail { - private $sError = ''; - - public function setDebug($debug) { - $this->debug = $debug; - } - public function setMysql($mysqli) { - $this->mysqli = $mysqli; - } - public function setSmarty($smarty) { - $this->smarty = $smarty; - } - public function setUser($user) { - $this->user = $user; - } - public function setConfig($config) { - $this->config = $config; - } - public function setErrorMessage($msg) { - $this->sError = $msg; - } - public function getError() { - return $this->sError; - } +class Mail extends Base { function checkStmt($bState) { $this->debug->append("STA " . __METHOD__, 4); if ($bState ===! true) { @@ -39,21 +16,15 @@ class Mail { } public function sendMail($template, $aData) { - $this->smarty->assign('WEBSITENAME', $this->config['website']['name']); + $this->smarty->assign('WEBSITENAME', $this->setting->getValue('website_name')); $this->smarty->assign('SUBJECT', $aData['subject']); $this->smarty->assign('DATA', $aData); - $headers = 'From: Website Administration <' . $this->config['website']['email'] . ">\n"; + $headers = 'From: Website Administration <' . $this->setting->getValue('website_email') . ">\n"; $headers .= "MIME-Version: 1.0\n"; $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; - if (mail($aData['email'], - $this->smarty->fetch(BASEPATH . 'templates/mail/subject.tpl'), - $this->smarty->fetch(BASEPATH . 'templates/mail/' . $template . '.tpl'), - $headers)) { - return true; - } else { - $this->setErrorMessage("Unable to send mail"); - return false; - } + if (mail($aData['email'], $this->smarty->fetch(BASEPATH . 'templates/mail/subject.tpl'), $this->smarty->fetch(BASEPATH . 'templates/mail/' . $template . '.tpl'), $headers)) + return true; + $this->setErrorMessage('Unable to send mail'); return false; } } @@ -64,4 +35,5 @@ $mail->setDebug($debug); $mail->setMysql($mysqli); $mail->setSmarty($smarty); $mail->setConfig($config); +$mail->setSetting($setting); ?> diff --git a/public/include/classes/notification.class.php b/public/include/classes/notification.class.php index d128087a..08f3d3f5 100644 --- a/public/include/classes/notification.class.php +++ b/public/include/classes/notification.class.php @@ -17,21 +17,6 @@ class Notification extends Mail { return $this->updateSingle($id, $field); } - /** - * Update a single row in a table - * @param userID int Account ID - * @param field string Field to update - * @return bool - **/ - private function updateSingle($id, $field, $table='') { - if (empty($table)) $table = $this->table; - $this->debug->append("STA " . __METHOD__, 4); - $stmt = $this->mysqli->prepare("UPDATE $table SET " . $field['name'] . " = ? WHERE id = ? LIMIT 1"); - if ($this->checkStmt($stmt) && $stmt->bind_param($field['type'].'i', $field['value'], $id) && $stmt->execute()) - return true; - $this->debug->append("Unable to update " . $field['name'] . " with " . $field['value'] . " for ID $id"); - return false; - } /** * We check our notification table for existing data * so we can avoid duplicate entries diff --git a/public/include/classes/setting.class.php b/public/include/classes/setting.class.php index f2c1cbea..56a0d460 100644 --- a/public/include/classes/setting.class.php +++ b/public/include/classes/setting.class.php @@ -5,10 +5,9 @@ if (!defined('SECURITY')) die('Hacking attempt'); class Setting { - public function __construct($debug, $mysqli, $salt) { + public function __construct($debug, $mysqli) { $this->debug = $debug; $this->mysqli = $mysqli; - $this->salt = $salt; $this->table = 'settings'; } @@ -47,9 +46,8 @@ class Setting { if ($stmt && $stmt->bind_param('sss', $name, $value, $value) && $stmt->execute()) return true; $this->debug->append("Failed to set $name to $value"); - echo $this->mysqli->error; return false; } } -$setting = new Setting($debug, $mysqli, SALT); +$setting = new Setting($debug, $mysqli); diff --git a/public/include/classes/user.class.php b/public/include/classes/user.class.php index c9fcc2cc..e012505a 100644 --- a/public/include/classes/user.class.php +++ b/public/include/classes/user.class.php @@ -28,6 +28,9 @@ class User { public function setBitcoin($bitcoin) { $this->bitcoin = $bitcoin; } + public function setSetting($setting) { + $this->setting = $setting; + } private function setErrorMessage($msg) { $this->sError = $msg; } @@ -525,7 +528,7 @@ class User { } } if ($this->mysqli->query("SELECT id FROM $this->table LIMIT 1")->num_rows > 0) { - $this->config['accounts']['confirm_email']['enabled'] ? $is_locked = 1 : $is_locked = 0; + ! $this->setting->getValue('accounts_confirm_email_disabled') ? $is_locked = 1 : $is_locked = 0; $is_admin = 0; $stmt = $this->mysqli->prepare(" INSERT INTO $this->table (username, pass, email, pin, api_key, is_locked) @@ -547,14 +550,14 @@ class User { $username_clean = strip_tags($username); if ($this->checkStmt($stmt) && $stmt->bind_param('sssssi', $username_clean, $password_hash, $email1, $pin_hash, $apikey_hash, $is_locked) && $stmt->execute()) { - if ($this->config['accounts']['confirm_email']['enabled'] && $is_admin != 1) { + if (! $this->setting->getValue('accounts_confirm_email_enabled') && $is_admin != 1) { if ($token = $this->token->createToken('confirm_email', $stmt->insert_id)) { $aData['username'] = $username_clean; $aData['token'] = $token; $aData['email'] = $email1; $aData['subject'] = 'E-Mail verification'; if (!$this->mail->sendMail('register/confirm_email', $aData)) { - $this->setErrorMessage('Unable to request email confirmation'); + $this->setErrorMessage('Unable to request email confirmation: ' . $this->mail->getError()); return false; } return true; @@ -666,3 +669,4 @@ $user = new User($debug, $mysqli, SALT, $config); $user->setMail($mail); $user->setToken($oToken); $user->setBitcoin($bitcoin); +$user->setSetting($setting); diff --git a/public/include/config/admin_settings.inc.php b/public/include/config/admin_settings.inc.php index a1d293d8..87375864 100644 --- a/public/include/config/admin_settings.inc.php +++ b/public/include/config/admin_settings.inc.php @@ -3,46 +3,184 @@ // Make sure we are called from index.php if (!defined('SECURITY')) die('Hacking attempt'); +// Load a list of themes available +$aTmpThemes = glob(THEME_DIR . '/*'); +$aThemes = array(); +foreach ($aTmpThemes as $dir) { + if (basename($dir) != 'cache' && basename($dir) != 'compile' && basename($dir) != 'mail') $aThemes[basename($dir)] = basename($dir); +} + // Load the settings available in this system -$aSettings['system'][] = array( +$aSettings['website'][] = array( 'display' => 'Maintenance Mode', 'type' => 'select', 'options' => array( 0 => 'No', 1 => 'Yes' ), + 'default' => 0, 'name' => 'maintenance', 'value' => $setting->getValue('maintenance'), 'tooltip' => 'Enable or Disable maintenance mode. Only admins can still login.' ); +$aSettings['website'][] = array( + 'display' => 'Website Name', 'type' => 'text', + 'size' => 25, + 'default' => 'The Pool', + 'name' => 'website_name', 'value' => $setting->getValue('website_name'), + 'tooltip' => 'The name of you pool page, displayed in the header of the page.' +); +$aSettings['website'][] = array( + 'display' => 'Website Title', 'type' => 'text', + 'size' => 25, + 'default' => 'The Pool - Mining Evolved', + 'name' => 'website_title', 'value' => $setting->getValue('website_title'), + 'tooltip' => 'The title of you pool page, displayed in the browser window header.' +); +$aSettings['website'][] = array( + 'display' => 'Website Slogan', 'type' => 'text', + 'size' => 25, + 'default' => 'Resistance is Futile', + 'name' => 'website_slogan', 'value' => $setting->getValue('website_slogan'), + 'tooltip' => 'The slogan of you pool page, displayed in the browser window header.' +); +$aSettings['website'][] = array( + 'display' => 'Website e-mail', 'type' => 'text', + 'size' => 25, + 'default' => 'test@example.com', + 'name' => 'website_email', 'value' => $setting->getValue('website_email'), + 'tooltip' => 'The email address for your pool, used in mail templates and notifications.' +); +$aSettings['website'][] = array( + 'display' => 'Website theme', 'type' => 'select', + 'options' => $aThemes, + 'default' => 'mmcFE', + 'name' => 'website_theme', 'value' => $setting->getValue('website_theme'), + 'tooltip' => 'The default theme used on your pool.' +); +$aSettings['website'][] = array( + 'display' => 'Website mobile theme', 'type' => 'select', + 'options' => $aThemes, + 'default' => 'mobile', + 'name' => 'website_mobile_theme', 'value' => $setting->getValue('website_mobile_theme'), + 'tooltip' => 'The mobile theme used for your pool.' +); +$aSettings['website'][] = array( + 'display' => 'Blockexplorer URL', 'type' => 'text', + 'size' => 50, + 'default' => 'http://explorer.litecoin.net/block/', + 'name' => 'website_blockexplorer_url', 'value' => $setting->getValue('website_blockexplorer_url'), + 'tooltip' => 'URL to the blockexplorer website for your blockchain. Will append the blockhash to the URL. Leave empty to disabled this.' +); +$aSettings['website'][] = array( + 'display' => 'Disable Blockexplorer', 'type' => 'select', + 'options' => array( 0 => 'No', 1 => 'Yes' ), + 'name' => 'website_blockexplorer_disabled', 'value' => $setting->getValue('website_blockexplorer_disabled'), + 'tooltip' => 'Enabled or disable the blockexplorer URL feature. Will remove any links using the blockexplorer URL.' +); +$aSettings['website'][] = array( + 'display' => 'Chaininfo URL', 'type' => 'text', + 'size' => 50, + 'default' => 'http://allchains.info', + 'name' => 'website_chaininfo_url', 'value' => $setting->getValue('website_chaininfo_url'), + 'tooltip' => 'URL to the chaininfo website for your blockchain. Leave empty to disabled this.' +); +$aSettings['website'][] = array( + 'display' => 'Disable Chaininfo', 'type' => 'select', + 'options' => array( 0 => 'No', 1 => 'Yes' ), + 'name' => 'website_chaininfo_disabled', 'value' => $setting->getValue('website_chaininfo_disabled'), + 'tooltip' => 'Enabled or disable the chainfo URL feature. Will remove any links using the chaininfo URL.' +); +$aSettings['statistics'][] = array( + 'display' => 'Block Statistics Count', 'type' => 'text', + 'size' => 25, + 'default' => 20, + 'name' => 'statistics_block_count', 'value' => $setting->getValue('statistics_block_count'), + 'tooltip' => 'Blocks to fetch for the block statistics page.' +); +$aSettings['acl'][] = array( + 'display' => 'Pool Statistics', 'type' => 'select', + 'options' => array( 0 => 'Private', 1 => 'Public'), + 'default' => 1, + 'name' => 'acl_pool_statistics', 'value' => $setting->getValue('acl_pool_statistics'), + 'tooltip' => 'Make the pool statistics page private (users only) or public.' +); +$aSettings['acl'][] = array( + 'display' => 'Blcok Statistics', 'type' => 'select', + 'options' => array( 0 => 'Private', 1 => 'Public'), + 'default' => 1, + 'name' => 'acl_block_statistics', 'value' => $setting->getValue('acl_block_statistics'), + 'tooltip' => 'Make the block statistics page private (users only) or public.' +); +$aSettings['system'][] = array( + 'display' => 'Disable e-mail confirmations', 'type' => 'select', + 'options' => array( 0 => 'No', 1 => 'Yes' ), + 'default' => 0, + 'name' => 'accounts_confirm_email_disabled', 'value' => $setting->getValue('accounts_confirm_email_disabled'), + 'tooltip' => 'Should users supply a valid e-mail address upon registration. Requires them to confirm the address before accounts are activated.' +); $aSettings['system'][] = array( 'display' => 'Disable registrations', 'type' => 'select', 'options' => array( 0 => 'No', 1 => 'Yes' ), + 'default' => 0, 'name' => 'lock_registration', 'value' => $setting->getValue('lock_registration'), 'tooltip' => 'Enable or Disable registrations. Useful to create an invitation only pool.' ); $aSettings['system'][] = array( 'display' => 'Disable Invitations', 'type' => 'select', 'options' => array( 0 => 'No', 1 => 'Yes' ), + 'default' => 0, 'name' => 'disable_invitations', 'value' => $setting->getValue('disable_invitations'), 'tooltip' => 'Enable or Disable invitations. Users will not be able to invite new users via email if disabled.' ); $aSettings['system'][] = array( 'display' => 'Disable Manual Payouts', 'type' => 'select', 'options' => array( 0 => 'No', 1 => 'Yes' ), + 'default' => 0, 'name' => 'disable_mp', 'value' => $setting->getValue('disable_mp'), 'tooltip' => 'Enable or Disable the manual payout processing. Users will not be able to withdraw any funds if disabled.' ); $aSettings['system'][] = array( 'display' => 'Disable Automatic Payouts', 'type' => 'select', 'options' => array( 0 => 'No', 1 => 'Yes' ), + 'default' => 0, 'name' => 'disable_ap', 'value' => $setting->getValue('disable_ap'), 'tooltip' => 'Enable or Disable the automatic payout processing. Users exceeding their thresholds will not be paid out if disabled.' ); $aSettings['system'][] = array( 'display' => 'Disable notifications', 'type' => 'select', 'options' => array( 0 => 'No', 1 => 'Yes' ), + 'default' => 0, 'name' => 'disable_notifications', 'value' => $setting->getValue('disable_notifications'), 'tooltip' => 'Enable or Disable system notifications. This includes new found blocks, monitoring and all other notifications.' ); +$aSettings['system'][] = array( + 'display' => 'Disable API', 'type' => 'select', + 'options' => array( 0 => 'No', 1 => 'Yes' ), + 'default' => 0, + 'name' => 'disable_api', 'value' => $setting->getValue('disable_api'), + 'tooltip' => 'Enable or Disable the pool wide API functions. See API reference on Github for details.' +); +$aSettings['recaptcha'][] = array( + 'display' => 'Enable re-Captcha', 'type' => 'select', + 'options' => array( 0 => 'No', 1 => 'Yes' ), + 'default' => 0, + 'name' => 'recaptcha_enabled', 'value' => $setting->getValue('recaptcha_enabled'), + 'tooltip' => 'Enable or Disable re-Captcha. This will require user input on registraion and other forms.' +); +$aSettings['recaptcha'][] = array( + 'display' => 're-Captcha Private Key', 'type' => 'text', + 'size' => 25, + 'default' => 'YOUR_PRIVATE_KEY', + 'name' => 'recaptcha_private_key', 'value' => $setting->getValue('recaptcha_private_key'), + 'tooltip' => '.' +); +$aSettings['recaptcha'][] = array( + 'display' => 're-Captcha Public Key', 'type' => 'text', + 'size' => 25, + 'default' => 'YOUR_PUBLIC_KEY', + 'name' => 'recaptcha_public_key', 'value' => $setting->getValue('recaptcha_public_key'), + 'tooltip' => 'Your public key as given by your re-Captcha account.' +); $aSettings['other'][] = array( 'display' => 'Message of the Day', 'type' => 'text', 'size' => 25, + 'default' => '', 'name' => 'system_motd', 'value' => $setting->getValue('system_motd'), 'tooltip' => 'Display a message of the day as information popup if set.' ); diff --git a/public/include/config/global.inc.dist.php b/public/include/config/global.inc.dist.php index 265dfc7a..88f0a17c 100644 --- a/public/include/config/global.inc.dist.php +++ b/public/include/config/global.inc.dist.php @@ -97,49 +97,10 @@ $config['ap_threshold']['min'] = 1; $config['ap_threshold']['max'] = 250; -/** - * Website specific configuration settings - * - * Explanation: - * title : Website title used in master template - * name : The pool name, displayed in the header and mails - * slogan : A special slogan, also displayed in the header below name - * email : `From` addresses used in notifications - * theme : Theme used for desktop browsers - * mobile : Enable/Disable mobile theme support - * mobile_theme : Theme used for mobile browsers - * api disabled : Disable the sites API functions - * blocks count : # of blocks to display on block statistics page - * - * Defaults: - * title = `The Pool - Mining Evolved` - * name = `The Pool` - * slogan = `Resistance is futile` - * email = `test@example.com` - * theme = `mmcFE` - * mobile = true - * mobile_theme = `mobile` - * api disbabled = false - * blocks count = 20 - **/ -$config['website']['title'] = 'The Pool - Mining Evolved'; -$config['website']['name'] = 'The Pool'; -$config['website']['slogan'] = 'Resistance is futile'; -$config['website']['email'] = 'test@example.com'; -$config['website']['theme'] = 'mmcFE'; -$config['website']['mobile'] = true; -$config['website']['mobile_theme'] = 'mobile'; -$config['website']['api']['disabled'] = false; -$config['website']['blocks']['count'] = 20; - /** * Account specific settings * * Explanation - * You can change some defaults on how accounts are created or registered - * By default, all newly created accounts will require an email verificaiton. - * Only after acitivating an account the user will be able to login - * * Invitations will allow your users to invite new members to join the pool. * After sending a mail to the invited user, they can register using the token * created. Invitations can be enabled and disabled through the admin panel. @@ -149,41 +110,13 @@ $config['website']['blocks']['count'] = 20; * variable. * * Options: - * confirm_email : Send confirmation mail to user after registration * count : Maximum invitations a user is able to send * * Defaults: - * confirm_email : true * count : 5 **/ -$config['accounts']['confirm_email']['enabled'] = true; $config['accounts']['invitations']['count'] = 5; -/** - * Some basic access restrictions on some pages - * - * Explanation: - * Some pools would like to run a few pages for public access instead - * of enforcing a login. You can change visibility of some pages here. - * - * Options: - * 'public' : Allow guest access and authenticated user to view page - * 'private' : Only allow logged in users access to view page - * - * Defaults: - * 'private' for every page - **/ -$config['website']['acl']['statistics']['pool'] = 'private'; -$config['website']['acl']['statistics']['blocks'] = 'private'; - -/** - * Re-Captcha settings - * Please read http://www.google.com/recaptcha for details - **/ -$config['recaptcha']['enabled'] = false; -$config['recaptcha']['public_key'] = 'YOUR_PUBLIC_RECAPTCHA_KEY'; -$config['recaptcha']['private_key'] = 'YOUR_PRIVATE_RECAPTCHA_KEY'; - // Currency system used in this pool, default: `LTC` $config['currency'] = 'LTC'; @@ -254,15 +187,6 @@ $config['payout_system'] = 'prop'; $config['archive']['maxrounds'] = 10; $config['archive']['maxage'] = 60 * 24; -// URL prefix for block searches, used for block links, default: `http://explorer.litecoin.net/block/` -// The Blockhash is appended on the templates to this URL -// If this config is empty, the block link to the block information page will be removed -$config['blockexplorer'] = 'http://explorer.litecoin.net/block/'; - -// Link to blockchain information, used for difficulty link, default: `http://allchains.info` -// If empty, the difficulty link to the chain information will be removed -$config['chaininfo'] = 'http://allchains.info'; - // Pool fees applied to users in percent, default: 0 (disabled) $config['fees'] = 0; diff --git a/public/include/pages/register.inc.php b/public/include/pages/register.inc.php index 01b71b18..681bcb53 100644 --- a/public/include/pages/register.inc.php +++ b/public/include/pages/register.inc.php @@ -10,11 +10,10 @@ if ($setting->getValue('lock_registration') && $setting->getValue('disable_invit $_SESSION['POPUP'][] = array('CONTENT' => 'Only invited users are allowed to register.', 'TYPE' => 'errormsg'); $smarty->assign("CONTENT", "disabled.tpl"); } else { - if ($config['recaptcha']['enabled']) { + if ($setting->getValue('recaptcha_enabled')) { require_once(INCLUDE_DIR . '/lib/recaptchalib.php'); - $smarty->assign("RECAPTCHA", recaptcha_get_html($config['recaptcha']['public_key'])); + $smarty->assign("RECAPTCHA", recaptcha_get_html($setting->getValue('recaptcha_public_key'))); } - // Tempalte specifics $smarty->assign("CONTENT", "default.tpl"); } ?> diff --git a/public/include/pages/register/register.inc.php b/public/include/pages/register/register.inc.php index ca165e3b..ecb2c028 100644 --- a/public/include/pages/register/register.inc.php +++ b/public/include/pages/register/register.inc.php @@ -2,11 +2,11 @@ // Make sure we are called from index.php if (!defined('SECURITY')) die('Hacking attempt'); -if ($config['recaptcha']['enabled']) { +if ($setting->getValue('recaptcha_enabled')) { // Load re-captcha specific data require_once(INCLUDE_DIR . '/lib/recaptchalib.php'); $rsp = recaptcha_check_answer ( - $config['recaptcha']['private_key'], + $setting->getValue('recaptcha_private_key'), $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"] @@ -19,28 +19,28 @@ if ($setting->getValue('disable_invitations') && $setting->getValue('lock_regist $_SESSION['POPUP'][] = array('CONTENT' => 'Only invited users are allowed to register.', 'TYPE' => 'errormsg'); } else { // Check if recaptcha is enabled, process form data if valid - if($config['recaptcha']['enabled'] && $_POST["recaptcha_response_field"] && $_POST["recaptcha_response_field"]!=''){ + if($setting->getValue('recaptcha_enabled') && $_POST["recaptcha_response_field"] && $_POST["recaptcha_response_field"]!=''){ if ($rsp->is_valid) { - $smarty->assign("RECAPTCHA", recaptcha_get_html($config['recaptcha']['public_key'])); + $smarty->assign("RECAPTCHA", recaptcha_get_html($setting->getValue('recaptcha_public_key'))); isset($_POST['token']) ? $token = $_POST['token'] : $token = ''; if ($user->register($_POST['username'], $_POST['password1'], $_POST['password2'], $_POST['pin'], $_POST['email1'], $_POST['email2'], $token)) { - $config['accounts']['confirm_email']['enabled'] ? $_SESSION['POPUP'][] = array('CONTENT' => 'Please check your mailbox to activate this account') : $_SESSION['POPUP'][] = array('CONTENT' => 'Account created, please login'); + ! $setting->getValue('accounts_confirm_email_disabled') ? $_SESSION['POPUP'][] = array('CONTENT' => 'Please check your mailbox to activate this account') : $_SESSION['POPUP'][] = array('CONTENT' => 'Account created, please login'); } else { $_SESSION['POPUP'][] = array('CONTENT' => 'Unable to create account: ' . $user->getError(), 'TYPE' => 'errormsg'); } } else { - $smarty->assign("RECAPTCHA", recaptcha_get_html($config['recaptcha']['public_key'], $rsp->error)); + $smarty->assign("RECAPTCHA", recaptcha_get_html($setting->getValue('recaptcha_public_key'), $rsp->error)); $_SESSION['POPUP'][] = array('CONTENT' => 'Invalid Captcha, please try again. (' . $rsp->error . ')', 'TYPE' => 'errormsg'); } // Empty captcha - } else if ($config['recaptcha']['enabled']) { - $smarty->assign("RECAPTCHA", recaptcha_get_html($config['recaptcha']['public_key'], $rsp->error)); + } else if ($setting->getValue('recaptcha_enabled')) { + $smarty->assign("RECAPTCHA", recaptcha_get_html($setting->getValue('recaptcha_public_key'), $rsp->error)); $_SESSION['POPUP'][] = array('CONTENT' => 'Empty Captcha, please try again.', 'TYPE' => 'errormsg'); // Captcha disabled } else { isset($_POST['token']) ? $token = $_POST['token'] : $token = ''; if ($user->register($_POST['username'], $_POST['password1'], $_POST['password2'], $_POST['pin'], $_POST['email1'], $_POST['email2'], $token)) { - $config['accounts']['confirm_email']['enabled'] ? $_SESSION['POPUP'][] = array('CONTENT' => 'Please check your mailbox to activate this account') : $_SESSION['POPUP'][] = array('CONTENT' => 'Account created, please login'); + ! $setting->getValue('accounts_confirm_email_disabled') ? $_SESSION['POPUP'][] = array('CONTENT' => 'Please check your mailbox to activate this account') : $_SESSION['POPUP'][] = array('CONTENT' => 'Account created, please login'); } else { $_SESSION['POPUP'][] = array('CONTENT' => 'Unable to create account: ' . $user->getError(), 'TYPE' => 'errormsg'); } diff --git a/public/include/pages/statistics/blocks.inc.php b/public/include/pages/statistics/blocks.inc.php index 494e6be3..116d999d 100644 --- a/public/include/pages/statistics/blocks.inc.php +++ b/public/include/pages/statistics/blocks.inc.php @@ -7,7 +7,7 @@ if (!defined('SECURITY')) die('Hacking attempt'); if (!$smarty->isCached('master.tpl', $smarty_cache_key)) { $debug->append('No cached version available, fetching from backend', 3); // Grab the last blocks found - !empty($config['website']['blocks']['count']) ? $iLimit = $config['website']['blocks']['count'] : $iLimit = 20; + $setting->getValue('statistics_block_count') ? $iLimit = $setting->getValue('statistics_block_count') : $iLimit = 20; $aBlocksFoundData = $statistics->getBlocksFound($iLimit); // Propagate content our template @@ -17,7 +17,7 @@ if (!$smarty->isCached('master.tpl', $smarty_cache_key)) { $debug->append('Using cached page', 3); } -if ($config['website']['acl']['statistics']['blocks'] == 'public') { +if ($setting->getValue('acl_block_statistics')) { $smarty->assign("CONTENT", "default.tpl"); } else if ($user->isAuthenticated()) { $smarty->assign("CONTENT", "default.tpl"); diff --git a/public/include/pages/statistics/pool.inc.php b/public/include/pages/statistics/pool.inc.php index 2c1ca533..7937029d 100644 --- a/public/include/pages/statistics/pool.inc.php +++ b/public/include/pages/statistics/pool.inc.php @@ -52,7 +52,7 @@ if (!$smarty->isCached('master.tpl', $smarty_cache_key)) { $smarty->assign("CONTRIBSHARES", $aContributorsShares); $smarty->assign("CONTRIBHASHES", $aContributorsHashes); $smarty->assign("CURRENTBLOCK", $iBlock); - $smarty->assign("CURRENTBLOCKHASH", $sBlockHash); + $smarty->assign("CURRENTBLOCKHASH", @$sBlockHash); if (count($aBlockData) > 0) { $smarty->assign("LASTBLOCK", $aBlockData['height']); $smarty->assign("LASTBLOCKHASH", $aBlockData['blockhash']); @@ -66,9 +66,9 @@ if (!$smarty->isCached('master.tpl', $smarty_cache_key)) { } // Public / private page detection -if ($config['website']['acl']['statistics']['pool'] == 'public') { +if ($setting->getValue('acl_pool_statistics')) { $smarty->assign("CONTENT", "authenticated.tpl"); -} else if ($user->isAuthenticated() && $config['website']['acl']['statistics']['pool'] == 'private') { +} else if ($user->isAuthenticated() && ! $setting->getValue('acl_pool_statistics')) { $smarty->assign("CONTENT", "authenticated.tpl"); } else { $smarty->assign("CONTENT", "../default.tpl"); diff --git a/public/include/smarty_globals.inc.php b/public/include/smarty_globals.inc.php index a8875c8f..af2805b8 100644 --- a/public/include/smarty_globals.inc.php +++ b/public/include/smarty_globals.inc.php @@ -32,8 +32,6 @@ if ($iCurrentPoolHashrate > $dNetworkHashrate) $dNetworkHashrate = $iCurrentPool // Global data for Smarty $aGlobal = array( - 'slogan' => $config['website']['slogan'], - 'websitename' => $config['website']['name'], 'hashrate' => $iCurrentPoolHashrate, 'nethashrate' => $dNetworkHashrate, 'sharerate' => $iCurrentPoolShareRate, @@ -43,11 +41,8 @@ $aGlobal = array( 'confirmations' => $config['confirmations'], 'reward' => $config['reward'], 'price' => $setting->getValue('price'), - 'blockexplorer' => $config['blockexplorer'], - 'chaininfo' => $config['chaininfo'], 'disable_mp' => $setting->getValue('disable_mp'), 'config' => array( - 'website' => $config['website'], 'accounts' => $config['accounts'], 'disable_invitations' => $setting->getValue('disable_invitations'), 'disable_notifications' => $setting->getValue('disable_notifications'), @@ -63,6 +58,21 @@ $aGlobal = array( ) ); +// Website configurations +$aGlobal['website']['name'] = $setting->getValue('website_name'); +$aGlobal['website']['title'] = $setting->getValue('website_title'); +$aGlobal['website']['slogan'] = $setting->getValue('website_slogan'); +$aGlobal['website']['email'] = $setting->getValue('website_email'); +$aGlobal['website']['api']['disabled'] = $setting->getValue('disable_api'); +$aGlobal['website']['blockexplorer']['disabled'] = $setting->getValue('website_blockexplorer_disabled'); +$aGlobal['website']['chaininfo']['disabled'] = $setting->getValue('website_chaininfo_disabled'); +$setting->getValue('website_blockexplorer_url') ? $aGlobal['website']['blockexplorer']['url'] = $setting->getValue('website_blockexplorer_url') : $aGlobal['website']['blockexplorer']['url'] = 'http://explorer.litecoin.net/block/'; +$setting->getValue('website_chaininfo_url') ? $aGlobal['website']['chaininfo']['url'] = $setting->getValue('website_chaininfo_url') : $aGlobal['website']['chaininfo']['url'] = 'http://allchains.info'; + +// ACLs +$aGlobal['acl']['pool']['statistics'] = $setting->getValue('acl_pool_statistics'); +$aGlobal['acl']['block']['statistics'] = $setting->getValue('acl_block_statistics'); + // Special calculations for PPS Values based on reward_type setting and/or available blocks if ($config['reward_type'] != 'block') { $aGlobal['ppsvalue'] = number_format(round($config['reward'] / (pow(2,32) * $dDifficulty) * pow(2, $config['difficulty']), 12) ,12); diff --git a/public/templates/mmcFE/account/transactions/default.tpl b/public/templates/mmcFE/account/transactions/default.tpl index 169e7de2..32febd64 100644 --- a/public/templates/mmcFE/account/transactions/default.tpl +++ b/public/templates/mmcFE/account/transactions/default.tpl @@ -96,7 +96,7 @@ ({$TRANSACTIONS[transaction].confirmations|default:"n/a"}) {$TRANSACTIONS[transaction].coin_address} - {if $TRANSACTIONS[transaction].height == 0}n/a{else}{if $GLOBAL.blockexplorer}{$TRANSACTIONS[transaction].height}{else}{$TRANSACTIONS[transaction].height}{/if}{/if} + {if $TRANSACTIONS[transaction].height == 0}n/a{else}{if $GLOBAL.website.blockexplorer.url}{$TRANSACTIONS[transaction].height}{else}{$TRANSACTIONS[transaction].height}{/if}{/if} {$TRANSACTIONS[transaction].amount|number_format:"8"} {/section} diff --git a/public/templates/mmcFE/admin/settings/default.tpl b/public/templates/mmcFE/admin/settings/default.tpl index dd5c5a09..519fb96e 100644 --- a/public/templates/mmcFE/admin/settings/default.tpl +++ b/public/templates/mmcFE/admin/settings/default.tpl @@ -18,9 +18,9 @@ {if $SETTINGS.$TAB[setting].tooltip|default}{/if} {if $SETTINGS.$TAB[setting].type == 'select'} - {html_options name="data[{$SETTINGS.$TAB[setting].name}]" options=$SETTINGS.$TAB[setting].options selected=$SETTINGS.$TAB[setting].value|default:"0"} + {html_options name="data[{$SETTINGS.$TAB[setting].name}]" options=$SETTINGS.$TAB[setting].options selected=$SETTINGS.$TAB[setting].value|default:$SETTINGS.$TAB[setting].default} {else if $SETTINGS.$TAB[setting].type == 'text'} - + {else} Unknown option type: {$SETTINGS.$TAB[setting].type} {/if} diff --git a/public/templates/mmcFE/admin/transactions/default.tpl b/public/templates/mmcFE/admin/transactions/default.tpl index cb066607..58b055d9 100644 --- a/public/templates/mmcFE/admin/transactions/default.tpl +++ b/public/templates/mmcFE/admin/transactions/default.tpl @@ -104,7 +104,7 @@ ({$TRANSACTIONS[transaction].confirmations|default:"n/a"}) {$TRANSACTIONS[transaction].coin_address} - {if $TRANSACTIONS[transaction].height == 0}n/a{else}{if $GLOBAL.blockexplorer}{$TRANSACTIONS[transaction].height}{else}{$TRANSACTIONS[transaction].height}{/if}{/if} + {if $TRANSACTIONS[transaction].height == 0}n/a{else}{if $GLOBAL.website.blockexplorer.url}{$TRANSACTIONS[transaction].height}{else}{$TRANSACTIONS[transaction].height}{/if}{/if} {$TRANSACTIONS[transaction].amount|number_format:"8"} {/section} diff --git a/public/templates/mmcFE/global/header.tpl b/public/templates/mmcFE/global/header.tpl index 4ee9d9b5..9b03db7e 100644 --- a/public/templates/mmcFE/global/header.tpl +++ b/public/templates/mmcFE/global/header.tpl @@ -1,5 +1,5 @@ -
{$GLOBAL.websitename}
- {$GLOBAL.slogan} +
{$GLOBAL.website.name|default:"The Pool"}
+ {$GLOBAL.website.slogan|default:"Resistance is Futile"}
diff --git a/public/templates/mmcFE/global/navigation.tpl b/public/templates/mmcFE/global/navigation.tpl index 4480cf2b..407f24b0 100644 --- a/public/templates/mmcFE/global/navigation.tpl +++ b/public/templates/mmcFE/global/navigation.tpl @@ -35,10 +35,10 @@ {else}
  • Statistics
      - {if $GLOBAL.config.website.acl.statistics.pool == 'public'} + {if $GLOBAL.acl.pool.statistics}
    • Pool Stats
    • {/if} - {if $GLOBAL.config.website.acl.statistics.blocks == 'public'} + {if $GLOBAL.acl.block.statistics}
    • Block Stats
    • {/if}
    @@ -48,7 +48,7 @@
  • About
  • diff --git a/public/templates/mmcFE/master.tpl b/public/templates/mmcFE/master.tpl index 5c7f59b1..28a6a26d 100644 --- a/public/templates/mmcFE/master.tpl +++ b/public/templates/mmcFE/master.tpl @@ -1,7 +1,7 @@ - {$GLOBAL.config.website.title} + {$GLOBAL.website.title} diff --git a/public/templates/mmcFE/statistics/blocks/default.tpl b/public/templates/mmcFE/statistics/blocks/default.tpl index 8aeb21e6..6596647f 100644 --- a/public/templates/mmcFE/statistics/blocks/default.tpl +++ b/public/templates/mmcFE/statistics/blocks/default.tpl @@ -55,7 +55,11 @@ target and network difficulty and assuming a zero variance scenario. {assign var="totalshares" value=$totalshares+$BLOCKSFOUND[block].shares} {assign var="count" value=$count+1} - + {if ! $GLOBAL.website.blockexplorer.disabled} + + {else} + + {/if} - + {if ! $GLOBAL.website.blockexplorer.disabled} + + {else} + + {/if} diff --git a/public/templates/mmcFE/statistics/pool/authenticated.tpl b/public/templates/mmcFE/statistics/pool/authenticated.tpl index 394e762b..6189ef78 100644 --- a/public/templates/mmcFE/statistics/pool/authenticated.tpl +++ b/public/templates/mmcFE/statistics/pool/authenticated.tpl @@ -19,10 +19,10 @@ - {if $GLOBAL.blockexplorer} + {if $GLOBAL.website.blockexplorer.url} - + {else} @@ -32,12 +32,12 @@ {/if} - + - {if $GLOBAL.chaininfo} - + {if ! $GLOBAL.website.chaininfo.disabled} + {else} {/if} @@ -56,7 +56,7 @@
    {$BLOCKSFOUND[block].height}{$BLOCKSFOUND[block].height}{$BLOCKSFOUND[block].height} {if $BLOCKSFOUND[block].confirmations >= $GLOBAL.confirmations} Confirmed diff --git a/public/templates/mmcFE/statistics/blocks/small_table.tpl b/public/templates/mmcFE/statistics/blocks/small_table.tpl index 7ddc03c8..e826fd3a 100644 --- a/public/templates/mmcFE/statistics/blocks/small_table.tpl +++ b/public/templates/mmcFE/statistics/blocks/small_table.tpl @@ -13,7 +13,11 @@ {assign var=rank value=1} {section block $BLOCKSFOUND}
    {$BLOCKSFOUND[block].height}{$BLOCKSFOUND[block].height}{$BLOCKSFOUND[block].height}{if $BLOCKSFOUND[block].is_anonymous|default:"0" == 1}anonymous{else}{$BLOCKSFOUND[block].finder|default:"unknown"|escape}{/if} {$BLOCKSFOUND[block].time|date_format:"%d/%m %H:%M:%S"} {$BLOCKSFOUND[block].shares|number_format}Current Active Workers {$GLOBAL.workers}
    Next Network Block{$CURRENTBLOCK + 1}    (Current: {$CURRENTBLOCK}){$CURRENTBLOCK + 1}    (Current: {$CURRENTBLOCK})
    Last Block Found{if $GLOBAL.blockexplorer}{$LASTBLOCK|default:"0"}{else}{$LASTBLOCK|default:"0"}{/if}{if $GLOBAL.website.blockexplorer.url}{$LASTBLOCK|default:"0"}{else}{$LASTBLOCK|default:"0"}{/if}
    Current Difficulty{$DIFFICULTY}{$DIFFICULTY}{$DIFFICULTY}
    -{if !$GLOBAL.config.website.api.disabled}
  • These stats are also available in JSON format HERE
  • {/if} +{if !$GLOBAL.website.api.disabled}
  • These stats are also available in JSON format HERE
  • {/if} {include file="global/block_footer.tpl"} diff --git a/public/templates/mobile/global/header.tpl b/public/templates/mobile/global/header.tpl index a4de1e59..6575a237 100644 --- a/public/templates/mobile/global/header.tpl +++ b/public/templates/mobile/global/header.tpl @@ -1 +1 @@ -

    {$GLOBAL.websitename}

    +

    {$GLOBAL.website.name|default:"The Pool"}

    diff --git a/public/templates/mobile/master.tpl b/public/templates/mobile/master.tpl index 4cb7f7f3..abbd0874 100644 --- a/public/templates/mobile/master.tpl +++ b/public/templates/mobile/master.tpl @@ -1,7 +1,7 @@ - {$GLOBAL.config.website.title} + {$GLOBAL.website.title} diff --git a/public/templates/mobile/statistics/blocks/default.tpl b/public/templates/mobile/statistics/blocks/default.tpl index e4aa759a..d9c8b94d 100644 --- a/public/templates/mobile/statistics/blocks/default.tpl +++ b/public/templates/mobile/statistics/blocks/default.tpl @@ -46,7 +46,7 @@ target and network difficulty and assuming a zero variance scenario. {assign var=rank value=1} {section block $BLOCKSFOUND} - {$BLOCKSFOUND[block].height} + {$BLOCKSFOUND[block].height} {if $BLOCKSFOUND[block].confirmations >= $GLOBAL.confirmations} Confirmed diff --git a/public/templates/mobile/statistics/blocks/small_table.tpl b/public/templates/mobile/statistics/blocks/small_table.tpl index 9ed3ec74..f373e4e7 100644 --- a/public/templates/mobile/statistics/blocks/small_table.tpl +++ b/public/templates/mobile/statistics/blocks/small_table.tpl @@ -12,7 +12,7 @@ {assign var=rank value=1} {section block $BLOCKSFOUND} - {$BLOCKSFOUND[block].height} + {$BLOCKSFOUND[block].height} {if $BLOCKSFOUND[block].is_anonymous|default:"0" == 1}anonymous{else}{$BLOCKSFOUND[block].finder|default:"unknown"|escape}{/if} {$BLOCKSFOUND[block].time|date_format:"%d/%m %H:%M"} {$BLOCKSFOUND[block].shares|number_format} diff --git a/public/templates/mobile/statistics/pool/authenticated.tpl b/public/templates/mobile/statistics/pool/authenticated.tpl index 0d0252e6..842a9829 100644 --- a/public/templates/mobile/statistics/pool/authenticated.tpl +++ b/public/templates/mobile/statistics/pool/authenticated.tpl @@ -24,10 +24,10 @@ Current Active Workers {$GLOBAL.workers} - {if $GLOBAL.blockexplorer} + {if $GLOBAL.website.blockexplorer.url} Next Network Block - {$CURRENTBLOCK + 1}    (Current: {$CURRENTBLOCK}) + {$CURRENTBLOCK + 1}    (Current: {$CURRENTBLOCK}) {else} @@ -37,12 +37,12 @@ {/if} Last Block Found - {if $GLOBAL.blockexplorer}{$LASTBLOCK|default:"0"}{else}{$LASTBLOCK|default:"0"}{/if} + {if $GLOBAL.website.blockexplorer.url}{$LASTBLOCK|default:"0"}{else}{$LASTBLOCK|default:"0"}{/if} - {if $GLOBAL.chaininfo} + {if ! $GLOBAL.website.chaininfo.disabled} Current Difficulty - {$DIFFICULTY} + {$DIFFICULTY} {/if}