Merge branch 'master' of mojotrollz.eu:system
This commit is contained in:
commit
5d352a2cab
@ -1,6 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
//include autoloadclass
|
||||||
//includ autoloadclass
|
|
||||||
require_once dirname(__FILE__).'/system/path.php';
|
require_once dirname(__FILE__).'/system/path.php';
|
||||||
require_once dirname(__FILE__).'/system/autoload.php';
|
require_once dirname(__FILE__).'/system/autoload.php';
|
||||||
|
|
||||||
@ -13,4 +12,27 @@ function __autoload_system($class_name) {
|
|||||||
spl_autoload_register('__autoload_system');
|
spl_autoload_register('__autoload_system');
|
||||||
|
|
||||||
//Register system classes
|
//Register system classes
|
||||||
require_once dirname(__FILE__).'/system/register_system_autoload_classes.php';
|
$autoload = \SYSTEM\autoload::getInstance();
|
||||||
|
$autoload->registerFolder(dirname(__FILE__).'/system','SYSTEM');
|
||||||
|
|
||||||
|
$autoload->registerFolder(dirname(__FILE__).'/log/result','SYSTEM\LOG');
|
||||||
|
$autoload->registerFolder(dirname(__FILE__).'/log','SYSTEM\LOG');
|
||||||
|
$autoload->registerFolder(dirname(__FILE__).'/log/exceptions','SYSTEM\LOG');
|
||||||
|
$autoload->registerFolder(dirname(__FILE__).'/log/error_handler','SYSTEM\LOG');
|
||||||
|
|
||||||
|
$autoload->registerFolder(dirname(__FILE__).'/api','SYSTEM\API');
|
||||||
|
$autoload->registerFolder(dirname(__FILE__).'/page','SYSTEM\PAGE');
|
||||||
|
|
||||||
|
$autoload->registerFolder(dirname(__FILE__).'/dbd/tbl/','SYSTEM\DBD');
|
||||||
|
$autoload->registerFolder(dirname(__FILE__).'/db','SYSTEM\DB');
|
||||||
|
$autoload->registerFolder(dirname(__FILE__).'/db/dbinfo','SYSTEM\DB');
|
||||||
|
$autoload->registerFolder(dirname(__FILE__).'/db/connection','SYSTEM\DB');
|
||||||
|
$autoload->registerFolder(dirname(__FILE__).'/db/result','SYSTEM\DB');
|
||||||
|
|
||||||
|
$autoload->registerFolder(dirname(__FILE__).'/security','SYSTEM\SECURITY');
|
||||||
|
|
||||||
|
$autoload->registerFolder(dirname(__FILE__).'/config','SYSTEM\CONFIG');
|
||||||
|
|
||||||
|
$autoload->registerFolder(dirname(__FILE__).'/cache','SYSTEM\CACHE');
|
||||||
|
|
||||||
|
$autoload->registerFolder(dirname(__FILE__).'/sai','SYSTEM\SAI');
|
||||||
@ -23,4 +23,6 @@ class config_ids {
|
|||||||
|
|
||||||
const SYS_SAI_CONFIG_BASEURL = 50;
|
const SYS_SAI_CONFIG_BASEURL = 50;
|
||||||
const SYS_SAI_CONFIG_NAVIMG = 51;
|
const SYS_SAI_CONFIG_NAVIMG = 51;
|
||||||
|
const SYS_SAI_CONFIG_TITLE = 52;
|
||||||
|
const SYS_SAI_CONFIG_COPYRIGHT = 53;
|
||||||
}
|
}
|
||||||
269
sai/js/crypto/jquery.md5.js
Normal file
269
sai/js/crypto/jquery.md5.js
Normal file
@ -0,0 +1,269 @@
|
|||||||
|
/*
|
||||||
|
* jQuery MD5 Plugin 1.2.1
|
||||||
|
* https://github.com/blueimp/jQuery-MD5
|
||||||
|
*
|
||||||
|
* Copyright 2010, Sebastian Tschan
|
||||||
|
* https://blueimp.net
|
||||||
|
*
|
||||||
|
* Licensed under the MIT license:
|
||||||
|
* http://creativecommons.org/licenses/MIT/
|
||||||
|
*
|
||||||
|
* Based on
|
||||||
|
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
|
||||||
|
* Digest Algorithm, as defined in RFC 1321.
|
||||||
|
* Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
|
||||||
|
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
|
||||||
|
* Distributed under the BSD License
|
||||||
|
* See http://pajhome.org.uk/crypt/md5 for more info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*jslint bitwise: true */
|
||||||
|
/*global unescape, jQuery */
|
||||||
|
|
||||||
|
(function ($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
|
||||||
|
* to work around bugs in some JS interpreters.
|
||||||
|
*/
|
||||||
|
function safe_add(x, y) {
|
||||||
|
var lsw = (x & 0xFFFF) + (y & 0xFFFF),
|
||||||
|
msw = (x >> 16) + (y >> 16) + (lsw >> 16);
|
||||||
|
return (msw << 16) | (lsw & 0xFFFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Bitwise rotate a 32-bit number to the left.
|
||||||
|
*/
|
||||||
|
function bit_rol(num, cnt) {
|
||||||
|
return (num << cnt) | (num >>> (32 - cnt));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* These functions implement the four basic operations the algorithm uses.
|
||||||
|
*/
|
||||||
|
function md5_cmn(q, a, b, x, s, t) {
|
||||||
|
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
|
||||||
|
}
|
||||||
|
function md5_ff(a, b, c, d, x, s, t) {
|
||||||
|
return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
|
||||||
|
}
|
||||||
|
function md5_gg(a, b, c, d, x, s, t) {
|
||||||
|
return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
|
||||||
|
}
|
||||||
|
function md5_hh(a, b, c, d, x, s, t) {
|
||||||
|
return md5_cmn(b ^ c ^ d, a, b, x, s, t);
|
||||||
|
}
|
||||||
|
function md5_ii(a, b, c, d, x, s, t) {
|
||||||
|
return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calculate the MD5 of an array of little-endian words, and a bit length.
|
||||||
|
*/
|
||||||
|
function binl_md5(x, len) {
|
||||||
|
/* append padding */
|
||||||
|
x[len >> 5] |= 0x80 << ((len) % 32);
|
||||||
|
x[(((len + 64) >>> 9) << 4) + 14] = len;
|
||||||
|
|
||||||
|
var i, olda, oldb, oldc, oldd,
|
||||||
|
a = 1732584193,
|
||||||
|
b = -271733879,
|
||||||
|
c = -1732584194,
|
||||||
|
d = 271733878;
|
||||||
|
|
||||||
|
for (i = 0; i < x.length; i += 16) {
|
||||||
|
olda = a;
|
||||||
|
oldb = b;
|
||||||
|
oldc = c;
|
||||||
|
oldd = d;
|
||||||
|
|
||||||
|
a = md5_ff(a, b, c, d, x[i], 7, -680876936);
|
||||||
|
d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
|
||||||
|
c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
|
||||||
|
b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
|
||||||
|
a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
|
||||||
|
d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
|
||||||
|
c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
|
||||||
|
b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
|
||||||
|
a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
|
||||||
|
d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
|
||||||
|
c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
|
||||||
|
b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
|
||||||
|
a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
|
||||||
|
d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
|
||||||
|
c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
|
||||||
|
b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
|
||||||
|
|
||||||
|
a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
|
||||||
|
d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
|
||||||
|
c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
|
||||||
|
b = md5_gg(b, c, d, a, x[i], 20, -373897302);
|
||||||
|
a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
|
||||||
|
d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
|
||||||
|
c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
|
||||||
|
b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
|
||||||
|
a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
|
||||||
|
d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
|
||||||
|
c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
|
||||||
|
b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
|
||||||
|
a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
|
||||||
|
d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
|
||||||
|
c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
|
||||||
|
b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
|
||||||
|
|
||||||
|
a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
|
||||||
|
d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
|
||||||
|
c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
|
||||||
|
b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
|
||||||
|
a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
|
||||||
|
d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
|
||||||
|
c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
|
||||||
|
b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
|
||||||
|
a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
|
||||||
|
d = md5_hh(d, a, b, c, x[i], 11, -358537222);
|
||||||
|
c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
|
||||||
|
b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
|
||||||
|
a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
|
||||||
|
d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
|
||||||
|
c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
|
||||||
|
b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
|
||||||
|
|
||||||
|
a = md5_ii(a, b, c, d, x[i], 6, -198630844);
|
||||||
|
d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
|
||||||
|
c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
|
||||||
|
b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
|
||||||
|
a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
|
||||||
|
d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
|
||||||
|
c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
|
||||||
|
b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
|
||||||
|
a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
|
||||||
|
d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
|
||||||
|
c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
|
||||||
|
b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
|
||||||
|
a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
|
||||||
|
d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
|
||||||
|
c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
|
||||||
|
b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
|
||||||
|
|
||||||
|
a = safe_add(a, olda);
|
||||||
|
b = safe_add(b, oldb);
|
||||||
|
c = safe_add(c, oldc);
|
||||||
|
d = safe_add(d, oldd);
|
||||||
|
}
|
||||||
|
return [a, b, c, d];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert an array of little-endian words to a string
|
||||||
|
*/
|
||||||
|
function binl2rstr(input) {
|
||||||
|
var i,
|
||||||
|
output = '';
|
||||||
|
for (i = 0; i < input.length * 32; i += 8) {
|
||||||
|
output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert a raw string to an array of little-endian words
|
||||||
|
* Characters >255 have their high-byte silently ignored.
|
||||||
|
*/
|
||||||
|
function rstr2binl(input) {
|
||||||
|
var i,
|
||||||
|
output = [];
|
||||||
|
output[(input.length >> 2) - 1] = undefined;
|
||||||
|
for (i = 0; i < output.length; i += 1) {
|
||||||
|
output[i] = 0;
|
||||||
|
}
|
||||||
|
for (i = 0; i < input.length * 8; i += 8) {
|
||||||
|
output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calculate the MD5 of a raw string
|
||||||
|
*/
|
||||||
|
function rstr_md5(s) {
|
||||||
|
return binl2rstr(binl_md5(rstr2binl(s), s.length * 8));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Calculate the HMAC-MD5, of a key and some data (raw strings)
|
||||||
|
*/
|
||||||
|
function rstr_hmac_md5(key, data) {
|
||||||
|
var i,
|
||||||
|
bkey = rstr2binl(key),
|
||||||
|
ipad = [],
|
||||||
|
opad = [],
|
||||||
|
hash;
|
||||||
|
ipad[15] = opad[15] = undefined;
|
||||||
|
if (bkey.length > 16) {
|
||||||
|
bkey = binl_md5(bkey, key.length * 8);
|
||||||
|
}
|
||||||
|
for (i = 0; i < 16; i += 1) {
|
||||||
|
ipad[i] = bkey[i] ^ 0x36363636;
|
||||||
|
opad[i] = bkey[i] ^ 0x5C5C5C5C;
|
||||||
|
}
|
||||||
|
hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
|
||||||
|
return binl2rstr(binl_md5(opad.concat(hash), 512 + 128));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert a raw string to a hex string
|
||||||
|
*/
|
||||||
|
function rstr2hex(input) {
|
||||||
|
var hex_tab = '0123456789abcdef',
|
||||||
|
output = '',
|
||||||
|
x,
|
||||||
|
i;
|
||||||
|
for (i = 0; i < input.length; i += 1) {
|
||||||
|
x = input.charCodeAt(i);
|
||||||
|
output += hex_tab.charAt((x >>> 4) & 0x0F) +
|
||||||
|
hex_tab.charAt(x & 0x0F);
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Encode a string as utf-8
|
||||||
|
*/
|
||||||
|
function str2rstr_utf8(input) {
|
||||||
|
return unescape(encodeURIComponent(input));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Take string arguments and return either raw or hex encoded strings
|
||||||
|
*/
|
||||||
|
function raw_md5(s) {
|
||||||
|
return rstr_md5(str2rstr_utf8(s));
|
||||||
|
}
|
||||||
|
function hex_md5(s) {
|
||||||
|
return rstr2hex(raw_md5(s));
|
||||||
|
}
|
||||||
|
function raw_hmac_md5(k, d) {
|
||||||
|
return rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d));
|
||||||
|
}
|
||||||
|
function hex_hmac_md5(k, d) {
|
||||||
|
return rstr2hex(raw_hmac_md5(k, d));
|
||||||
|
}
|
||||||
|
|
||||||
|
$.md5 = function (string, key, raw) {
|
||||||
|
if (!key) {
|
||||||
|
if (!raw) {
|
||||||
|
return hex_md5(string);
|
||||||
|
} else {
|
||||||
|
return raw_md5(string);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!raw) {
|
||||||
|
return hex_hmac_md5(key, string);
|
||||||
|
} else {
|
||||||
|
return raw_hmac_md5(key, string);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
}(typeof jQuery === 'function' ? jQuery : this));
|
||||||
170
sai/js/crypto/jquery.sha1.js
Normal file
170
sai/js/crypto/jquery.sha1.js
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
|
||||||
|
/**
|
||||||
|
* jQuery SHA1 hash algorithm function
|
||||||
|
*
|
||||||
|
* <code>
|
||||||
|
* Calculate the sha1 hash of a String
|
||||||
|
* String $.sha1 ( String str )
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* Calculates the sha1 hash of str using the US Secure Hash Algorithm 1.
|
||||||
|
* SHA-1 the Secure Hash Algorithm (SHA) was developed by NIST and is specified in the Secure Hash Standard (SHS, FIPS 180).
|
||||||
|
* This script is used to process variable length message into a fixed-length output using the SHA-1 algorithm. It is fully compatible with UTF-8 encoding.
|
||||||
|
* If you plan using UTF-8 encoding in your project don't forget to set the page encoding to UTF-8 (Content-Type meta tag).
|
||||||
|
* This function orginally get from the WebToolkit and rewrite for using as the jQuery plugin.
|
||||||
|
*
|
||||||
|
* Example
|
||||||
|
* Code
|
||||||
|
* <code>
|
||||||
|
* $.sha1("I'm Persian.");
|
||||||
|
* </code>
|
||||||
|
* Result
|
||||||
|
* <code>
|
||||||
|
* "1d302f9dc925d62fc859055999d2052e274513ed"
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* @alias Muhammad Hussein Fattahizadeh < muhammad [AT] semnanweb [DOT] com >
|
||||||
|
* @link http://www.semnanweb.com/jquery-plugin/sha1.html
|
||||||
|
* @see http://www.webtoolkit.info/
|
||||||
|
* @license http://www.gnu.org/licenses/gpl.html [GNU General Public License]
|
||||||
|
* @param {jQuery} {sha1:function(string))
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function($){
|
||||||
|
|
||||||
|
var rotateLeft = function(lValue, iShiftBits) {
|
||||||
|
return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
|
||||||
|
}
|
||||||
|
|
||||||
|
var lsbHex = function(value) {
|
||||||
|
var string = "";
|
||||||
|
var i;
|
||||||
|
var vh;
|
||||||
|
var vl;
|
||||||
|
for(i = 0;i <= 6;i += 2) {
|
||||||
|
vh = (value>>>(i * 4 + 4))&0x0f;
|
||||||
|
vl = (value>>>(i*4))&0x0f;
|
||||||
|
string += vh.toString(16) + vl.toString(16);
|
||||||
|
}
|
||||||
|
return string;
|
||||||
|
};
|
||||||
|
|
||||||
|
var cvtHex = function(value) {
|
||||||
|
var string = "";
|
||||||
|
var i;
|
||||||
|
var v;
|
||||||
|
for(i = 7;i >= 0;i--) {
|
||||||
|
v = (value>>>(i * 4))&0x0f;
|
||||||
|
string += v.toString(16);
|
||||||
|
}
|
||||||
|
return string;
|
||||||
|
};
|
||||||
|
|
||||||
|
var uTF8Encode = function(string) {
|
||||||
|
string = string.replace(/\x0d\x0a/g, "\x0a");
|
||||||
|
var output = "";
|
||||||
|
for (var n = 0; n < string.length; n++) {
|
||||||
|
var c = string.charCodeAt(n);
|
||||||
|
if (c < 128) {
|
||||||
|
output += String.fromCharCode(c);
|
||||||
|
} else if ((c > 127) && (c < 2048)) {
|
||||||
|
output += String.fromCharCode((c >> 6) | 192);
|
||||||
|
output += String.fromCharCode((c & 63) | 128);
|
||||||
|
} else {
|
||||||
|
output += String.fromCharCode((c >> 12) | 224);
|
||||||
|
output += String.fromCharCode(((c >> 6) & 63) | 128);
|
||||||
|
output += String.fromCharCode((c & 63) | 128);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
};
|
||||||
|
|
||||||
|
$.extend({
|
||||||
|
sha1: function(string) {
|
||||||
|
var blockstart;
|
||||||
|
var i, j;
|
||||||
|
var W = new Array(80);
|
||||||
|
var H0 = 0x67452301;
|
||||||
|
var H1 = 0xEFCDAB89;
|
||||||
|
var H2 = 0x98BADCFE;
|
||||||
|
var H3 = 0x10325476;
|
||||||
|
var H4 = 0xC3D2E1F0;
|
||||||
|
var A, B, C, D, E;
|
||||||
|
var tempValue;
|
||||||
|
string = uTF8Encode(string);
|
||||||
|
var stringLength = string.length;
|
||||||
|
var wordArray = new Array();
|
||||||
|
for(i = 0;i < stringLength - 3;i += 4) {
|
||||||
|
j = string.charCodeAt(i)<<24 | string.charCodeAt(i + 1)<<16 | string.charCodeAt(i + 2)<<8 | string.charCodeAt(i + 3);
|
||||||
|
wordArray.push(j);
|
||||||
|
}
|
||||||
|
switch(stringLength % 4) {
|
||||||
|
case 0:
|
||||||
|
i = 0x080000000;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
i = string.charCodeAt(stringLength - 1)<<24 | 0x0800000;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
i = string.charCodeAt(stringLength - 2)<<24 | string.charCodeAt(stringLength - 1)<<16 | 0x08000;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
i = string.charCodeAt(stringLength - 3)<<24 | string.charCodeAt(stringLength - 2)<<16 | string.charCodeAt(stringLength - 1)<<8 | 0x80;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
wordArray.push(i);
|
||||||
|
while((wordArray.length % 16) != 14 ) wordArray.push(0);
|
||||||
|
wordArray.push(stringLength>>>29);
|
||||||
|
wordArray.push((stringLength<<3)&0x0ffffffff);
|
||||||
|
for(blockstart = 0;blockstart < wordArray.length;blockstart += 16) {
|
||||||
|
for(i = 0;i < 16;i++) W[i] = wordArray[blockstart+i];
|
||||||
|
for(i = 16;i <= 79;i++) W[i] = rotateLeft(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1);
|
||||||
|
A = H0;
|
||||||
|
B = H1;
|
||||||
|
C = H2;
|
||||||
|
D = H3;
|
||||||
|
E = H4;
|
||||||
|
for(i = 0;i <= 19;i++) {
|
||||||
|
tempValue = (rotateLeft(A, 5) + ((B&C) | (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;
|
||||||
|
E = D;
|
||||||
|
D = C;
|
||||||
|
C = rotateLeft(B, 30);
|
||||||
|
B = A;
|
||||||
|
A = tempValue;
|
||||||
|
}
|
||||||
|
for(i = 20;i <= 39;i++) {
|
||||||
|
tempValue = (rotateLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;
|
||||||
|
E = D;
|
||||||
|
D = C;
|
||||||
|
C = rotateLeft(B, 30);
|
||||||
|
B = A;
|
||||||
|
A = tempValue;
|
||||||
|
}
|
||||||
|
for(i = 40;i <= 59;i++) {
|
||||||
|
tempValue = (rotateLeft(A, 5) + ((B&C) | (B&D) | (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;
|
||||||
|
E = D;
|
||||||
|
D = C;
|
||||||
|
C = rotateLeft(B, 30);
|
||||||
|
B = A;
|
||||||
|
A = tempValue;
|
||||||
|
}
|
||||||
|
for(i = 60;i <= 79;i++) {
|
||||||
|
tempValue = (rotateLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;
|
||||||
|
E = D;
|
||||||
|
D = C;
|
||||||
|
C = rotateLeft(B, 30);
|
||||||
|
B = A;
|
||||||
|
A = tempValue;
|
||||||
|
}
|
||||||
|
H0 = (H0 + A) & 0x0ffffffff;
|
||||||
|
H1 = (H1 + B) & 0x0ffffffff;
|
||||||
|
H2 = (H2 + C) & 0x0ffffffff;
|
||||||
|
H3 = (H3 + D) & 0x0ffffffff;
|
||||||
|
H4 = (H4 + E) & 0x0ffffffff;
|
||||||
|
}
|
||||||
|
var tempValue = cvtHex(H0) + cvtHex(H1) + cvtHex(H2) + cvtHex(H3) + cvtHex(H4);
|
||||||
|
return tempValue.toLowerCase();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})(jQuery);
|
||||||
912
sai/js/jqBootstrapValidation.js
Normal file
912
sai/js/jqBootstrapValidation.js
Normal file
@ -0,0 +1,912 @@
|
|||||||
|
/* jqBootstrapValidation
|
||||||
|
* A plugin for automating validation on Twitter Bootstrap formatted forms.
|
||||||
|
*
|
||||||
|
* v1.3.6
|
||||||
|
*
|
||||||
|
* License: MIT <http://opensource.org/licenses/mit-license.php> - see LICENSE file
|
||||||
|
*
|
||||||
|
* http://ReactiveRaven.github.com/jqBootstrapValidation/
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function( $ ){
|
||||||
|
|
||||||
|
var createdElements = [];
|
||||||
|
|
||||||
|
var defaults = {
|
||||||
|
options: {
|
||||||
|
prependExistingHelpBlock: false,
|
||||||
|
sniffHtml: true, // sniff for 'required', 'maxlength', etc
|
||||||
|
preventSubmit: true, // stop the form submit event from firing if validation fails
|
||||||
|
submitError: false, // function called if there is an error when trying to submit
|
||||||
|
submitSuccess: false, // function called just before a successful submit event is sent to the server
|
||||||
|
semanticallyStrict: false, // set to true to tidy up generated HTML output
|
||||||
|
autoAdd: {
|
||||||
|
helpBlocks: true
|
||||||
|
},
|
||||||
|
filter: function () {
|
||||||
|
// return $(this).is(":visible"); // only validate elements you can see
|
||||||
|
return true; // validate everything
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
init : function( options ) {
|
||||||
|
|
||||||
|
var settings = $.extend(true, {}, defaults);
|
||||||
|
|
||||||
|
settings.options = $.extend(true, settings.options, options);
|
||||||
|
|
||||||
|
var $siblingElements = this;
|
||||||
|
|
||||||
|
var uniqueForms = $.unique(
|
||||||
|
$siblingElements.map( function () {
|
||||||
|
return $(this).parents("form")[0];
|
||||||
|
}).toArray()
|
||||||
|
);
|
||||||
|
|
||||||
|
$(uniqueForms).bind("submit", function (e) {
|
||||||
|
var $form = $(this);
|
||||||
|
var warningsFound = 0;
|
||||||
|
var $inputs = $form.find("input,textarea,select").not("[type=submit],[type=image]").filter(settings.options.filter);
|
||||||
|
$inputs.trigger("submit.validation").trigger("validationLostFocus.validation");
|
||||||
|
|
||||||
|
$inputs.each(function (i, el) {
|
||||||
|
var $this = $(el),
|
||||||
|
$controlGroup = $this.parents(".control-group").first();
|
||||||
|
if (
|
||||||
|
$controlGroup.hasClass("warning")
|
||||||
|
) {
|
||||||
|
$controlGroup.removeClass("warning").addClass("error");
|
||||||
|
warningsFound++;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$inputs.trigger("validationLostFocus.validation");
|
||||||
|
|
||||||
|
if (warningsFound) {
|
||||||
|
if (settings.options.preventSubmit) {
|
||||||
|
e.preventDefault();
|
||||||
|
}
|
||||||
|
$form.addClass("error");
|
||||||
|
if ($.isFunction(settings.options.submitError)) {
|
||||||
|
settings.options.submitError($form, e, $inputs.jqBootstrapValidation("collectErrors", true));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$form.removeClass("error");
|
||||||
|
if ($.isFunction(settings.options.submitSuccess)) {
|
||||||
|
settings.options.submitSuccess($form, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return this.each(function(){
|
||||||
|
|
||||||
|
// Get references to everything we're interested in
|
||||||
|
var $this = $(this),
|
||||||
|
$controlGroup = $this.parents(".control-group").first(),
|
||||||
|
$helpBlock = $controlGroup.find(".help-block").first(),
|
||||||
|
$form = $this.parents("form").first(),
|
||||||
|
validatorNames = [];
|
||||||
|
|
||||||
|
// create message container if not exists
|
||||||
|
if (!$helpBlock.length && settings.options.autoAdd && settings.options.autoAdd.helpBlocks) {
|
||||||
|
$helpBlock = $('<div class="help-block" />');
|
||||||
|
$controlGroup.find('.controls').append($helpBlock);
|
||||||
|
createdElements.push($helpBlock[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// =============================================================
|
||||||
|
// SNIFF HTML FOR VALIDATORS
|
||||||
|
// =============================================================
|
||||||
|
|
||||||
|
// *snort sniff snuffle*
|
||||||
|
|
||||||
|
if (settings.options.sniffHtml) {
|
||||||
|
var message = "";
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
// PATTERN
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
if ($this.attr("pattern") !== undefined) {
|
||||||
|
message = "Not in the expected format<!-- data-validation-pattern-message to override -->";
|
||||||
|
if ($this.data("validationPatternMessage")) {
|
||||||
|
message = $this.data("validationPatternMessage");
|
||||||
|
}
|
||||||
|
$this.data("validationPatternMessage", message);
|
||||||
|
$this.data("validationPatternRegex", $this.attr("pattern"));
|
||||||
|
}
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
// MAX
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
if ($this.attr("max") !== undefined || $this.attr("aria-valuemax") !== undefined) {
|
||||||
|
var max = ($this.attr("max") !== undefined ? $this.attr("max") : $this.attr("aria-valuemax"));
|
||||||
|
message = "Too high: Maximum of '" + max + "'<!-- data-validation-max-message to override -->";
|
||||||
|
if ($this.data("validationMaxMessage")) {
|
||||||
|
message = $this.data("validationMaxMessage");
|
||||||
|
}
|
||||||
|
$this.data("validationMaxMessage", message);
|
||||||
|
$this.data("validationMaxMax", max);
|
||||||
|
}
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
// MIN
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
if ($this.attr("min") !== undefined || $this.attr("aria-valuemin") !== undefined) {
|
||||||
|
var min = ($this.attr("min") !== undefined ? $this.attr("min") : $this.attr("aria-valuemin"));
|
||||||
|
message = "Too low: Minimum of '" + min + "'<!-- data-validation-min-message to override -->";
|
||||||
|
if ($this.data("validationMinMessage")) {
|
||||||
|
message = $this.data("validationMinMessage");
|
||||||
|
}
|
||||||
|
$this.data("validationMinMessage", message);
|
||||||
|
$this.data("validationMinMin", min);
|
||||||
|
}
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
// MAXLENGTH
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
if ($this.attr("maxlength") !== undefined) {
|
||||||
|
message = "Too long: Maximum of '" + $this.attr("maxlength") + "' characters<!-- data-validation-maxlength-message to override -->";
|
||||||
|
if ($this.data("validationMaxlengthMessage")) {
|
||||||
|
message = $this.data("validationMaxlengthMessage");
|
||||||
|
}
|
||||||
|
$this.data("validationMaxlengthMessage", message);
|
||||||
|
$this.data("validationMaxlengthMaxlength", $this.attr("maxlength"));
|
||||||
|
}
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
// MINLENGTH
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
if ($this.attr("minlength") !== undefined) {
|
||||||
|
message = "Too short: Minimum of '" + $this.attr("minlength") + "' characters<!-- data-validation-minlength-message to override -->";
|
||||||
|
if ($this.data("validationMinlengthMessage")) {
|
||||||
|
message = $this.data("validationMinlengthMessage");
|
||||||
|
}
|
||||||
|
$this.data("validationMinlengthMessage", message);
|
||||||
|
$this.data("validationMinlengthMinlength", $this.attr("minlength"));
|
||||||
|
}
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
// REQUIRED
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
if ($this.attr("required") !== undefined || $this.attr("aria-required") !== undefined) {
|
||||||
|
message = settings.builtInValidators.required.message;
|
||||||
|
if ($this.data("validationRequiredMessage")) {
|
||||||
|
message = $this.data("validationRequiredMessage");
|
||||||
|
}
|
||||||
|
$this.data("validationRequiredMessage", message);
|
||||||
|
}
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
// NUMBER
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "number") {
|
||||||
|
message = settings.builtInValidators.number.message;
|
||||||
|
if ($this.data("validationNumberMessage")) {
|
||||||
|
message = $this.data("validationNumberMessage");
|
||||||
|
}
|
||||||
|
$this.data("validationNumberMessage", message);
|
||||||
|
}
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
// EMAIL
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "email") {
|
||||||
|
message = "Not a valid email address<!-- data-validator-validemail-message to override -->";
|
||||||
|
if ($this.data("validationValidemailMessage")) {
|
||||||
|
message = $this.data("validationValidemailMessage");
|
||||||
|
} else if ($this.data("validationEmailMessage")) {
|
||||||
|
message = $this.data("validationEmailMessage");
|
||||||
|
}
|
||||||
|
$this.data("validationValidemailMessage", message);
|
||||||
|
}
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
// MINCHECKED
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
if ($this.attr("minchecked") !== undefined) {
|
||||||
|
message = "Not enough options checked; Minimum of '" + $this.attr("minchecked") + "' required<!-- data-validation-minchecked-message to override -->";
|
||||||
|
if ($this.data("validationMincheckedMessage")) {
|
||||||
|
message = $this.data("validationMincheckedMessage");
|
||||||
|
}
|
||||||
|
$this.data("validationMincheckedMessage", message);
|
||||||
|
$this.data("validationMincheckedMinchecked", $this.attr("minchecked"));
|
||||||
|
}
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
// MAXCHECKED
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
if ($this.attr("maxchecked") !== undefined) {
|
||||||
|
message = "Too many options checked; Maximum of '" + $this.attr("maxchecked") + "' required<!-- data-validation-maxchecked-message to override -->";
|
||||||
|
if ($this.data("validationMaxcheckedMessage")) {
|
||||||
|
message = $this.data("validationMaxcheckedMessage");
|
||||||
|
}
|
||||||
|
$this.data("validationMaxcheckedMessage", message);
|
||||||
|
$this.data("validationMaxcheckedMaxchecked", $this.attr("maxchecked"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// =============================================================
|
||||||
|
// COLLECT VALIDATOR NAMES
|
||||||
|
// =============================================================
|
||||||
|
|
||||||
|
// Get named validators
|
||||||
|
if ($this.data("validation") !== undefined) {
|
||||||
|
validatorNames = $this.data("validation").split(",");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get extra ones defined on the element's data attributes
|
||||||
|
$.each($this.data(), function (i, el) {
|
||||||
|
var parts = i.replace(/([A-Z])/g, ",$1").split(",");
|
||||||
|
if (parts[0] === "validation" && parts[1]) {
|
||||||
|
validatorNames.push(parts[1]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// =============================================================
|
||||||
|
// NORMALISE VALIDATOR NAMES
|
||||||
|
// =============================================================
|
||||||
|
|
||||||
|
var validatorNamesToInspect = validatorNames;
|
||||||
|
var newValidatorNamesToInspect = [];
|
||||||
|
|
||||||
|
do // repeatedly expand 'shortcut' validators into their real validators
|
||||||
|
{
|
||||||
|
// Uppercase only the first letter of each name
|
||||||
|
$.each(validatorNames, function (i, el) {
|
||||||
|
validatorNames[i] = formatValidatorName(el);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Remove duplicate validator names
|
||||||
|
validatorNames = $.unique(validatorNames);
|
||||||
|
|
||||||
|
// Pull out the new validator names from each shortcut
|
||||||
|
newValidatorNamesToInspect = [];
|
||||||
|
$.each(validatorNamesToInspect, function(i, el) {
|
||||||
|
if ($this.data("validation" + el + "Shortcut") !== undefined) {
|
||||||
|
// Are these custom validators?
|
||||||
|
// Pull them out!
|
||||||
|
$.each($this.data("validation" + el + "Shortcut").split(","), function(i2, el2) {
|
||||||
|
newValidatorNamesToInspect.push(el2);
|
||||||
|
});
|
||||||
|
} else if (settings.builtInValidators[el.toLowerCase()]) {
|
||||||
|
// Is this a recognised built-in?
|
||||||
|
// Pull it out!
|
||||||
|
var validator = settings.builtInValidators[el.toLowerCase()];
|
||||||
|
if (validator.type.toLowerCase() === "shortcut") {
|
||||||
|
$.each(validator.shortcut.split(","), function (i, el) {
|
||||||
|
el = formatValidatorName(el);
|
||||||
|
newValidatorNamesToInspect.push(el);
|
||||||
|
validatorNames.push(el);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
validatorNamesToInspect = newValidatorNamesToInspect;
|
||||||
|
|
||||||
|
} while (validatorNamesToInspect.length > 0)
|
||||||
|
|
||||||
|
// =============================================================
|
||||||
|
// SET UP VALIDATOR ARRAYS
|
||||||
|
// =============================================================
|
||||||
|
|
||||||
|
var validators = {};
|
||||||
|
|
||||||
|
$.each(validatorNames, function (i, el) {
|
||||||
|
// Set up the 'override' message
|
||||||
|
var message = $this.data("validation" + el + "Message");
|
||||||
|
var hasOverrideMessage = (message !== undefined);
|
||||||
|
var foundValidator = false;
|
||||||
|
message =
|
||||||
|
(
|
||||||
|
message
|
||||||
|
? message
|
||||||
|
: "'" + el + "' validation failed <!-- Add attribute 'data-validation-" + el.toLowerCase() + "-message' to input to change this message -->"
|
||||||
|
)
|
||||||
|
;
|
||||||
|
|
||||||
|
$.each(
|
||||||
|
settings.validatorTypes,
|
||||||
|
function (validatorType, validatorTemplate) {
|
||||||
|
if (validators[validatorType] === undefined) {
|
||||||
|
validators[validatorType] = [];
|
||||||
|
}
|
||||||
|
if (!foundValidator && $this.data("validation" + el + formatValidatorName(validatorTemplate.name)) !== undefined) {
|
||||||
|
validators[validatorType].push(
|
||||||
|
$.extend(
|
||||||
|
true,
|
||||||
|
{
|
||||||
|
name: formatValidatorName(validatorTemplate.name),
|
||||||
|
message: message
|
||||||
|
},
|
||||||
|
validatorTemplate.init($this, el)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
foundValidator = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!foundValidator && settings.builtInValidators[el.toLowerCase()]) {
|
||||||
|
|
||||||
|
var validator = $.extend(true, {}, settings.builtInValidators[el.toLowerCase()]);
|
||||||
|
if (hasOverrideMessage) {
|
||||||
|
validator.message = message;
|
||||||
|
}
|
||||||
|
var validatorType = validator.type.toLowerCase();
|
||||||
|
|
||||||
|
if (validatorType === "shortcut") {
|
||||||
|
foundValidator = true;
|
||||||
|
} else {
|
||||||
|
$.each(
|
||||||
|
settings.validatorTypes,
|
||||||
|
function (validatorTemplateType, validatorTemplate) {
|
||||||
|
if (validators[validatorTemplateType] === undefined) {
|
||||||
|
validators[validatorTemplateType] = [];
|
||||||
|
}
|
||||||
|
if (!foundValidator && validatorType === validatorTemplateType.toLowerCase()) {
|
||||||
|
$this.data("validation" + el + formatValidatorName(validatorTemplate.name), validator[validatorTemplate.name.toLowerCase()]);
|
||||||
|
validators[validatorType].push(
|
||||||
|
$.extend(
|
||||||
|
validator,
|
||||||
|
validatorTemplate.init($this, el)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
foundValidator = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! foundValidator) {
|
||||||
|
$.error("Cannot find validation info for '" + el + "'");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// =============================================================
|
||||||
|
// STORE FALLBACK VALUES
|
||||||
|
// =============================================================
|
||||||
|
|
||||||
|
$helpBlock.data(
|
||||||
|
"original-contents",
|
||||||
|
(
|
||||||
|
$helpBlock.data("original-contents")
|
||||||
|
? $helpBlock.data("original-contents")
|
||||||
|
: $helpBlock.html()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$helpBlock.data(
|
||||||
|
"original-role",
|
||||||
|
(
|
||||||
|
$helpBlock.data("original-role")
|
||||||
|
? $helpBlock.data("original-role")
|
||||||
|
: $helpBlock.attr("role")
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$controlGroup.data(
|
||||||
|
"original-classes",
|
||||||
|
(
|
||||||
|
$controlGroup.data("original-clases")
|
||||||
|
? $controlGroup.data("original-classes")
|
||||||
|
: $controlGroup.attr("class")
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this.data(
|
||||||
|
"original-aria-invalid",
|
||||||
|
(
|
||||||
|
$this.data("original-aria-invalid")
|
||||||
|
? $this.data("original-aria-invalid")
|
||||||
|
: $this.attr("aria-invalid")
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// =============================================================
|
||||||
|
// VALIDATION
|
||||||
|
// =============================================================
|
||||||
|
|
||||||
|
$this.bind(
|
||||||
|
"validation.validation",
|
||||||
|
function (event, params) {
|
||||||
|
|
||||||
|
var value = getValue($this);
|
||||||
|
|
||||||
|
// Get a list of the errors to apply
|
||||||
|
var errorsFound = [];
|
||||||
|
|
||||||
|
$.each(validators, function (validatorType, validatorTypeArray) {
|
||||||
|
if (value || value.length || (params && params.includeEmpty) || (!!settings.validatorTypes[validatorType].blockSubmit && params && !!params.submitting)) {
|
||||||
|
$.each(validatorTypeArray, function (i, validator) {
|
||||||
|
if (settings.validatorTypes[validatorType].validate($this, value, validator)) {
|
||||||
|
errorsFound.push(validator.message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return errorsFound;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
$this.bind(
|
||||||
|
"getValidators.validation",
|
||||||
|
function () {
|
||||||
|
return validators;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// =============================================================
|
||||||
|
// WATCH FOR CHANGES
|
||||||
|
// =============================================================
|
||||||
|
$this.bind(
|
||||||
|
"submit.validation",
|
||||||
|
function () {
|
||||||
|
return $this.triggerHandler("change.validation", {submitting: true});
|
||||||
|
}
|
||||||
|
);
|
||||||
|
$this.bind(
|
||||||
|
[
|
||||||
|
"keyup",
|
||||||
|
"focus",
|
||||||
|
"blur",
|
||||||
|
"click",
|
||||||
|
"keydown",
|
||||||
|
"keypress",
|
||||||
|
"change"
|
||||||
|
].join(".validation ") + ".validation",
|
||||||
|
function (e, params) {
|
||||||
|
|
||||||
|
var value = getValue($this);
|
||||||
|
|
||||||
|
var errorsFound = [];
|
||||||
|
|
||||||
|
$controlGroup.find("input,textarea,select").each(function (i, el) {
|
||||||
|
var oldCount = errorsFound.length;
|
||||||
|
$.each($(el).triggerHandler("validation.validation", params), function (j, message) {
|
||||||
|
errorsFound.push(message);
|
||||||
|
});
|
||||||
|
if (errorsFound.length > oldCount) {
|
||||||
|
$(el).attr("aria-invalid", "true");
|
||||||
|
} else {
|
||||||
|
var original = $this.data("original-aria-invalid");
|
||||||
|
$(el).attr("aria-invalid", (original !== undefined ? original : false));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$form.find("input,select,textarea").not($this).not("[name=\"" + $this.attr("name") + "\"]").trigger("validationLostFocus.validation");
|
||||||
|
|
||||||
|
errorsFound = $.unique(errorsFound.sort());
|
||||||
|
|
||||||
|
// Were there any errors?
|
||||||
|
if (errorsFound.length) {
|
||||||
|
// Better flag it up as a warning.
|
||||||
|
$controlGroup.removeClass("success error").addClass("warning");
|
||||||
|
|
||||||
|
// How many errors did we find?
|
||||||
|
if (settings.options.semanticallyStrict && errorsFound.length === 1) {
|
||||||
|
// Only one? Being strict? Just output it.
|
||||||
|
$helpBlock.html(errorsFound[0] +
|
||||||
|
( settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : "" ));
|
||||||
|
} else {
|
||||||
|
// Multiple? Being sloppy? Glue them together into an UL.
|
||||||
|
$helpBlock.html("<ul role=\"alert\"><li>" + errorsFound.join("</li><li>") + "</li></ul>" +
|
||||||
|
( settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : "" ));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$controlGroup.removeClass("warning error success");
|
||||||
|
if (value.length > 0) {
|
||||||
|
$controlGroup.addClass("success");
|
||||||
|
}
|
||||||
|
$helpBlock.html($helpBlock.data("original-contents"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (e.type === "blur") {
|
||||||
|
$controlGroup.removeClass("success");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
$this.bind("validationLostFocus.validation", function () {
|
||||||
|
$controlGroup.removeClass("success");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
destroy : function( ) {
|
||||||
|
|
||||||
|
return this.each(
|
||||||
|
function() {
|
||||||
|
|
||||||
|
var
|
||||||
|
$this = $(this),
|
||||||
|
$controlGroup = $this.parents(".control-group").first(),
|
||||||
|
$helpBlock = $controlGroup.find(".help-block").first();
|
||||||
|
|
||||||
|
// remove our events
|
||||||
|
$this.unbind('.validation'); // events are namespaced.
|
||||||
|
// reset help text
|
||||||
|
$helpBlock.html($helpBlock.data("original-contents"));
|
||||||
|
// reset classes
|
||||||
|
$controlGroup.attr("class", $controlGroup.data("original-classes"));
|
||||||
|
// reset aria
|
||||||
|
$this.attr("aria-invalid", $this.data("original-aria-invalid"));
|
||||||
|
// reset role
|
||||||
|
$helpBlock.attr("role", $this.data("original-role"));
|
||||||
|
// remove all elements we created
|
||||||
|
if (createdElements.indexOf($helpBlock[0]) > -1) {
|
||||||
|
$helpBlock.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
},
|
||||||
|
collectErrors : function(includeEmpty) {
|
||||||
|
|
||||||
|
var errorMessages = {};
|
||||||
|
this.each(function (i, el) {
|
||||||
|
var $el = $(el);
|
||||||
|
var name = $el.attr("name");
|
||||||
|
var errors = $el.triggerHandler("validation.validation", {includeEmpty: true});
|
||||||
|
errorMessages[name] = $.extend(true, errors, errorMessages[name]);
|
||||||
|
});
|
||||||
|
|
||||||
|
$.each(errorMessages, function (i, el) {
|
||||||
|
if (el.length === 0) {
|
||||||
|
delete errorMessages[i];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return errorMessages;
|
||||||
|
|
||||||
|
},
|
||||||
|
hasErrors: function() {
|
||||||
|
|
||||||
|
var errorMessages = [];
|
||||||
|
|
||||||
|
this.each(function (i, el) {
|
||||||
|
errorMessages = errorMessages.concat(
|
||||||
|
$(el).triggerHandler("getValidators.validation") ? $(el).triggerHandler("validation.validation", {submitting: true}) : []
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
return (errorMessages.length > 0);
|
||||||
|
},
|
||||||
|
override : function (newDefaults) {
|
||||||
|
defaults = $.extend(true, defaults, newDefaults);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
validatorTypes: {
|
||||||
|
callback: {
|
||||||
|
name: "callback",
|
||||||
|
init: function ($this, name) {
|
||||||
|
return {
|
||||||
|
validatorName: name,
|
||||||
|
callback: $this.data("validation" + name + "Callback"),
|
||||||
|
lastValue: $this.val(),
|
||||||
|
lastValid: true,
|
||||||
|
lastFinished: true
|
||||||
|
};
|
||||||
|
},
|
||||||
|
validate: function ($this, value, validator) {
|
||||||
|
if (validator.lastValue === value && validator.lastFinished) {
|
||||||
|
return !validator.lastValid;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (validator.lastFinished === true)
|
||||||
|
{
|
||||||
|
validator.lastValue = value;
|
||||||
|
validator.lastValid = true;
|
||||||
|
validator.lastFinished = false;
|
||||||
|
|
||||||
|
var rrjqbvValidator = validator;
|
||||||
|
var rrjqbvThis = $this;
|
||||||
|
executeFunctionByName(
|
||||||
|
validator.callback,
|
||||||
|
window,
|
||||||
|
$this,
|
||||||
|
value,
|
||||||
|
function (data) {
|
||||||
|
if (rrjqbvValidator.lastValue === data.value) {
|
||||||
|
rrjqbvValidator.lastValid = data.valid;
|
||||||
|
if (data.message) {
|
||||||
|
rrjqbvValidator.message = data.message;
|
||||||
|
}
|
||||||
|
rrjqbvValidator.lastFinished = true;
|
||||||
|
rrjqbvThis.data("validation" + rrjqbvValidator.validatorName + "Message", rrjqbvValidator.message);
|
||||||
|
// Timeout is set to avoid problems with the events being considered 'already fired'
|
||||||
|
setTimeout(function () {
|
||||||
|
rrjqbvThis.trigger("change.validation");
|
||||||
|
}, 1); // doesn't need a long timeout, just long enough for the event bubble to burst
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ajax: {
|
||||||
|
name: "ajax",
|
||||||
|
init: function ($this, name) {
|
||||||
|
return {
|
||||||
|
validatorName: name,
|
||||||
|
url: $this.data("validation" + name + "Ajax"),
|
||||||
|
lastValue: $this.val(),
|
||||||
|
lastValid: true,
|
||||||
|
lastFinished: true
|
||||||
|
};
|
||||||
|
},
|
||||||
|
validate: function ($this, value, validator) {
|
||||||
|
if (""+validator.lastValue === ""+value && validator.lastFinished === true) {
|
||||||
|
return validator.lastValid === false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (validator.lastFinished === true)
|
||||||
|
{
|
||||||
|
validator.lastValue = value;
|
||||||
|
validator.lastValid = true;
|
||||||
|
validator.lastFinished = false;
|
||||||
|
$.ajax({
|
||||||
|
url: validator.url,
|
||||||
|
data: "value=" + value + "&field=" + $this.attr("name"),
|
||||||
|
dataType: "json",
|
||||||
|
success: function (data) {
|
||||||
|
if (""+validator.lastValue === ""+data.value) {
|
||||||
|
validator.lastValid = !!(data.valid);
|
||||||
|
if (data.message) {
|
||||||
|
validator.message = data.message;
|
||||||
|
}
|
||||||
|
validator.lastFinished = true;
|
||||||
|
$this.data("validation" + validator.validatorName + "Message", validator.message);
|
||||||
|
// Timeout is set to avoid problems with the events being considered 'already fired'
|
||||||
|
setTimeout(function () {
|
||||||
|
$this.trigger("change.validation");
|
||||||
|
}, 1); // doesn't need a long timeout, just long enough for the event bubble to burst
|
||||||
|
}
|
||||||
|
},
|
||||||
|
failure: function () {
|
||||||
|
validator.lastValid = true;
|
||||||
|
validator.message = "ajax call failed";
|
||||||
|
validator.lastFinished = true;
|
||||||
|
$this.data("validation" + validator.validatorName + "Message", validator.message);
|
||||||
|
// Timeout is set to avoid problems with the events being considered 'already fired'
|
||||||
|
setTimeout(function () {
|
||||||
|
$this.trigger("change.validation");
|
||||||
|
}, 1); // doesn't need a long timeout, just long enough for the event bubble to burst
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
regex: {
|
||||||
|
name: "regex",
|
||||||
|
init: function ($this, name) {
|
||||||
|
return {regex: regexFromString($this.data("validation" + name + "Regex"))};
|
||||||
|
},
|
||||||
|
validate: function ($this, value, validator) {
|
||||||
|
return (!validator.regex.test(value) && ! validator.negative)
|
||||||
|
|| (validator.regex.test(value) && validator.negative);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
required: {
|
||||||
|
name: "required",
|
||||||
|
init: function ($this, name) {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
validate: function ($this, value, validator) {
|
||||||
|
return !!(value.length === 0 && ! validator.negative)
|
||||||
|
|| !!(value.length > 0 && validator.negative);
|
||||||
|
},
|
||||||
|
blockSubmit: true
|
||||||
|
},
|
||||||
|
match: {
|
||||||
|
name: "match",
|
||||||
|
init: function ($this, name) {
|
||||||
|
var element = $this.parents("form").first().find("[name=\"" + $this.data("validation" + name + "Match") + "\"]").first();
|
||||||
|
element.bind("validation.validation", function () {
|
||||||
|
$this.trigger("change.validation", {submitting: true});
|
||||||
|
});
|
||||||
|
return {"element": element};
|
||||||
|
},
|
||||||
|
validate: function ($this, value, validator) {
|
||||||
|
return (value !== validator.element.val() && ! validator.negative)
|
||||||
|
|| (value === validator.element.val() && validator.negative);
|
||||||
|
},
|
||||||
|
blockSubmit: true
|
||||||
|
},
|
||||||
|
max: {
|
||||||
|
name: "max",
|
||||||
|
init: function ($this, name) {
|
||||||
|
return {max: $this.data("validation" + name + "Max")};
|
||||||
|
},
|
||||||
|
validate: function ($this, value, validator) {
|
||||||
|
return (parseFloat(value, 10) > parseFloat(validator.max, 10) && ! validator.negative)
|
||||||
|
|| (parseFloat(value, 10) <= parseFloat(validator.max, 10) && validator.negative);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
min: {
|
||||||
|
name: "min",
|
||||||
|
init: function ($this, name) {
|
||||||
|
return {min: $this.data("validation" + name + "Min")};
|
||||||
|
},
|
||||||
|
validate: function ($this, value, validator) {
|
||||||
|
return (parseFloat(value) < parseFloat(validator.min) && ! validator.negative)
|
||||||
|
|| (parseFloat(value) >= parseFloat(validator.min) && validator.negative);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
maxlength: {
|
||||||
|
name: "maxlength",
|
||||||
|
init: function ($this, name) {
|
||||||
|
return {maxlength: $this.data("validation" + name + "Maxlength")};
|
||||||
|
},
|
||||||
|
validate: function ($this, value, validator) {
|
||||||
|
return ((value.length > validator.maxlength) && ! validator.negative)
|
||||||
|
|| ((value.length <= validator.maxlength) && validator.negative);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
minlength: {
|
||||||
|
name: "minlength",
|
||||||
|
init: function ($this, name) {
|
||||||
|
return {minlength: $this.data("validation" + name + "Minlength")};
|
||||||
|
},
|
||||||
|
validate: function ($this, value, validator) {
|
||||||
|
return ((value.length < validator.minlength) && ! validator.negative)
|
||||||
|
|| ((value.length >= validator.minlength) && validator.negative);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
maxchecked: {
|
||||||
|
name: "maxchecked",
|
||||||
|
init: function ($this, name) {
|
||||||
|
var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]");
|
||||||
|
elements.bind("click.validation", function () {
|
||||||
|
$this.trigger("change.validation", {includeEmpty: true});
|
||||||
|
});
|
||||||
|
return {maxchecked: $this.data("validation" + name + "Maxchecked"), elements: elements};
|
||||||
|
},
|
||||||
|
validate: function ($this, value, validator) {
|
||||||
|
return (validator.elements.filter(":checked").length > validator.maxchecked && ! validator.negative)
|
||||||
|
|| (validator.elements.filter(":checked").length <= validator.maxchecked && validator.negative);
|
||||||
|
},
|
||||||
|
blockSubmit: true
|
||||||
|
},
|
||||||
|
minchecked: {
|
||||||
|
name: "minchecked",
|
||||||
|
init: function ($this, name) {
|
||||||
|
var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]");
|
||||||
|
elements.bind("click.validation", function () {
|
||||||
|
$this.trigger("change.validation", {includeEmpty: true});
|
||||||
|
});
|
||||||
|
return {minchecked: $this.data("validation" + name + "Minchecked"), elements: elements};
|
||||||
|
},
|
||||||
|
validate: function ($this, value, validator) {
|
||||||
|
return (validator.elements.filter(":checked").length < validator.minchecked && ! validator.negative)
|
||||||
|
|| (validator.elements.filter(":checked").length >= validator.minchecked && validator.negative);
|
||||||
|
},
|
||||||
|
blockSubmit: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
builtInValidators: {
|
||||||
|
email: {
|
||||||
|
name: "Email",
|
||||||
|
type: "shortcut",
|
||||||
|
shortcut: "validemail"
|
||||||
|
},
|
||||||
|
validemail: {
|
||||||
|
name: "Validemail",
|
||||||
|
type: "regex",
|
||||||
|
regex: "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\.[A-Za-z]{2,4}",
|
||||||
|
message: "Not a valid email address<!-- data-validator-validemail-message to override -->"
|
||||||
|
},
|
||||||
|
passwordagain: {
|
||||||
|
name: "Passwordagain",
|
||||||
|
type: "match",
|
||||||
|
match: "password",
|
||||||
|
message: "Does not match the given password<!-- data-validator-paswordagain-message to override -->"
|
||||||
|
},
|
||||||
|
positive: {
|
||||||
|
name: "Positive",
|
||||||
|
type: "shortcut",
|
||||||
|
shortcut: "number,positivenumber"
|
||||||
|
},
|
||||||
|
negative: {
|
||||||
|
name: "Negative",
|
||||||
|
type: "shortcut",
|
||||||
|
shortcut: "number,negativenumber"
|
||||||
|
},
|
||||||
|
number: {
|
||||||
|
name: "Number",
|
||||||
|
type: "regex",
|
||||||
|
regex: "([+-]?\\\d+(\\\.\\\d*)?([eE][+-]?[0-9]+)?)?",
|
||||||
|
message: "Must be a number<!-- data-validator-number-message to override -->"
|
||||||
|
},
|
||||||
|
integer: {
|
||||||
|
name: "Integer",
|
||||||
|
type: "regex",
|
||||||
|
regex: "[+-]?\\\d+",
|
||||||
|
message: "No decimal places allowed<!-- data-validator-integer-message to override -->"
|
||||||
|
},
|
||||||
|
positivenumber: {
|
||||||
|
name: "Positivenumber",
|
||||||
|
type: "min",
|
||||||
|
min: 0,
|
||||||
|
message: "Must be a positive number<!-- data-validator-positivenumber-message to override -->"
|
||||||
|
},
|
||||||
|
negativenumber: {
|
||||||
|
name: "Negativenumber",
|
||||||
|
type: "max",
|
||||||
|
max: 0,
|
||||||
|
message: "Must be a negative number<!-- data-validator-negativenumber-message to override -->"
|
||||||
|
},
|
||||||
|
required: {
|
||||||
|
name: "Required",
|
||||||
|
type: "required",
|
||||||
|
message: "This is required<!-- data-validator-required-message to override -->"
|
||||||
|
},
|
||||||
|
checkone: {
|
||||||
|
name: "Checkone",
|
||||||
|
type: "minchecked",
|
||||||
|
minchecked: 1,
|
||||||
|
message: "Check at least one option<!-- data-validation-checkone-message to override -->"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var formatValidatorName = function (name) {
|
||||||
|
return name
|
||||||
|
.toLowerCase()
|
||||||
|
.replace(
|
||||||
|
/(^|\s)([a-z])/g ,
|
||||||
|
function(m,p1,p2) {
|
||||||
|
return p1+p2.toUpperCase();
|
||||||
|
}
|
||||||
|
)
|
||||||
|
;
|
||||||
|
};
|
||||||
|
|
||||||
|
var getValue = function ($this) {
|
||||||
|
// Extract the value we're talking about
|
||||||
|
var value = $this.val();
|
||||||
|
var type = $this.attr("type");
|
||||||
|
if (type === "checkbox") {
|
||||||
|
value = ($this.is(":checked") ? value : "");
|
||||||
|
}
|
||||||
|
if (type === "radio") {
|
||||||
|
value = ($('input[name="' + $this.attr("name") + '"]:checked').length > 0 ? value : "");
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
};
|
||||||
|
|
||||||
|
function regexFromString(inputstring) {
|
||||||
|
return new RegExp("^" + inputstring + "$");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Thanks to Jason Bunting via StackOverflow.com
|
||||||
|
*
|
||||||
|
* http://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string#answer-359910
|
||||||
|
* Short link: http://tinyurl.com/executeFunctionByName
|
||||||
|
**/
|
||||||
|
function executeFunctionByName(functionName, context /*, args*/) {
|
||||||
|
var args = Array.prototype.slice.call(arguments).splice(2);
|
||||||
|
var namespaces = functionName.split(".");
|
||||||
|
var func = namespaces.pop();
|
||||||
|
for(var i = 0; i < namespaces.length; i++) {
|
||||||
|
context = context[namespaces[i]];
|
||||||
|
}
|
||||||
|
return context[func].apply(this, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.jqBootstrapValidation = function( method ) {
|
||||||
|
|
||||||
|
if ( defaults.methods[method] ) {
|
||||||
|
return defaults.methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
|
||||||
|
} else if ( typeof method === 'object' || ! method ) {
|
||||||
|
return defaults.methods.init.apply( this, arguments );
|
||||||
|
} else {
|
||||||
|
$.error( 'Method ' + method + ' does not exist on jQuery.jqBootstrapValidation' );
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
$.jqBootstrapValidation = function (options) {
|
||||||
|
$(":input").not("[type=image],[type=submit]").jqBootstrapValidation.apply(this,arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
})( jQuery );
|
||||||
@ -30,9 +30,9 @@ class saimod_sys_login extends \SYSTEM\SAI\SaiModule {
|
|||||||
|
|
||||||
public static function src_css(){}
|
public static function src_css(){}
|
||||||
public static function src_js(){return \SYSTEM\LOG\JsonResult::toString(
|
public static function src_js(){return \SYSTEM\LOG\JsonResult::toString(
|
||||||
array( \SYSTEM\WEBPATH(new \PPAGE(),'default_page/js/jqBootstrapValidation.js'),
|
array( \SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'js/jqBootstrapValidation.js'),
|
||||||
\SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_login/sai_sys_login_submit.js'),
|
\SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_login/sai_sys_login_submit.js'),
|
||||||
\SYSTEM\WEBPATH(new \PPAGE(),'default_page/js/crypto/jquery.md5.js'),
|
\SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'js/crypto/jquery.md5.js'),
|
||||||
\SYSTEM\WEBPATH(new \PPAGE(),'default_page/js/crypto/jquery.sha1.js')
|
\SYSTEM\WEBPATH(new \SYSTEM\PSAI(),'js/crypto/jquery.sha1.js')
|
||||||
));}
|
));}
|
||||||
}
|
}
|
||||||
@ -16,7 +16,7 @@ class saimod_sys_security extends \SYSTEM\SAI\SaiModule {
|
|||||||
$result = '<table class="table table-hover table-condensed" style="overflow: auto;">'.
|
$result = '<table class="table table-hover table-condensed" style="overflow: auto;">'.
|
||||||
'<tr>'.'<th>'.'ID'.'</th>'.'<th>'.'Username'.'</th>'.'<th>'.'EMail'.'</th>'.'<th>'.'JoinDate'.'</th>'.'<th>'.'Locale'.'</th>'.'<th>'.'Last Active'.'</th>'.'<th>'.'Flag'.'</th>'.'<th>'.'Rights'.'</th>'.'</tr>';
|
'<tr>'.'<th>'.'ID'.'</th>'.'<th>'.'Username'.'</th>'.'<th>'.'EMail'.'</th>'.'<th>'.'JoinDate'.'</th>'.'<th>'.'Locale'.'</th>'.'<th>'.'Last Active'.'</th>'.'<th>'.'Flag'.'</th>'.'<th>'.'Rights'.'</th>'.'</tr>';
|
||||||
while($r = $res->next()){
|
while($r = $res->next()){
|
||||||
$result .= '<tr class="'.self::tablerow_class($r['last_active']).'">'.'<td>'.$r['id'].'</td>'.'<td>'.$r['username'].'</td>'.'<td>'.$r['email'].'</td>'.'<td>'.$r['joindate'].'</td>'.'<td>'.$r['locale'].'</td>'.'<td>'.$r['last_active'].'</td>'.'<td>'.$r['account_flag'].'</td>'.'<td>'.'BUTTON'.'</td>'.'</tr>';
|
$result .= '<tr class="'.self::tablerow_class($r['last_active']).'">'.'<td>'.$r['id'].'</td>'.'<td>'.$r['username'].'</td>'.'<td>'.$r['email'].'</td>'.'<td>'.$r['joindate'].'</td>'.'<td>'.$r['locale'].'</td>'.'<td>'.$r['last_active'].'</td>'.'<td>'.$r['account_flag'].'</td>'.'<td>'.'<input type="submit" value="edit" user="'.$r['id'].'" action="edit"><input type="submit" value="delete" user="'.$r['id'].'" action="delete">'.'</td>'.'</tr>';
|
||||||
}
|
}
|
||||||
$result .= '</table>';
|
$result .= '</table>';
|
||||||
return $result;
|
return $result;
|
||||||
|
|||||||
@ -54,6 +54,8 @@ class default_page extends \SYSTEM\PAGE\Page {
|
|||||||
$vars['menu_sys'] = $this->menu_sys();
|
$vars['menu_sys'] = $this->menu_sys();
|
||||||
$vars['menu_proj'] = $this->menu_proj();
|
$vars['menu_proj'] = $this->menu_proj();
|
||||||
$vars['navimg'] = \SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_SAI_CONFIG_NAVIMG);
|
$vars['navimg'] = \SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_SAI_CONFIG_NAVIMG);
|
||||||
|
$vars['title'] = \SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_SAI_CONFIG_TITLE); //da_sense | Developer Center
|
||||||
|
$vars['copyright'] = \SYSTEM\CONFIG\config::get(\SYSTEM\CONFIG\config_ids::SYS_SAI_CONFIG_COPYRIGHT); //© <a href="http://www.da-sense.de" target="_blank">da_sense</a>, TU Darmstadt 2013
|
||||||
|
|
||||||
return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'page/default_page/sai.tpl'), $vars);
|
return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'page/default_page/sai.tpl'), $vars);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>da_sense | Developer Center</title>
|
<title>${title}</title>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||||
|
|
||||||
<link rel="icon" type="image/png" href="${navimg}" />
|
<link rel="icon" type="image/png" href="${navimg}" />
|
||||||
@ -34,7 +34,7 @@
|
|||||||
<div id="content-wrapper"></div>
|
<div id="content-wrapper"></div>
|
||||||
<hr>
|
<hr>
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<p>© <a href="http://www.da-sense.de" target="_blank">da_sense</a>, TU Darmstadt 2013</p>
|
<p>${copyright}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@ -1,15 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace SYSTEM;
|
namespace SYSTEM;
|
||||||
|
|
||||||
const C_ROOT = '<root>';
|
const C_ROOT = '<root>';
|
||||||
const C_SUBPATH = '<subpath>';
|
const C_SUBPATH = '<subpath>';
|
||||||
|
|
||||||
//move that 2 extern so we can modify without modifying system files
|
|
||||||
//const C_SERVER_ROOT = '/home/dasense/test/'; // root on the server
|
|
||||||
//const C_WEB_ROOT = '/test/'; // http://www.da-sense.de/
|
|
||||||
//const C_WEB_ADDRESS = 'http://www.da-sense.de';
|
|
||||||
|
|
||||||
abstract class PATH {
|
abstract class PATH {
|
||||||
abstract static public function getPath();
|
abstract static public function getPath();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,26 +0,0 @@
|
|||||||
<?php
|
|
||||||
$autoload = \SYSTEM\autoload::getInstance();
|
|
||||||
|
|
||||||
$autoload->registerFolder(dirname(__FILE__),'SYSTEM');
|
|
||||||
|
|
||||||
$autoload->registerFolder(dirname(__FILE__).'/../log/result','SYSTEM\LOG');
|
|
||||||
$autoload->registerFolder(dirname(__FILE__).'/../log','SYSTEM\LOG');
|
|
||||||
$autoload->registerFolder(dirname(__FILE__).'/../log/exceptions','SYSTEM\LOG');
|
|
||||||
$autoload->registerFolder(dirname(__FILE__).'/../log/error_handler','SYSTEM\LOG');
|
|
||||||
|
|
||||||
$autoload->registerFolder(dirname(__FILE__).'/../api','SYSTEM\API');
|
|
||||||
$autoload->registerFolder(dirname(__FILE__).'/../page','SYSTEM\PAGE');
|
|
||||||
|
|
||||||
$autoload->registerFolder(dirname(__FILE__).'/../dbd/tbl/','SYSTEM\DBD');
|
|
||||||
$autoload->registerFolder(dirname(__FILE__).'/../db','SYSTEM\DB');
|
|
||||||
$autoload->registerFolder(dirname(__FILE__).'/../db/dbinfo','SYSTEM\DB');
|
|
||||||
$autoload->registerFolder(dirname(__FILE__).'/../db/connection','SYSTEM\DB');
|
|
||||||
$autoload->registerFolder(dirname(__FILE__).'/../db/result','SYSTEM\DB');
|
|
||||||
|
|
||||||
$autoload->registerFolder(dirname(__FILE__).'/../security','SYSTEM\SECURITY');
|
|
||||||
|
|
||||||
$autoload->registerFolder(dirname(__FILE__).'/../config','SYSTEM\CONFIG');
|
|
||||||
|
|
||||||
$autoload->registerFolder(dirname(__FILE__).'/../cache','SYSTEM\CACHE');
|
|
||||||
|
|
||||||
$autoload->registerFolder(dirname(__FILE__).'/../sai','SYSTEM\SAI');
|
|
||||||
Loading…
x
Reference in New Issue
Block a user