AJAX form submission and bug in register process
This commit is contained in:
parent
69c0dd651b
commit
cc5010abd4
10 changed files with 385 additions and 93 deletions
|
@ -203,7 +203,7 @@ class Users {
|
|||
return [0, 'INVALID_MX'];
|
||||
|
||||
// Set a few variables
|
||||
$usernameClean = Main::cleanString($username);
|
||||
$usernameClean = Main::cleanString($username, true);
|
||||
$password = Hashing::create_hash($password);
|
||||
$requireActive = Configuration::getConfig('require_activation');
|
||||
$userRank = $requireActive ? [0] : [1];
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
namespace Sakura;
|
||||
|
||||
// Define Sakura version
|
||||
define('SAKURA_VERSION', '20150417');
|
||||
define('SAKURA_VERSION', '20150420');
|
||||
|
||||
// Define Sakura Path
|
||||
define('ROOT', str_replace(basename(__DIR__), '', dirname(__FILE__)));
|
||||
|
@ -57,11 +57,17 @@ $renderData = array(
|
|||
'charset' => Configuration::getConfig('charset'),
|
||||
'currentpage' => '//'. $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'],
|
||||
'recaptcha_public' => Configuration::getConfig('recaptcha_public'),
|
||||
'resources' => '//'. Configuration::getLocalConfig('urls')['content'] .'/data/'. strtolower(Templates::$_TPL)
|
||||
'recaptcha_enable' => Configuration::getConfig('recaptcha'),
|
||||
'resources' => '//'. Configuration::getLocalConfig('urls')['content'] .'/data/'. strtolower(Templates::$_TPL),
|
||||
'disableregister' => Configuration::getConfig('disable_registration'),
|
||||
'requireregcodes' => Configuration::getConfig('require_registration_code'),
|
||||
'requireactiveate' => Configuration::getConfig('require_activation'),
|
||||
'sitename' => Configuration::getConfig('sitename')
|
||||
],
|
||||
'php' => [
|
||||
'sessionid' => \session_id(),
|
||||
'time' => \time()
|
||||
'time' => \time(),
|
||||
'self' => $_SERVER['PHP_SELF']
|
||||
],
|
||||
'user' => [
|
||||
'checklogin' => Users::checkLogin(),
|
||||
|
|
|
@ -12,5 +12,5 @@
|
|||
</div>
|
||||
<div class="clear"></div>
|
||||
<div class="news-post-time">
|
||||
Posted on {{ newsPost.date|date("D Y-m-d H:i:s T") }} <a class="default" href="/news/{{ newsPost.id }}#disqus_thread">View comments</a>
|
||||
Posted on {{ newsPost.date|date("D Y-m-d H:i:s T") }}{% if page.articleCount > 1 %} <a class="default" href="/news/{{ newsPost.id }}#disqus_thread">View comments</a>{% endif %}
|
||||
</div>
|
||||
|
|
|
@ -11,19 +11,27 @@
|
|||
<meta http-equiv="refresh" content="3; URL={{ page.redirect }}" />
|
||||
{% endif %}
|
||||
<!-- CSS -->
|
||||
<link rel="stylesheet" type="text/css" href="//{{ sakura.urls.content }}/global.css" />
|
||||
<link rel="stylesheet" type="text/css" href="{{ sakura.resources }}/css/yuuno.css" />
|
||||
<link rel="stylesheet" type="text/css" href="//{{ sakura.urls.content }}/global.css?s={{ php.time }}" />
|
||||
<link rel="stylesheet" type="text/css" href="{{ sakura.resources }}/css/yuuno.css?s={{ php.time }}" />
|
||||
<link rel="stylesheet" type="text/css" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" />
|
||||
<!-- JS -->
|
||||
<script type="text/javascript" src="{{ sakura.resources }}/js/yuuno.js"></script>
|
||||
<script type="text/javascript" src="{{ sakura.resources }}/js/yuuno.js?s={{ php.time }}"></script>
|
||||
<script type="text/javascript">
|
||||
{% if not user.checklogin %}
|
||||
|
||||
// Setting the shit so clicking the login link doesn't redirect to /login
|
||||
function initLoginForm() {
|
||||
function initHeaderLoginForm() {
|
||||
|
||||
var headerLoginForm = document.getElementById('headerLoginForm');
|
||||
var headerLoginLink = document.getElementById('headerLoginLink');
|
||||
var createInput = document.createElement('input');
|
||||
|
||||
headerLoginLink.setAttribute('href', 'javascript:;');
|
||||
createInput.setAttribute('name', 'ajax');
|
||||
createInput.setAttribute('value', 'true');
|
||||
createInput.setAttribute('type', 'hidden');
|
||||
headerLoginForm.appendChild(createInput);
|
||||
|
||||
headerLoginLink.setAttribute('href', 'javascript:void(0);');
|
||||
headerLoginLink.setAttribute('onclick', 'toggleLoginForm();');
|
||||
|
||||
}
|
||||
|
@ -37,16 +45,71 @@
|
|||
|
||||
}
|
||||
|
||||
// Execute initLoginForm() on load
|
||||
window.onload = function(){initLoginForm();};
|
||||
{% else %}
|
||||
|
||||
// Prepare header logout stuff
|
||||
function initHeaderLoginForm() {
|
||||
|
||||
var headerLogoutLink = document.getElementById('headerLogoutLink');
|
||||
|
||||
headerLogoutLink.setAttribute('href', 'javascript:void(0);');
|
||||
headerLogoutLink.setAttribute('onclick', 'doHeaderLogout();');
|
||||
|
||||
}
|
||||
|
||||
function doHeaderLogout() {
|
||||
|
||||
generateForm("headerLogoutForm", {"class":"hidden","method":"post","action":"//{{ sakura.urls.main }}/logout"},{"mode":"logout","ajax":"true","time":"{{ php.time }}","session":"{{ php.sessionid }}","redirect":"{{ sakura.currentpage }}"},"contentwrapper");
|
||||
|
||||
setTimeout(function(){
|
||||
submitPost("headerLogoutForm", true, "Logging out...")
|
||||
}, 10);
|
||||
|
||||
}
|
||||
|
||||
{% endif %}
|
||||
// Space for things that need to happen onload
|
||||
window.onload = function() {
|
||||
|
||||
// Login form under header and ajax logout
|
||||
initHeaderLoginForm();
|
||||
|
||||
{% if php.self == '/authenticate.php' %}
|
||||
// AJAX Form Submission
|
||||
var forms = {
|
||||
"loginForm": 'Logging in...',
|
||||
{% if not sakura.disableregister %}"registerForm": 'Processing registration...',{% endif %}
|
||||
{% if not sakura.requireactive %}"resendForm": 'Attempting to resend activation...',{% endif %}
|
||||
"passwordForm": 'Sending password recovery mail...'
|
||||
};
|
||||
|
||||
for(var i in forms) {
|
||||
var form = document.getElementById(i);
|
||||
var submit = form.querySelector('[type="submit"]');
|
||||
|
||||
// TODO: Make hitting the enter key submit forms
|
||||
//form.setAttribute('onkeypress', '');
|
||||
|
||||
submit.setAttribute('href', 'javascript:void(0);');
|
||||
submit.setAttribute('onclick', 'submitPost(\''+ i +'\', true, \''+ forms[i] +'\');');
|
||||
submit.setAttribute('type', 'button');
|
||||
|
||||
var createInput = document.createElement('input');
|
||||
createInput.setAttribute('name', 'ajax');
|
||||
createInput.setAttribute('value', 'true');
|
||||
createInput.setAttribute('type', 'hidden');
|
||||
form.appendChild(createInput);
|
||||
}
|
||||
{% endif %}
|
||||
|
||||
};
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="container">
|
||||
<span id="top"></span>
|
||||
<div class="header" id="header">
|
||||
<a class="logo" href="/"></a>
|
||||
<a class="logo" href="/">{{ sakura.sitename }}</a>
|
||||
<div class="menu">
|
||||
<div class="menu-nav" id="navMenuSite">
|
||||
<!-- Navigation menu, displayed on left side of the bar. -->
|
||||
|
@ -63,7 +126,7 @@
|
|||
{% if user.checklogin %}
|
||||
<a class="menu-item avatar" href="//{{ sakura.urls.main }}/u/{{ user.data.id }}" title="View and edit your own profile" style="background-image: url('//{{ sakura.urls.main }}/a/{{ user.data.id }}'); width: auto; color: {{ user.rank.colour }}; font-weight: 700;">{{ user.data.username }}</a>
|
||||
<a class="menu-item" href="//{{ sakura.urls.main }}/settings" title="Change your settings">Settings</a>
|
||||
<a class="menu-item" href="//{{ sakura.urls.main }}/logout?mode=logout&time={{ php.time }}&session={{ php.sessionid }}&redirect={{ sakura.currentpage }}" title="End your login session">Logout</a>
|
||||
<a class="menu-item" href="//{{ sakura.urls.main }}/logout?mode=logout&time={{ php.time }}&session={{ php.sessionid }}&redirect={{ sakura.currentpage }}" title="End your login session" id="headerLogoutLink">Logout</a>
|
||||
{% else %}
|
||||
<a class="menu-item" id="headerLoginLink" href="//{{ sakura.urls.main }}/login" title="Login to Flashii">Login</a>
|
||||
<a class="menu-item" href="//{{ sakura.urls.main }}/register" title="Create an account">Register</a>
|
||||
|
@ -77,8 +140,7 @@
|
|||
</div>
|
||||
<div id="contentwrapper">
|
||||
{% if not user.checklogin %}
|
||||
<div class="hidden" id="headerLoginForm">
|
||||
<form method="post" action="/authenticate">
|
||||
<form method="post" action="/authenticate" class="hidden" id="headerLoginForm">
|
||||
<input type="hidden" name="redirect" value="{{ sakura.currentpage }}" />
|
||||
<input type="hidden" name="session" value="{{ php.sessionid }}" />
|
||||
<input type="hidden" name="time" value="{{ php.time }}" />
|
||||
|
@ -86,10 +148,9 @@
|
|||
<label for="headerLoginUserName">Username:</label>
|
||||
<input type="text" id="headerLoginUserName" name="username" class="inputStyling" placeholder="Username" />
|
||||
<label for="headerLoginPassword">Password:</label>
|
||||
<input type="password" id="headerLoginPassword" name="password" class="inputStyling" placeholder="Password" />
|
||||
<input type="password" id="headerLoginPassword" name="password" class="inputStyling" placeholder="Password" />
|
||||
<input type="checkbox" name="remember" id="headerLoginRemember" />
|
||||
<label for="headerLoginRemember">Remember me</label>
|
||||
<input type="submit" id="headerLoginButton" name="submit" class="inputStyling small" value="Login" />
|
||||
<label for="headerLoginRemember">Remember me</label>
|
||||
<input type="button" onclick="submitPost(this.parentNode.id, true, 'Logging in...');" id="headerLoginButton" name="submit" class="inputStyling small" value="Login" />
|
||||
</form>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
|
|
@ -4,9 +4,9 @@
|
|||
<div class="loginCont">
|
||||
<div class="loginForm">
|
||||
<div class="head">
|
||||
Login to Flashii
|
||||
Login to {{ sakura.sitename }}
|
||||
</div>
|
||||
<form method="post" action="http://{{ sakura.urls.main }}/authenticate">
|
||||
<form method="post" action="//{{ sakura.urls.main }}/authenticate" id="loginForm">
|
||||
<input type="hidden" name="redirect" value="{{ auth.redirect }}" />
|
||||
<input type="hidden" name="session" value="{{ php.sessionid }}" />
|
||||
<input type="hidden" name="time" value="{{ php.time }}" />
|
||||
|
@ -35,7 +35,7 @@
|
|||
<div class="head">
|
||||
Lost Password
|
||||
</div>
|
||||
<form method="post" action="http://{{ sakura.urls.main }}/authenticate">
|
||||
<form method="post" action="//{{ sakura.urls.main }}/authenticate" id="passwordForm">
|
||||
<input type="hidden" name="mode" value="forgotpassword" />
|
||||
<input type="hidden" name="session" value="{{ php.sessionid }}" />
|
||||
<input type="hidden" name="time" value="{{ php.time }}" />
|
||||
|
@ -63,9 +63,10 @@
|
|||
<div class="registerCont">
|
||||
<div class="registerForm">
|
||||
<div class="head">
|
||||
Register on Flashii
|
||||
Register on {{ sakura.sitename }}
|
||||
</div>
|
||||
<form id="registerForm" method="post" action="http://{{ sakura.urls.main }}/authenticate" style="display:{% if auth.blockRegister.do %}none{% else %}block{% endif %};">
|
||||
{% if not sakura.disableregister %}
|
||||
<form id="registerForm" method="post" action="//{{ sakura.urls.main }}/authenticate" style="display:{% if auth.blockRegister.do %}none{% else %}block{% endif %};">
|
||||
<input type="hidden" name="mode" value="register" />
|
||||
<input type="hidden" name="session" value="{{ php.sessionid }}" />
|
||||
<input type="hidden" name="time" value="{{ php.time }}" />
|
||||
|
@ -93,6 +94,15 @@
|
|||
<div class="centreAlign">
|
||||
<input class="inputStyling" type="password" id="registerConfirmPassword" name="confirmpassword" placeholder="Just to make sure" />
|
||||
</div>
|
||||
{% if sakura.requireregcodes %}
|
||||
<div class="leftAlign">
|
||||
<label for="registerCode">Registration Code:</label>
|
||||
</div>
|
||||
<div class="centreAlign">
|
||||
<input class="inputStyling" type="text" id="registerCode" name="registercode" placeholder="Ask another member for one" />
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if sakura.recaptcha_enable %}
|
||||
<div class="leftAlign">
|
||||
<label for="recaptcha_response_field">Verification:</label>
|
||||
</div>
|
||||
|
@ -112,6 +122,7 @@
|
|||
</div>
|
||||
</noscript>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="subLinks centreAlign">
|
||||
<input class="inputStyling" name="tos" type="checkbox" class="ignore-css" id="registerToS" /><label for="registerToS">I agree to the <a class="default" href="/r/terms" target="_blank">Terms of Service</a>.
|
||||
</div>
|
||||
|
@ -133,12 +144,22 @@
|
|||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<div class="registerForm" id="registerWarn" style="display: block;">
|
||||
<div class="centreAlign">
|
||||
<div class="fa fa-remove fa-5x" style="display: block; margin: 10px 0 0;"></div>
|
||||
<h1>Registration is disabled.</h1>
|
||||
<p>Please try again later.</p>
|
||||
</div>
|
||||
<div class="passwordForm">
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% if not sakura.requireactive %}
|
||||
<div class="resendForm">
|
||||
<div class="head">
|
||||
Resend Activation E-mail
|
||||
</div>
|
||||
<form method="post" action="http://{{ sakura.urls.main }}/authenticate">
|
||||
<form method="post" action="//{{ sakura.urls.main }}/authenticate" id="resendForm">
|
||||
<input type="hidden" name="mode" value="resendactivemail" />
|
||||
<input type="hidden" name="session" value="{{ php.sessionid }}" />
|
||||
<input type="hidden" name="time" value="{{ php.time }}" />
|
||||
|
@ -162,6 +183,7 @@
|
|||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
</div>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<script type="text/javascript" src="//{{ sakura.urls.content }}/js/ybabstat.js"></script>
|
||||
<script type="text/javascript" src="{{ sakura.resources }}/js/ybabstat.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
|
||||
var disqus_shortname = 'flashii';
|
||||
|
|
|
@ -31,24 +31,27 @@ body {
|
|||
#contentwrapper {
|
||||
padding-bottom: 220px;
|
||||
}
|
||||
@media (max-width: 1033px) {
|
||||
@media (max-width: 642px) {
|
||||
#contentwrapper {
|
||||
padding-bottom: 230px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 860px) {
|
||||
#contentwrapper {
|
||||
padding-bottom: 375px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 510px) {
|
||||
#contentwrapper {
|
||||
padding-bottom: 380px;
|
||||
padding-bottom: 335px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 426px) {
|
||||
#contentwrapper {
|
||||
padding-bottom: 625px;
|
||||
padding-bottom: 450px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 400px) {
|
||||
#contentwrapper {
|
||||
padding-bottom: 450px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 300px) {
|
||||
.footer {
|
||||
display: none;
|
||||
}
|
||||
#contentwrapper {
|
||||
padding-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -205,9 +208,6 @@ a.gotop:active {
|
|||
color: #B06AC4;
|
||||
transition: color .2s, text-shadow .2s;
|
||||
}
|
||||
.header .logo:after {
|
||||
content: "Flashii Dev";
|
||||
}
|
||||
.header .logo:hover {
|
||||
color: #C17BD5;
|
||||
text-shadow: 0 0 .1em #C17BD5;
|
||||
|
@ -217,15 +217,6 @@ a.gotop:active {
|
|||
text-shadow: 0 0 .1em #A059B3;
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
/*.header .logo {
|
||||
background: none;
|
||||
height: auto;
|
||||
width: auto;
|
||||
display: inline-block;
|
||||
text-decoration: none;
|
||||
font: 50px/60px "Segoe UI Light", sans-serif;
|
||||
color: #B06AC4;
|
||||
}*/
|
||||
.header .logo {
|
||||
font: 100 50px/60px "Segoe UI", sans-serif;
|
||||
}
|
||||
|
@ -396,6 +387,33 @@ a.gotop:active {
|
|||
border-top: 1px solid #C2AEEE;
|
||||
}
|
||||
|
||||
/* AJAX Busy thing */
|
||||
.ajax-busy {
|
||||
background: rgba(0, 0, 0, .4);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
z-index: 5;
|
||||
text-align: center;
|
||||
opacity: 1;
|
||||
}
|
||||
.ajax-busy .ajax-inner {
|
||||
line-height: 2em;
|
||||
color: #FFF;
|
||||
background: #222;
|
||||
background: linear-gradient(0deg, rgba(0, 0, 0, .4) 20%, transparent) rgba(0, 0, 0, .8);
|
||||
display: inline-block;
|
||||
margin: 10% auto 0;
|
||||
padding: 10px 20px 15px;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 5px 1em #111;
|
||||
}
|
||||
.ajax-busy .ajax-inner h2 {
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
|
||||
/* Markdown Section */
|
||||
.markdown {
|
||||
font: 12px/1.4 "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif;
|
||||
|
|
|
@ -146,18 +146,185 @@ function donatePage(id) {
|
|||
return;
|
||||
}
|
||||
|
||||
var RecaptchaOptions = {
|
||||
theme : 'custom',
|
||||
custom_theme_widget: 'recaptcha_widget'
|
||||
};
|
||||
function removeClass(className) {
|
||||
var objectCont = document.getElementsByClassName(className);
|
||||
|
||||
while(objectCont.length > 0)
|
||||
objectCont[0].parentNode.removeChild(objectCont[0]);
|
||||
}
|
||||
|
||||
function removeId(id) {
|
||||
var objectCont = document.getElementById(id);
|
||||
|
||||
if(typeof(objectCont) != "undefined" && objectCont !== null)
|
||||
objectCont.parentNode.removeChild(objectCont);
|
||||
}
|
||||
|
||||
function ajaxBusyView(show, message, type) {
|
||||
var busyCont = document.getElementById('ajaxBusy');
|
||||
var busyStat = document.getElementById('ajaxStatus');
|
||||
var busyAnim = document.getElementById('ajaxAnimate');
|
||||
var pageContent = document.getElementById('contentwrapper');
|
||||
|
||||
switch(type) {
|
||||
|
||||
default:
|
||||
case 'busy':
|
||||
var busyAnimIco = 'fa fa-refresh fa-spin fa-4x';
|
||||
break;
|
||||
case 'ok':
|
||||
var busyAnimIco = 'fa fa-check fa-4x';
|
||||
break;
|
||||
case 'fail':
|
||||
var busyAnimIco = 'fa fa-remove fa-4x';
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
if(show) {
|
||||
if(busyCont == null) {
|
||||
var createBusyCont = document.createElement('div');
|
||||
createBusyCont.className = 'ajax-busy';
|
||||
createBusyCont.setAttribute('id', 'ajaxBusy');
|
||||
|
||||
var createBusyInner = document.createElement('div');
|
||||
createBusyInner.className = 'ajax-inner';
|
||||
createBusyCont.appendChild(createBusyInner);
|
||||
|
||||
var createBusyMsg = document.createElement('h2');
|
||||
createBusyMsg.setAttribute('id', 'ajaxStatus');
|
||||
createBusyInner.appendChild(createBusyMsg);
|
||||
|
||||
var createBusySpin = document.createElement('div');
|
||||
createBusySpin.setAttribute('id', 'ajaxAnimate');
|
||||
createBusyInner.appendChild(createBusySpin);
|
||||
|
||||
pageContent.appendChild(createBusyCont);
|
||||
|
||||
busyCont = document.getElementById('ajaxBusy');
|
||||
busyStat = document.getElementById('ajaxStatus');
|
||||
busyAnim = document.getElementById('ajaxAnimate');
|
||||
}
|
||||
|
||||
busyAnim.className = busyAnimIco;
|
||||
|
||||
if(message == null)
|
||||
busyStat.innerHTML = 'Please wait';
|
||||
else
|
||||
busyStat.innerHTML = message;
|
||||
} else {
|
||||
if(busyCont != null) {
|
||||
var fadeOut = setInterval(function() {
|
||||
if(busyCont.style.opacity == null || busyCont.style.opacity == "")
|
||||
busyCont.style.opacity = 1;
|
||||
|
||||
if(busyCont.style.opacity > 0) {
|
||||
busyCont.style.opacity = busyCont.style.opacity - .1;
|
||||
} else {
|
||||
removeId('ajaxBusy');
|
||||
clearInterval(fadeOut);
|
||||
}
|
||||
}, 10);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function ajaxPost(url, data) {
|
||||
var req = new XMLHttpRequest();
|
||||
req.open("POST", url, false);
|
||||
req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
|
||||
|
||||
var query = [];
|
||||
for(var i in data)
|
||||
query.push(encodeURIComponent(i) +"="+ encodeURIComponent(data[i]));
|
||||
|
||||
req.send(query.join("&"));
|
||||
|
||||
if(req.status === 200)
|
||||
return req.responseText;
|
||||
else
|
||||
return "";
|
||||
}
|
||||
|
||||
// Quickly building a form for god knows what reason
|
||||
function generateForm(formId, formAttr, formData, appendTo) {
|
||||
|
||||
// Create form elements and assign ID
|
||||
var form = document.createElement('form');
|
||||
form.setAttribute('id', formId);
|
||||
|
||||
// Set additional attributes
|
||||
if(formAttr != null) {
|
||||
for(var i in formAttr)
|
||||
form.setAttribute(i, formAttr[i]);
|
||||
}
|
||||
|
||||
// Generate input elements
|
||||
for(var i in formData) {
|
||||
var disposableVar = document.createElement('input');
|
||||
disposableVar.setAttribute('type', 'hidden');
|
||||
disposableVar.setAttribute('name', i);
|
||||
disposableVar.setAttribute('value', formData[i]);
|
||||
form.appendChild(disposableVar);
|
||||
}
|
||||
|
||||
// Append to another element if requested
|
||||
if(appendTo != null)
|
||||
document.getElementById(appendTo).appendChild(form);
|
||||
|
||||
// Return the completed form
|
||||
return form;
|
||||
|
||||
}
|
||||
|
||||
// Submitting a form using an AJAX POST request
|
||||
function submitPost(formId, busyView, msg) {
|
||||
|
||||
// If requested display the busy thing
|
||||
if(busyView)
|
||||
ajaxBusyView(true, msg, 'busy');
|
||||
|
||||
// Get form data
|
||||
var form = document.getElementById(formId);
|
||||
|
||||
// Make sure the form id was proper and if not report an error
|
||||
if(form == null) {
|
||||
if(busyView) {
|
||||
ajaxBusyView(true, 'Invalid Form ID, contact the administrator.');
|
||||
setTimeout(function(){ajaxBusyView(false);}, 2000);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Make an object for the request parts
|
||||
var requestParts = new Object();
|
||||
|
||||
// Get all children with a name attribute
|
||||
var children = form.querySelectorAll('[name]');
|
||||
|
||||
// Sort children and make them ready for submission
|
||||
for(var i in children) {
|
||||
|
||||
if(typeof children[i] == 'object')
|
||||
requestParts[children[i].name] = ((typeof children[i].type !== "undefined" && children[i].type.toLowerCase() == "checkbox") ? children[i].checked : children[i].value);
|
||||
|
||||
}
|
||||
|
||||
// Submit the AJAX request
|
||||
var request = ajaxPost(form.action, requestParts).split('|');
|
||||
|
||||
// If using the busy view thing update the text displayed to the return of the request
|
||||
if(busyView)
|
||||
ajaxBusyView(true, request[1], (request[2] == '1' ? 'ok' : 'fail'));
|
||||
|
||||
setTimeout(function(){
|
||||
if(busyView)
|
||||
ajaxBusyView(false);
|
||||
|
||||
if(request[2] == '1')
|
||||
window.location = request[3];
|
||||
}, 2000);
|
||||
|
||||
return;
|
||||
|
||||
function switch_text(type) {
|
||||
var responseField = document.getElementById('recaptcha_response_field');
|
||||
|
||||
if(type == "audio")
|
||||
responseField.setAttribute('placeholder', 'Enter the words you hear');
|
||||
else if(type == "image")
|
||||
responseField.setAttribute('placeholder', 'Enter the words above');
|
||||
else
|
||||
responseField.setAttribute('placeholder', 'undefined rolls undefined and gets undefined');
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ RewriteRule ^credits?/?$ credits.php
|
|||
RewriteRule ^index?/?$ index.php
|
||||
RewriteRule ^login?/?$|logout?/?$|activate?/?$|register?/?$|forgotpassword?/?|authenticate?/?$ authenticate.php
|
||||
RewriteRule ^donate?/?$ donate.php
|
||||
RewriteRule ^contact?/?$ contact.php
|
||||
RewriteRule ^contact?/?$ infopage.php?r=contact
|
||||
|
||||
## Info pages
|
||||
RewriteRule ^r/([a-z]+)$ infopage.php?r=$1
|
||||
|
|
|
@ -10,9 +10,7 @@ namespace Sakura;
|
|||
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) .'_sakura/sakura.php';
|
||||
|
||||
// Page actions
|
||||
if(
|
||||
isset($_REQUEST['mode'])
|
||||
) {
|
||||
if(isset($_REQUEST['mode'])) {
|
||||
|
||||
// Continue
|
||||
$continue = true;
|
||||
|
@ -21,12 +19,13 @@ if(
|
|||
if(!isset($_REQUEST['mode']) || $_REQUEST['mode'] != 'activate') {
|
||||
|
||||
// Compare time and session so we know the link isn't forged
|
||||
if($_REQUEST['time'] < time() - 1000) {
|
||||
if(!isset($_REQUEST['time']) || $_REQUEST['time'] < time() - 1000) {
|
||||
|
||||
$renderData['page'] = [
|
||||
'title' => 'Action failed',
|
||||
'redirect' => '/authenticate',
|
||||
'message' => 'Timestamps differ too much, please try again.'
|
||||
'message' => 'Timestamps differ too much, please try again.',
|
||||
'success' => 0
|
||||
];
|
||||
|
||||
// Prevent
|
||||
|
@ -40,7 +39,8 @@ if(
|
|||
$renderData['page'] = [
|
||||
'title' => 'Action failed',
|
||||
'redirect' => '/authenticate',
|
||||
'message' => 'Session IDs do not match.'
|
||||
'message' => 'Session IDs do not match.',
|
||||
'success' => 0
|
||||
];
|
||||
|
||||
// Prevent
|
||||
|
@ -70,7 +70,8 @@ if(
|
|||
$renderData['page'] = [
|
||||
'title' => 'Logout',
|
||||
'redirect' => ($logout ? $_REQUEST['redirect'] : '/authenticate'),
|
||||
'message' => $logout ? 'You are now logged out.' : 'Logout failed.'
|
||||
'message' => $logout ? 'You are now logged out.' : 'Logout failed.',
|
||||
'success' => $logout ? 1 : 0
|
||||
];
|
||||
|
||||
break;
|
||||
|
@ -94,7 +95,8 @@ if(
|
|||
$renderData['page'] = [
|
||||
'title' => 'Activate account',
|
||||
'redirect' => '/authenticate',
|
||||
'message' => $messages[$activate[1]]
|
||||
'message' => $messages[$activate[1]],
|
||||
'success' => $activate[0]
|
||||
];
|
||||
|
||||
break;
|
||||
|
@ -102,6 +104,17 @@ if(
|
|||
// Resending the activation e-mail
|
||||
case 'resendactivemail':
|
||||
|
||||
// Attempt send
|
||||
//Users::resendActivationMail($_REQUEST['username'], $_REQUEST['email']);
|
||||
|
||||
// Add page specific things
|
||||
$renderData['page'] = [
|
||||
'title' => 'Resend Activation',
|
||||
'redirect' => '/authenticate',
|
||||
'message' => $messages[$resend[1]],
|
||||
'success' => $resend[0]
|
||||
];
|
||||
|
||||
break;
|
||||
|
||||
// Login processing
|
||||
|
@ -124,7 +137,8 @@ if(
|
|||
$renderData['page'] = [
|
||||
'title' => 'Login',
|
||||
'redirect' => ($login[0] ? $_REQUEST['redirect'] : '/authenticate'),
|
||||
'message' => $messages[$login[1]]
|
||||
'message' => $messages[$login[1]],
|
||||
'success' => $login[0]
|
||||
];
|
||||
|
||||
break;
|
||||
|
@ -171,9 +185,10 @@ if(
|
|||
|
||||
// Add page specific things
|
||||
$renderData['page'] = [
|
||||
'title' => 'Register on Flashii',
|
||||
'title' => 'Register',
|
||||
'redirect' => ($register[0] ? '/' : '/authenticate'),
|
||||
'message' => $messages[$register[1]]
|
||||
'message' => $messages[$register[1]],
|
||||
'success' => $register[0]
|
||||
];
|
||||
|
||||
break;
|
||||
|
@ -185,7 +200,8 @@ if(
|
|||
$renderData['page'] = [
|
||||
'title' => 'Forgot Password',
|
||||
'redirect' => $_SERVER['PHP_SELF'],
|
||||
'message' => 'what'
|
||||
'message' => 'what',
|
||||
'success' => 0
|
||||
];
|
||||
|
||||
break;
|
||||
|
@ -197,9 +213,11 @@ if(
|
|||
print isset($_REQUEST['ajax']) ?
|
||||
(
|
||||
$renderData['page']['title']
|
||||
. ':'
|
||||
. '|'
|
||||
. $renderData['page']['message']
|
||||
. ':'
|
||||
. '|'
|
||||
. $renderData['page']['success']
|
||||
. '|'
|
||||
. $renderData['page']['redirect']
|
||||
) :
|
||||
Templates::render('errors/information.tpl', $renderData);
|
||||
|
@ -218,7 +236,7 @@ $renderData['auth'] = [
|
|||
(
|
||||
isset($_SERVER['HTTP_REFERER']) ?
|
||||
$_SERVER['HTTP_REFERER'] :
|
||||
Configuration::getLocalConfig('urls', 'main')
|
||||
'/'
|
||||
)
|
||||
),
|
||||
'blockRegister' => [
|
||||
|
|
Reference in a new issue