Further progress on payment entries. There is an outstanding charges grid, but it doesn't have amounts due to the way I designed the ledger_entries element. I'll do a bit of rework on that next.
git-svn-id: file:///svn-source/pmgr/branches/ledger_transactions_20090605@163 97e9348a-65ac-dc4b-aefc-98561f571b83
This commit is contained in:
@@ -134,3 +134,105 @@ function fmtCurrency(amount) {
|
||||
}
|
||||
|
||||
|
||||
// REVISIT <AP>: 20090617
|
||||
// I would rather use XML to pass from JS to PHP, but at the
|
||||
// moment things were working just fine with serialize, and
|
||||
// I'm not keen on redesigning it at the moment. So, here
|
||||
// is a serialize implementation I found on the web.
|
||||
|
||||
function serialize( mixed_value ) {
|
||||
// http://kevin.vanzonneveld.net
|
||||
// + original by: Arpad Ray (mailto:arpad@php.net)
|
||||
// + improved by: Dino
|
||||
// + bugfixed by: Andrej Pavlovic
|
||||
// + bugfixed by: Garagoth
|
||||
// + input by: DtTvB (http://dt.in.th/2008-09-16.string-length-in-bytes.html)
|
||||
// + bugfixed by: Russell Walker
|
||||
// % note: We feel the main purpose of this function should be to ease the transport of data between php & js
|
||||
// % note: Aiming for PHP-compatibility, we have to translate objects to arrays
|
||||
// * example 1: serialize(['Kevin', 'van', 'Zonneveld']);
|
||||
// * returns 1: 'a:3:{i:0;s:5:"Kevin";i:1;s:3:"van";i:2;s:9:"Zonneveld";}'
|
||||
// * example 2: serialize({firstName: 'Kevin', midName: 'van', surName: 'Zonneveld'});
|
||||
// * returns 2: 'a:3:{s:9:"firstName";s:5:"Kevin";s:7:"midName";s:3:"van";s:7:"surName";s:9:"Zonneveld";}'
|
||||
|
||||
var _getType = function( inp ) {
|
||||
var type = typeof inp, match;
|
||||
var key;
|
||||
if (type == 'object' && !inp) {
|
||||
return 'null';
|
||||
}
|
||||
if (type == "object") {
|
||||
if (!inp.constructor) {
|
||||
return 'object';
|
||||
}
|
||||
var cons = inp.constructor.toString();
|
||||
match = cons.match(/(\w+)\(/);
|
||||
if (match) {
|
||||
cons = match[1].toLowerCase();
|
||||
}
|
||||
var types = ["boolean", "number", "string", "array"];
|
||||
for (key in types) {
|
||||
if (cons == types[key]) {
|
||||
type = types[key];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return type;
|
||||
};
|
||||
var type = _getType(mixed_value);
|
||||
var val, ktype = '';
|
||||
|
||||
switch (type) {
|
||||
case "function":
|
||||
val = "";
|
||||
break;
|
||||
case "undefined":
|
||||
val = "N";
|
||||
break;
|
||||
case "boolean":
|
||||
val = "b:" + (mixed_value ? "1" : "0");
|
||||
break;
|
||||
case "number":
|
||||
val = (Math.round(mixed_value) == mixed_value ? "i" : "d") + ":" + mixed_value;
|
||||
break;
|
||||
case "string":
|
||||
val = "s:" + encodeURIComponent(mixed_value).replace(/%../g, 'x').length + ":\"" + mixed_value + "\"";
|
||||
break;
|
||||
case "array":
|
||||
case "object":
|
||||
val = "a";
|
||||
/*
|
||||
if (type == "object") {
|
||||
var objname = mixed_value.constructor.toString().match(/(\w+)\(\)/);
|
||||
if (objname == undefined) {
|
||||
return;
|
||||
}
|
||||
objname[1] = serialize(objname[1]);
|
||||
val = "O" + objname[1].substring(1, objname[1].length - 1);
|
||||
}
|
||||
*/
|
||||
var count = 0;
|
||||
var vals = "";
|
||||
var okey;
|
||||
var key;
|
||||
for (key in mixed_value) {
|
||||
ktype = _getType(mixed_value[key]);
|
||||
if (ktype == "function") {
|
||||
continue;
|
||||
}
|
||||
|
||||
okey = (key.match(/^[0-9]+$/) ? parseInt(key, 10) : key);
|
||||
vals += serialize(okey) +
|
||||
serialize(mixed_value[key]);
|
||||
count++;
|
||||
}
|
||||
val += ":" + count + ":{" + vals + "}";
|
||||
break;
|
||||
}
|
||||
if (type != "object" && type != "array") {
|
||||
val += ";";
|
||||
}
|
||||
return val;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user