Merge pull request #647 from nrpatten/issue-444-theserapher
Issue 444 theserapher
This commit is contained in:
commit
0791d30e61
@ -15,6 +15,49 @@ class Mail extends Base {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Mail form contact site admin
|
||||
* @param senderName string senderName
|
||||
* @param senderEmail string senderEmail
|
||||
* @param senderSubject string senderSubject
|
||||
* @param senderMessage string senderMessage
|
||||
* @param email string config Email address
|
||||
* @param subject string header subject
|
||||
* @return bool
|
||||
**/
|
||||
public function contactform($senderName, $senderEmail, $senderSubject, $senderMessage) {
|
||||
$this->debug->append("STA " . __METHOD__, 4);
|
||||
if (preg_match('/[^a-z_\.\!\?\-0-9\\s ]/i', $senderName)) {
|
||||
$this->setErrorMessage('Username may only contain alphanumeric characters');
|
||||
return false;
|
||||
}
|
||||
if (empty($senderEmail) || !filter_var($senderEmail, FILTER_VALIDATE_EMAIL)) {
|
||||
$this->setErrorMessage( 'Invalid e-mail address' );
|
||||
return false;
|
||||
}
|
||||
if (preg_match('/[^a-z_\.\!\?\-0-9\\s ]/i', $senderSubject)) {
|
||||
$this->setErrorMessage('Subject may only contain alphanumeric characters');
|
||||
return false;
|
||||
}
|
||||
if (strlen(strip_tags($senderMessage)) < strlen($senderMessage)) {
|
||||
$this->setErrorMessage('Your message may only contain alphanumeric characters');
|
||||
return false;
|
||||
}
|
||||
$aData['senderName'] = $senderName;
|
||||
$aData['senderEmail'] = $senderEmail;
|
||||
$aData['senderSubject'] = $senderSubject;
|
||||
$aData['senderMessage'] = $senderMessage;
|
||||
$aData['email'] = $this->setting->getValue('website_email');
|
||||
$aData['subject'] = 'Contact From';
|
||||
if ($this->sendMail('contactform/body', $aData)) {
|
||||
return true;
|
||||
} else {
|
||||
$this->setErrorMessage( 'Unable to send email' );
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function sendMail($template, $aData) {
|
||||
$this->smarty->assign('WEBSITENAME', $this->setting->getValue('website_name'));
|
||||
$this->smarty->assign('SUBJECT', $aData['subject']);
|
||||
|
||||
@ -172,6 +172,13 @@ $aSettings['system'][] = array(
|
||||
'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['system'][] = array(
|
||||
'display' => 'Disable Contactform', 'type' => 'select',
|
||||
'options' => array( 0 => 'No', 1 => 'Yes' ),
|
||||
'default' => 0,
|
||||
'name' => 'disable_contactform', 'value' => $setting->getValue('disable_contactform'),
|
||||
'tooltip' => 'Enable or Disable Contactform. Users will not be able to use the contact form.'
|
||||
);
|
||||
$aSettings['recaptcha'][] = array(
|
||||
'display' => 'Enable re-Captcha', 'type' => 'select',
|
||||
'options' => array( 0 => 'No', 1 => 'Yes' ),
|
||||
|
||||
18
public/include/pages/contactform.inc.php
Normal file
18
public/include/pages/contactform.inc.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
// Make sure we are called from index.php
|
||||
if (!defined('SECURITY')) die('Hacking attempt');
|
||||
|
||||
if ($setting->getValue('disable_contactform')) {
|
||||
$_SESSION['POPUP'][] = array('CONTENT' => 'Contactform is currently disabled. Please try again later.', 'TYPE' => 'errormsg');
|
||||
$smarty->assign("CONTENT", "disabled.tpl");
|
||||
} else {
|
||||
if ($setting->getValue('recaptcha_enabled')) {
|
||||
require_once(INCLUDE_DIR . '/lib/recaptchalib.php');
|
||||
$smarty->assign("RECAPTCHA", recaptcha_get_html($setting->getValue('recaptcha_public_key')));
|
||||
}
|
||||
|
||||
// Tempalte specifics
|
||||
$smarty->assign("CONTENT", "default.tpl");
|
||||
}
|
||||
?>
|
||||
51
public/include/pages/contactform/contactform.inc.php
Normal file
51
public/include/pages/contactform/contactform.inc.php
Normal file
@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
// Make sure we are called from index.php
|
||||
if (!defined('SECURITY')) die('Hacking attempt');
|
||||
|
||||
|
||||
if ($setting->getValue('recaptcha_enabled')) {
|
||||
// Load re-captcha specific data
|
||||
require_once(INCLUDE_DIR . '/lib/recaptchalib.php');
|
||||
$rsp = recaptcha_check_answer (
|
||||
$setting->getValue('recaptcha_private_key'),
|
||||
$_SERVER["REMOTE_ADDR"],
|
||||
$_POST["recaptcha_challenge_field"],
|
||||
$_POST["recaptcha_response_field"]
|
||||
);
|
||||
}
|
||||
|
||||
if ($setting->getValue('disable_contactform')) {
|
||||
$_SESSION['POPUP'][] = array('CONTENT' => 'Contactform is currently disabled. Please try again later.', 'TYPE' => 'errormsg');
|
||||
} else {
|
||||
// Check if recaptcha is enabled, process form data if valid
|
||||
if($setting->getValue('recaptcha_enabled') && $_POST["recaptcha_response_field"] && $_POST["recaptcha_response_field"]!=''){
|
||||
if ($rsp->is_valid) {
|
||||
$smarty->assign("RECAPTCHA", recaptcha_get_html($setting->getValue('recaptcha_public_key')));
|
||||
if ($user->contactform($_POST['senderName'], $_POST['senderEmail'], $_POST['senderSubject'], $_POST['senderMesage'])) {
|
||||
$_SESSION['POPUP'][] = array('CONTENT' => 'Thanks for sending your message! We will get back to you shortly');
|
||||
} else {
|
||||
$_SESSION['POPUP'][] = array('CONTENT' => 'There was a problem sending your message. Please try again.' . $user->getError(), 'TYPE' => 'errormsg');
|
||||
}
|
||||
} else {
|
||||
$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 ($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 {
|
||||
if ($mail->contactform($_POST['senderName'], $_POST['senderEmail'], $_POST['senderSubject'], $_POST['senderMessage'])) {
|
||||
$_SESSION['POPUP'][] = array('CONTENT' => 'Thanks for sending your message! We will get back to you shortly');
|
||||
} else {
|
||||
$_SESSION['POPUP'][] = array('CONTENT' => 'There was a problem sending your message. Please try again. ' . $user->getError(), 'TYPE' => 'errormsg');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Tempalte specifics
|
||||
$smarty->assign("CONTENT", "default.tpl");
|
||||
|
||||
?>
|
||||
10
public/templates/mail/contactform/body.tpl
Normal file
10
public/templates/mail/contactform/body.tpl
Normal file
@ -0,0 +1,10 @@
|
||||
<html>
|
||||
<body>
|
||||
<p>{$WEBSITENAME} Message,</p>
|
||||
<p>{$DATA.senderName} Sent you a message</p>
|
||||
<p>Senders Email: {$DATA.senderEmail}</p>
|
||||
<p>Subject: {$DATA.senderSubject}</p>
|
||||
<p>Personal message:</p><p>{$DATA.senderMessage}</p>
|
||||
<p></p>
|
||||
</body>
|
||||
</html>
|
||||
10
public/templates/test/about/api/default.tpl
Normal file
10
public/templates/test/about/api/default.tpl
Normal file
@ -0,0 +1,10 @@
|
||||
<article class="module width_full">
|
||||
<header><h3>API Reference</h3></header>
|
||||
<div class="module_content">
|
||||
<center>
|
||||
<table width="100%">
|
||||
<p>Please head over to the <a href="https://github.com/TheSerapher/php-mmcfe-ng/wiki/API-Reference">official documentation</a> to learn about the API featured in <b>mmcfe-ng</b>.</p>
|
||||
</table>
|
||||
</center>
|
||||
</div>
|
||||
</article>
|
||||
25
public/templates/test/about/default.tpl
Normal file
25
public/templates/test/about/default.tpl
Normal file
@ -0,0 +1,25 @@
|
||||
<article class="module width_full">
|
||||
<header><h3>About PPLNS Payout system, Facts and myths</h3></header>
|
||||
<div class="module_content">
|
||||
<table width="100%">
|
||||
<tbody>
|
||||
<p>First of all if talking about PPLNS it is important to understand how it works. PPLNS is short for .Pay Per Last N Shares.. The current proportional reward system is round based. One round is the time between the first share after the last found block and the share which solves a block. PPLNS however means that we no longer consider valid shares of one round but we consider a number N of shares. No matter if they are part of the round or not. The number N is currently for each blockchain twice the difficulty (actually rounded down to an easy to calculate integer value).</p>
|
||||
<p>Let me illustrate PPLNS using the image below. One round has an arbitrary number of shares which is solely based on sheer luck. On proportional reward system only shares of one round are considered for calculating rewards. However with PPLNS a quite constant number N of shares is considered for calculating rewards. This number N changes only with the difficulty. Please have a look at the image below:</p>
|
||||
<p style="text-align: center;"><img class="size-full wp-image-150 aligncenter" title="PPLNS share per round" src="{$PATH}/images/shares_round.png" alt="PPLNS share per round" width="450" height="80"></p>
|
||||
<p>As you know the number of shares needed to solve a block within a round is different. Round one and three needed<em> (difficulty * 2)</em> shares to be solved. Round two and four are quite short rounds. There were less than <em>(difficulty * 2)</em> shares nessecary to solve them. Round five however is a very long round which means the pool needed more than <em>(difficulty * 2)</em> shares to solve the block. From this follows that:</p>
|
||||
<ul>
|
||||
<li>Rounds one and three are like proportional rounds. All of your shares from the given round are considered for reward calculations.</li>
|
||||
<li>For rounds two and four shares from the previous rounds are considered for calculations as well (marked green). In other words: regardless of round boundaries we always consider the last <em>(difficulty * 2)</em> shares. Your portion of the amount of shares is used to calculate your reward.</li>
|
||||
<li>Round five however is very long. In this round your lowermost shares (within the marked red part) are silently dropped if they are not within the last <em>(difficulty * 2)</em> shares.</li>
|
||||
</ul>
|
||||
<p><strong>Why do we need to switch the reward system at all?</strong></p>
|
||||
<p>PPLNS favors constant and/or occasional loyal pool members over pool hoppers. As you might have seen each time we find a LTC block the pools hashrate peaks instantly. This is due to pool hoppers starting to mine. They are betting for a .quick win. (like round two above) with low shares per round. If the round exceeds a certain amount of shares they .hop. to another proportional pool which started a new round more recently trying their luck on the other pool. This assures better rewards for pool hoppers over occasional or constant miners which are loyal to their pool. Pool hopping however implies that pool hoppers need to know when a round is started and how much shares are considered for reward. This is very easy with propotional reward system. Using PPLNS this is no longer true. On long rounds (like round five above) the pool hoppers shares won.t be considered for reward calculations in favor of loyal miners. This is due to the fact that pool hoppers only mine on the beginning of rounds. On short and normal rounds pool hoppers won.t loose their shares. But due to the fact that shares from previous rounds from loyal miners are considered twice (or even more often on extremely short rounds) the pool hopper won.t get the same reward as from proportional reward system.</p>
|
||||
<p><strong>I.m only an occasional miner. Will I loose shares if playing/being offline?</strong></p>
|
||||
<p>It depends. Even if you are a constant miner you.ll loose shares on very long rounds. On the other hand if you for example stop mining shortly before the end of round three from the image above you.ll be rewarded for round three. If you then start mining on the mid of round five you.ll be rewarded a bit for round four (despite the fact you haven.t submitted any shares as some of your shares from round three are considered for round four as well) and you.ll be fully rewarded for round five (you won.t loose any shares as you .skipped. the .red part. of shares which have been cut off due to the length of the round). The point however is no one (and thus the pool hopper as well) knows when a round ends in advance. Thus you deliberately can.t avoid cut offs. Sometimes you are lucky sometimes your are not. <em><strong>This however levels out over the time for non-hoppers</strong></em>. The important point is, that you as loyal pool member have an advantage over pool hoppers. Even if you are mining only occasionally in order to enjoy the silence within your mining room.</p>
|
||||
<p><strong>Isn.t it that you as pool operator earn more from PPLNS?</strong></p>
|
||||
<p>Short answer: No. As a pool operator I. In fact for a pool operator it doesn.t matter at all which reward system is used. I expect rounds to become a bit longer after PPLNS is activated as the pool hoppers will start to avoid the Pool. Thus revenues for me will be lower. But there were some loyal pool members who clearly stated that they want to get rid of the pool hoppers and I respect their wish. Furthermore I.m too an occasional miner on the Pool as I don.t want the miners to be running at night and from time to time I need them to test new Pool versions on development systems. Thus being a miner like you I like PPLNS better than proportional. But speaking as pool operator there is no difference between the reward systems.</p>
|
||||
<p>Thanks to g2x3k/Poolx-eu for PPLNS description</p>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</article>
|
||||
31
public/templates/test/about/donors/default.tpl
Normal file
31
public/templates/test/about/donors/default.tpl
Normal file
@ -0,0 +1,31 @@
|
||||
<article class="module width_full">
|
||||
<header><h3>Pool Donors</h3></header>
|
||||
<div class="module_content">
|
||||
<center>
|
||||
{include file="global/pagination.tpl"}
|
||||
<table width="500px">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><u>Name</u></th>
|
||||
<th><u>%</u></th>
|
||||
<th><u>{$GLOBAL.config.currency} Total</u></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<br>
|
||||
<tbody>
|
||||
{section name=donor loop=$DONORS}
|
||||
<tr>
|
||||
<th>{if $DONORS[donor].is_anonymous|default:"0" == 1}anonymous{else}{$DONORS[donor].username}{/if}</th>
|
||||
<th>{$DONORS[donor].donate_percent}</th>
|
||||
<th>{$DONORS[donor].donation|number_format:"2"}</th>
|
||||
</tr>
|
||||
{sectionelse}
|
||||
<tr>
|
||||
<td class="center" colspan="3">No confirmed donations yet, please be patient!</td>
|
||||
</tr>
|
||||
{/section}
|
||||
</tbody>
|
||||
</table>
|
||||
</center>
|
||||
</div>
|
||||
</article>
|
||||
32
public/templates/test/about/pool/default.tpl
Normal file
32
public/templates/test/about/pool/default.tpl
Normal file
@ -0,0 +1,32 @@
|
||||
<article class="module width_full">
|
||||
<header><h3>ThePool Collective</h3></header>
|
||||
<div class="module_content">
|
||||
<table width="100%">
|
||||
<tbody>
|
||||
<p>After mining in other pools I have decided to setup my own pool, mostly for educational reason. I was curious how pools work, what is needed to get them started and what tools can be used to run them.</p>
|
||||
<p>Lots of digging finally revealed that the following tools were required to run a Litecoin pool:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="https://github.com/litecoin-project/litecoin">Litecoin</a></li>
|
||||
<li>1. Provides litecoind, used to synchronize blocks and offer the API the pool connects to</li>
|
||||
<li><a href="https://github.com/ArtForz/pushpool/tree/tenebrix">Pushpool 0.5.1-tenebrix</a>, a modified version of Pushpool supporting changed target difficulties (2^22 in this pool)</li>
|
||||
<li>2. Provides the API each worker (client miner) authenticates and connects to</li>
|
||||
<li><a href="https://github.com/Greedi/mmcFE">mmcFE</a> modified by Greedi & g2x3k with adjustments for this pool (proper hashrate for 2^22 difficulty)</li>
|
||||
<li>3. The Webinterface merging SQL and API information into a cohesive interface for user and worker management</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
The hardest part was finding all the information needed and applying it to a new setup.
|
||||
Many tools exist and even those three took a while to get them to work.
|
||||
Especially the difficulty adjustment would not have been possible (for me) if it wasn't
|
||||
for the pushpool tenebrix branch allowing a custom target bit and reducing difficulty per share.
|
||||
More adjustments in the PHP code were necessary to reflect those changes and, at least
|
||||
close enough, properly display hashrates on the pool site. It is running well right now but
|
||||
please keen in mind that <b>neither the code nor functionaliy are supported</b>.
|
||||
I am not responsible for lost coins due to a pool crash or other malfunctions which
|
||||
could be caused by by code or the tools used in this implementation.
|
||||
</p>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</article>
|
||||
25
public/templates/test/about/pplns/default.tpl
Normal file
25
public/templates/test/about/pplns/default.tpl
Normal file
@ -0,0 +1,25 @@
|
||||
<article class="module width_full">
|
||||
<header><h3>About PPLNS Payout system, Facts and myths</h3></header>
|
||||
<div class="module_content">
|
||||
<table width="100%">
|
||||
<tbody>
|
||||
<p>First of all if talking about PPLNS it is important to understand how it works. PPLNS is short for .Pay Per Last N Shares.. The current proportional reward system is round based. One round is the time between the first share after the last found block and the share which solves a block. PPLNS however means that we no longer consider valid shares of one round but we consider a number N of shares. No matter if they are part of the round or not. The number N is currently for each blockchain twice the difficulty (actually rounded down to an easy to calculate integer value).</p>
|
||||
<p>Let me illustrate PPLNS using the image below. One round has an arbitrary number of shares which is solely based on sheer luck. On proportional reward system only shares of one round are considered for calculating rewards. However with PPLNS a quite constant number N of shares is considered for calculating rewards. This number N changes only with the difficulty. Please have a look at the image below:</p>
|
||||
<p style="text-align: center;"><img class="size-full wp-image-150 aligncenter" title="PPLNS share per round" src="{$PATH}/images/shares_round.png" alt="PPLNS share per round" width="450" height="80"></p>
|
||||
<p>As you know the number of shares needed to solve a block within a round is different. Round one and three needed<em> (difficulty * 2)</em> shares to be solved. Round two and four are quite short rounds. There were less than <em>(difficulty * 2)</em> shares nessecary to solve them. Round five however is a very long round which means the pool needed more than <em>(difficulty * 2)</em> shares to solve the block. From this follows that:</p>
|
||||
<ul>
|
||||
<li>Rounds one and three are like proportional rounds. All of your shares from the given round are considered for reward calculations.</li>
|
||||
<li>For rounds two and four shares from the previous rounds are considered for calculations as well (marked green). In other words: regardless of round boundaries we always consider the last <em>(difficulty * 2)</em> shares. Your portion of the amount of shares is used to calculate your reward.</li>
|
||||
<li>Round five however is very long. In this round your lowermost shares (within the marked red part) are silently dropped if they are not within the last <em>(difficulty * 2)</em> shares.</li>
|
||||
</ul>
|
||||
<p><strong>Why do we need to switch the reward system at all?</strong></p>
|
||||
<p>PPLNS favors constant and/or occasional loyal pool members over pool hoppers. As you might have seen each time we find a LTC block the pools hashrate peaks instantly. This is due to pool hoppers starting to mine. They are betting for a .quick win. (like round two above) with low shares per round. If the round exceeds a certain amount of shares they .hop. to another proportional pool which started a new round more recently trying their luck on the other pool. This assures better rewards for pool hoppers over occasional or constant miners which are loyal to their pool. Pool hopping however implies that pool hoppers need to know when a round is started and how much shares are considered for reward. This is very easy with propotional reward system. Using PPLNS this is no longer true. On long rounds (like round five above) the pool hoppers shares won.t be considered for reward calculations in favor of loyal miners. This is due to the fact that pool hoppers only mine on the beginning of rounds. On short and normal rounds pool hoppers won.t loose their shares. But due to the fact that shares from previous rounds from loyal miners are considered twice (or even more often on extremely short rounds) the pool hopper won.t get the same reward as from proportional reward system.</p>
|
||||
<p><strong>I.m only an occasional miner. Will I loose shares if playing/being offline?</strong></p>
|
||||
<p>It depends. Even if you are a constant miner you.ll loose shares on very long rounds. On the other hand if you for example stop mining shortly before the end of round three from the image above you.ll be rewarded for round three. If you then start mining on the mid of round five you.ll be rewarded a bit for round four (despite the fact you haven.t submitted any shares as some of your shares from round three are considered for round four as well) and you.ll be fully rewarded for round five (you won.t loose any shares as you .skipped. the .red part. of shares which have been cut off due to the length of the round). The point however is no one (and thus the pool hopper as well) knows when a round ends in advance. Thus you deliberately can.t avoid cut offs. Sometimes you are lucky sometimes your are not. <em><strong>This however levels out over the time for non-hoppers</strong></em>. The important point is, that you as loyal pool member have an advantage over pool hoppers. Even if you are mining only occasionally in order to enjoy the silence within your mining room.</p>
|
||||
<p><strong>Isn.t it that you as pool operator earn more from PPLNS?</strong></p>
|
||||
<p>Short answer: No. As a pool operator I. In fact for a pool operator it doesn.t matter at all which reward system is used. I expect rounds to become a bit longer after PPLNS is activated as the pool hoppers will start to avoid the Pool. Thus revenues for me will be lower. But there were some loyal pool members who clearly stated that they want to get rid of the pool hoppers and I respect their wish. Furthermore I.m too an occasional miner on the Pool as I don.t want the miners to be running at night and from time to time I need them to test new Pool versions on development systems. Thus being a miner like you I like PPLNS better than proportional. But speaking as pool operator there is no difference between the reward systems.</p>
|
||||
<p>Thanks to g2x3k/Poolx-eu for PPLNS description</p>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</article>
|
||||
@ -0,0 +1 @@
|
||||
|
||||
29
public/templates/test/contactform/default.tpl
Normal file
29
public/templates/test/contactform/default.tpl
Normal file
@ -0,0 +1,29 @@
|
||||
<article class="module width_3_quarter">
|
||||
<header><h3>Contact Us</h3></header>
|
||||
<div class="module_content">
|
||||
<form action="{$smarty.server.PHP_SELF}" method="post">
|
||||
<input type="hidden" name="page" value="{$smarty.request.page|escape}">
|
||||
<input type="hidden" name="action" value="contactform">
|
||||
<fieldset>
|
||||
<label for="senderName">Your Name:</label>
|
||||
<input type="text" class="text tiny" name="senderName" value="{$smarty.request.senderName|escape|default:""}" placeholder="Please type your name" size="15" maxlength="20" required>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<label for="senderEmail">Your Email Address:</label>
|
||||
<input type="text" class="text tiny" name="senderEmail" value="{$smarty.request.senderEmail|escape|default:""}" placeholder="Please type your email" size="15" maxlength="20" required>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<label for="senderEmail">Your Subject:</label>
|
||||
<input type="text" class="text tiny" name="senderSubject" value="{$smarty.request.senderSubject|escape|default:""}" placeholder="Please type your subject" size="15" maxlength="20" required>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<label for="message">Your Message:</label>
|
||||
<textarea type="text" name="senderMessage" cols="80" rows="10" maxlength="10000" required>{$smarty.request.senderMessage|escape|default:""}</textarea>
|
||||
</fieldset>
|
||||
<center>{nocache}{$RECAPTCHA|default:""}{/nocache}</center>
|
||||
</footer>
|
||||
<br>
|
||||
<center><input type="submit" class="alt_btn" name="sendMessage" value="Send Email" /></center>
|
||||
</form>
|
||||
</div>
|
||||
</article>
|
||||
10
public/templates/test/contactform/disabled.tpl
Normal file
10
public/templates/test/contactform/disabled.tpl
Normal file
@ -0,0 +1,10 @@
|
||||
<article class="module width_full">
|
||||
<header><h3>Contact & Support</h3></header>
|
||||
<div class="module_content">
|
||||
<center>
|
||||
<table width="100%">
|
||||
<p>This product comes 'as-is' without any warranty. Please check the Apache License, Version 2.0, for details.</p>
|
||||
</table>
|
||||
</center>
|
||||
</div>
|
||||
</article>
|
||||
80
public/templates/test/gettingstarted/default.tpl
Normal file
80
public/templates/test/gettingstarted/default.tpl
Normal file
@ -0,0 +1,80 @@
|
||||
<article class="module width_full">
|
||||
<header><h3>GettingStarted</h3></header>
|
||||
<div class="module_content">
|
||||
<table width="100%">
|
||||
<tbody>
|
||||
<p>
|
||||
</p>
|
||||
<li>1. <strong>Create account.</strong>
|
||||
<br>
|
||||
<ul>
|
||||
<li>Register <a href="{$smarty.server.PHP_SELF}?page=register">here</a>, or login if you already have account</li>
|
||||
<li>Create a <a href="{$smarty.server.PHP_SELF}?page=account&action=workers">worker</a> that will be used by the miner to login</li>
|
||||
</ul>
|
||||
|
||||
</li><li>2. <strong>Download a miner.</strong>
|
||||
<ul>
|
||||
<li><em>Windows users:</em> download and unzip:
|
||||
<a href="http://ck.kolivas.org/apps/cgminer/3.2/cgminer-3.2.2-windows.zip">Cgminer-3.2.2-windows.zip</a>.
|
||||
<li><em>Linux users:</em> download and unpack :
|
||||
<a href="http://ck.kolivas.org/apps/cgminer/3.2/cgminer-3.2.2-x86_64.tar.bz2">Cgminer-3.2.2 (64bit)</a>
|
||||
</pre></li>
|
||||
<li><em>Mac OS X users:</em> precompiled binaries are available <a href="https://bitcointalk.org/index.php?topic=55038.msg654850#msg654850">here</a>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>3. <strong>Configure your miner.</strong>
|
||||
<br><br>
|
||||
Settings for Stratum (recommended):
|
||||
</table>
|
||||
</tbody>
|
||||
<br>
|
||||
<table width="100%">
|
||||
<tbody>
|
||||
<tr><td>STRATUM:</td><td><kbd>stratum+tcp://yourdomain.com</kbd></td></tr>
|
||||
<tr><td>PORT:</td><td><kbd>3333</kbd></td></tr>
|
||||
<tr><td>Username:</td><td><kbd><em>Weblogin</em>.<em>Worker</em></kbd></td></tr>
|
||||
<tr><td>Password:</td><td><kbd>Worker Password</kbd></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table width="100%">
|
||||
<tbody>
|
||||
<br>
|
||||
If you use a command-line miner, type:
|
||||
<pre> ./cgminer --scrypt -o stratum+tcp://yourdomain.com:3333 -u <em>Weblogin</em>.<em>Worker</em> -p <em>Worker password</em>
|
||||
</pre>
|
||||
If you want, you can create additional workers with usernames and passwords of your choice <a href="{$smarty.server.PHP_SELF}?page=account&action=workers">Here<br></a><br>
|
||||
</li>
|
||||
<li>4. <strong>Create a Litecoin address to recieve payments.</strong>
|
||||
<ul>
|
||||
<li> Downloading the client & block chain: Download the Litecoin client from the <a href="http://www.litecoin.org/">here</a>.<br>
|
||||
Generate a new address and input it on your account page to receive payments.
|
||||
</li>
|
||||
</li>
|
||||
</tbody>
|
||||
</table>
|
||||
<table width="100%">
|
||||
<tbody>
|
||||
<li>5. <strong>Advanced cgminer settings / FAQ</strong>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="https://github.com/ckolivas/cgminer/blob/master/SCRYPT-README">Scrypt readme</a>
|
||||
</li>
|
||||
<li>
|
||||
Don't set <b>intensity</b> too high, I=11 is standard and safest. Higher intensity takes more GPU RAM. Check for <b>hardware errors</b> in cgminer (HW). HW=0 is good, otherwise lower intensity :)
|
||||
</li>
|
||||
<li>
|
||||
Set shaders according to the readme (or look at your graphic cards specifications). Cgminer uses this value at first run to calculate <b>thread-concurrency</b>.
|
||||
Easiest way to get this optimized is to use same settings as others have used here: <a href="http://litecoin.info/Mining_Hardware_Comparison">here</a>.
|
||||
</li>
|
||||
<li>
|
||||
There's also an interesting project which gives you a GUI for cgminer. Windows only it seems.
|
||||
</li>
|
||||
<li>
|
||||
Here's a great <a href="https://docs.google.com/document/d/1Gw7YPYgMgNNU42skibULbJJUx_suP_CpjSEdSi8_z9U/preview?sle=true">guide</a> how to get up and running with Xubuntu.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</article>
|
||||
@ -24,6 +24,7 @@
|
||||
<li class="icon-doc"><a href="{$smarty.server.PHP_SELF}?page=admin&action=news">News</a></li>
|
||||
</ul>
|
||||
{/if}
|
||||
{if $smarty.session.AUTHENTICATED|default}
|
||||
<h3>Statistics</h3>
|
||||
<ul class="toggle">
|
||||
<li class="icon-align-left"><a href="{$smarty.server.PHP_SELF}?page=statistics&action=pool">Pool</a></li>
|
||||
@ -31,12 +32,41 @@
|
||||
<li class="icon-chart"><a href="{$smarty.server.PHP_SELF}?page=statistics&action=graphs">Graphs</a></li>
|
||||
<li class="icon-chart"><a href="{$smarty.server.PHP_SELF}?page=statistics&action=round">Round</a></li>
|
||||
</ul>
|
||||
{else}
|
||||
<h3>Statistics</h3>
|
||||
<ul class="toggle">
|
||||
{if $GLOBAL.acl.pool.statistics}
|
||||
<li class="icon-align-left"><a href="{$smarty.server.PHP_SELF}?page=statistics&action=pool">Pool</a></li>
|
||||
{else}
|
||||
<li class="icon-align-left"><a href="{$smarty.server.PHP_SELF}?page=statistics">Statistics</a>
|
||||
{/if}
|
||||
{if $GLOBAL.acl.block.statistics}
|
||||
<li class="icon-th-large"><a href="{$smarty.server.PHP_SELF}?page=statistics&action=blocks">Blocks</a></li>
|
||||
{/if}
|
||||
{if $GLOBAL.acl.round.statistics}
|
||||
<li class="icon-chart"><a href="{$smarty.server.PHP_SELF}?page=statistics&action=round">Round</a></li>
|
||||
{/if}
|
||||
</ul>
|
||||
{/if}
|
||||
<h3>Help</h3>
|
||||
<ul class="toggle">
|
||||
<li class="icon-desktop"><a href="{$smarty.server.PHP_SELF}?page=gettingstarted">GettingStarted</a></li>
|
||||
<li class="icon-doc"><a href="{$smarty.server.PHP_SELF}?page=about&action=pool">About</a></li>
|
||||
<li class="icon-bell"><a href="{$smarty.server.PHP_SELF}?page=about&action=pplns">PPLNS</a></li>
|
||||
<li class="icon-wrench"><a href="{$smarty.server.PHP_SELF}?page=about&action=vardiff">VARDIFF</a></li>
|
||||
<li class="icon-money"><a href="{$smarty.server.PHP_SELF}?page=about&action=donors">Donors</a></li>
|
||||
</ul>
|
||||
<h3>Other</h3>
|
||||
<ul class="toggle">
|
||||
{if $smarty.session.AUTHENTICATED|default:"0" == 1}
|
||||
{if !$GLOBAL.config.disable_contactform}
|
||||
<li class="icon-mail"><a href="{$smarty.server.PHP_SELF}?page=contactform">Support</a></li>
|
||||
{/if}
|
||||
<li class="icon-off"><a href="{$smarty.server.PHP_SELF}?page=logout">Logout</a></li>
|
||||
{else}
|
||||
<li class="icon-login"><a href="{$smarty.server.PHP_SELF}?page=login">Login</a></li>
|
||||
<li class="icon-pencil"><a href="{$smarty.server.PHP_SELF}?page=register">Sign Up</a></li>
|
||||
<li class="icon-mail"><a href="{$smarty.server.PHP_SELF}?page=support">Support</a></li>
|
||||
{/if}
|
||||
</ul>
|
||||
|
||||
|
||||
10
public/templates/test/support/default.tpl
Normal file
10
public/templates/test/support/default.tpl
Normal file
@ -0,0 +1,10 @@
|
||||
<article class="module width_full">
|
||||
<header><h3>Contact & Support</h3></header>
|
||||
<div class="module_content">
|
||||
<center>
|
||||
<table width="100%">
|
||||
<p>This product comes 'as-is' without any warranty. Please check the Apache License, Version 2.0, for details.</p>
|
||||
</table>
|
||||
</center>
|
||||
</div>
|
||||
</article>
|
||||
Loading…
Reference in New Issue
Block a user