popufare_admin.js 42 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456
  1. // example usage:
  2. //
  3. // api_req({"ui_function":"manage_card.find", "api_function":"CardInfo", "data":[ ["action","search"],["mag_token","370000000007015"]]})
  4. //
  5. function api_req(ctx) {
  6. var xhr;
  7. xhr = new XMLHttpRequest();
  8. if (!xhr) { return false; }
  9. var param_val = [];
  10. for (var idx=0; idx<ctx.data.length; idx++) {
  11. param_val.push(ctx.data[idx][0] + '=' + ctx.data[idx][1]);
  12. }
  13. var api_func = "nop";
  14. if ("api_function" in ctx) { api_func = ctx["api_function"]; }
  15. var req_str = "api/v1/" + api_func + "?" + param_val.join("&");
  16. xhr.onreadystatechange = (function(_x,_f) {
  17. return function(v) { api_resp(_x, {"ui_function":_f}); }
  18. })(xhr, ctx["ui_function"])
  19. xhr.open("GET", req_str);
  20. xhr.send()
  21. }
  22. function update_message(ui_id, msg_type, msg_text) {
  23. var ele = document.getElementById(ui_id);
  24. if (msg_type === "error") { ele.style.color = "#f00"; }
  25. else { ele.style.color = "#007"; }
  26. ele.innerHTML = msg_text;
  27. }
  28. function update_pass_radio_button(page, pass_choice) {
  29. var _rid = ["pass_none", "pass_nride", "pass_nday", "pass_other"];
  30. for (var ii=0; ii<_rid.length; ii++) {
  31. var ele = document.getElementById("ui." + page + "." + _rid[ii]);
  32. ele.checked = false;
  33. }
  34. if (pass_choice === "none") {
  35. var ele = document.getElementById("ui." + page + ".pass_none");
  36. ele.checked = true;
  37. }
  38. else if (pass_choice === "nride") {
  39. var ele = document.getElementById("ui." + page + ".pass_nride");
  40. ele.checked = true;
  41. }
  42. else if (pass_choice === "nday") {
  43. var ele = document.getElementById("ui." + page + ".pass_nday");
  44. ele.checked = true;
  45. }
  46. else if (pass_choice === "other") {
  47. var ele = document.getElementById("ui." + page + ".pass_other");
  48. ele.checked = true;
  49. }
  50. }
  51. function api_resp(xhr,extra) {
  52. if (xhr.readyState === XMLHttpRequest.DONE) {
  53. if (xhr.status === 200) {
  54. var dat = JSON.parse(xhr.responseText);
  55. if (extra["ui_function"] === "manage_card.find") {
  56. console.log("manage_card.find", dat);
  57. if (dat["result"] == "fail") {
  58. manage_card_find_fill({});
  59. update_message("ui.manage_card.message", "error", dat["api_comment"]);
  60. return;
  61. }
  62. if (("cards"in dat) &&
  63. (dat.cards.length>0)) {
  64. update_message("ui.manage_card.message", "success", "");
  65. manage_card_find_fill(dat.cards[0]);
  66. }
  67. else {
  68. manage_card_find_fill({});
  69. update_message("ui.manage_card.message", "error", "no cards");
  70. }
  71. }
  72. else if (extra["ui_function"] === "manage_card.findone") {
  73. console.log("... manage_card.findone", dat);
  74. if (dat["result"] == "fail") {
  75. update_message("ui.manage_card.message", "error", dat["api_comment"]);
  76. manage_card_find_fill({});
  77. }
  78. else {
  79. update_message("ui.manage_card.message", "success", "");
  80. manage_card_find_fill(dat);
  81. }
  82. }
  83. else if (extra["ui_function"] === "manage_card.update") {
  84. console.log("issuing 'manage_card.update'");
  85. if (dat["result"] == "fail") {
  86. update_message("ui.manage_card.message", "error", dat["api_comment"]);
  87. }
  88. else {
  89. update_message("ui.manage_card.message", "success", "");
  90. var cardid = _get_input_field("ui.manage_card.logical_card_id");
  91. api_req({"api_function":"CardInfo", "ui_function":"manage_card.findone", "data":[["logical_card_id",cardid]]});
  92. }
  93. }
  94. else if (extra["ui_function"] === "create_user.finish") {
  95. if (dat["result"] === "success") {
  96. update_message("ui.manage_user.message", "success", "");
  97. _redirect( "manage_user?" + "action=get&userid=" + dat["userid"]);
  98. }
  99. else {
  100. update_message("ui.create_user.message", "error", dat.api_comment);
  101. console.log("FAIL:", dat);
  102. }
  103. }
  104. else if (extra["ui_function"] === "manage_user.find") {
  105. console.log("manage_user.find:", dat);
  106. if (dat["result"] === "success") {
  107. update_message("ui.manage_user.message", "success", "");
  108. manage_user_find_fill(dat);
  109. }
  110. else {
  111. update_message("ui.manage_user.message", "error", dat.api_comment);
  112. }
  113. }
  114. else if (extra["ui_function"] === "manage_user.update") {
  115. var userid = _get_input_field("ui.manage_user.userid");
  116. console.log("manage_user.update resp:", dat);
  117. if (dat["result"] === "success") {
  118. // After we've associated the card to the user, re-get user information to re-fill
  119. // page
  120. //
  121. update_message("ui.manage_user.message", "success", "")
  122. update_message("ui.manage_user.password_message", "success", "")
  123. update_message("ui.manage_user.card_message", "success", "")
  124. api_req({"api_function":"UserInfo", "ui_function":"manage_user.find", "data":[["userid",userid]]});
  125. }
  126. else {
  127. update_message("ui.manage_user.message", "error", dat.api_comment);
  128. }
  129. }
  130. else if (extra["ui_function"] === "manage_user.associate_card") {
  131. if (dat["result"] === "success") {
  132. update_message("ui.manage_user.message", "success", "")
  133. update_message("ui.manage_user.password_message", "success", "")
  134. update_message("ui.manage_user.card_message", "success", "")
  135. api_req({"api_function":"UserInfo", "ui_function":"manage_user.find", "data":[["userid",userid]]});
  136. }
  137. else {
  138. update_message("ui.manage_user.card_message", "error", dat.api_comment);
  139. }
  140. }
  141. else if (extra["ui_function"] === "reissue_card.find") {
  142. if (dat["result"] === "success") {
  143. update_message("ui.reissue_card.message", "success", "")
  144. reissue_card_fill(dat);
  145. }
  146. else {
  147. update_message("ui.reissue_card.message", "error", dat.api_comment);
  148. }
  149. }
  150. else if (extra["ui_function"] === "recycle_card.update") {
  151. if (dat["result"] === "success") {
  152. update_message("ui.recycle_card.message", "success", "")
  153. }
  154. else {
  155. update_message("ui.recycle_card.message", "error", dat.api_comment);
  156. }
  157. }
  158. else if (extra["ui_function"] === "add_card_block.add") {
  159. if (dat["result"] === "success") {
  160. update_message("ui.add_card_block.message", "success", "loaded");
  161. }
  162. else {
  163. update_message("ui.add_card_block.message", "error", dat.api_comment);
  164. }
  165. }
  166. else if (extra["ui_function"] === "ui_search.update") {
  167. console.log("search result:", dat);
  168. if (dat["result"] === "success") {
  169. update_message("ui.search.message", "success", "loaded");
  170. ui_search_fill(dat);
  171. }
  172. else {
  173. update_message("ui.search.message", "error", dat.api_comment);
  174. }
  175. }
  176. else if (extra["ui_function"] === "group") {
  177. }
  178. //else if (extra["ui_function"] === "manage_card.find") { manage_card_find_fill(dat); }
  179. }
  180. else {
  181. console.log("xhr error:", xhr);
  182. }
  183. }
  184. }
  185. function _param2hash(p) {
  186. var h = {};
  187. p = p.substring(1);
  188. var tokval = p.split("&");
  189. for (var idx=0; idx<tokval.length; idx++) {
  190. pv = tokval[idx].split("=");
  191. h[pv[0]] = pv[1];
  192. }
  193. return h;
  194. }
  195. function _attach_button(btn_id, cb) {
  196. ele = document.getElementById(btn_id);
  197. if (ele) { ele.onclick = cb; }
  198. }
  199. function _redirect(rel_str) {
  200. console.log("redirect", rel_str);
  201. window.location.href = rel_str;
  202. }
  203. function _fill_input_field(fid, fdata) {
  204. var ele = document.getElementById(fid);
  205. if (ele) {
  206. if (ele.nodeName === "DIV") { ele.innerHTML = fdata; }
  207. else { ele.value = fdata; }
  208. }
  209. }
  210. function _get_input_field(fid) {
  211. var ele = document.getElementById(fid);
  212. if (ele) { return ele.value; }
  213. return null;
  214. }
  215. function _get_select(fid) {
  216. var ele = document.getElementById(fid);
  217. if (ele) {
  218. return ele.options[ele.selectedIndex].value;
  219. }
  220. return null;
  221. }
  222. function _get_select_id(fid) {
  223. var ele = document.getElementById(fid);
  224. if (ele) {
  225. return ele.options[ele.selectedIndex].id;
  226. }
  227. return null;
  228. }
  229. function _date_only(s) {
  230. if (!s) { return s; }
  231. if (s.length > 0) {
  232. return s.split(" ")[0];
  233. }
  234. return s;
  235. }
  236. function _create_pass_row(dat) {
  237. var pass_table = document.getElementById("ui.manage_card.list_passes");
  238. var _cb = "<input type='checkbox' id='xxx' name='xxx'>";
  239. while (pass_table.firstChild) {
  240. pass_table.removeChild(pass_table.lastChild);
  241. }
  242. var row = document.createElement("div");
  243. row.classList.add("row");
  244. row.classList.add("rowpop");
  245. row.classList.add("row-shade");
  246. var fields_width = [1,1,1,1,2,2,2,2];
  247. //var fields = ["x", "Type", "Original", "Remain", "Exp.", "Issued", "First Used", "Last Used"];
  248. var fields = ['', "Type", "Original", "Remain", "Exp.", "Issued", "First Used", "Last Used"];
  249. for (var idx=0; idx<fields.length; idx++) {
  250. var cell = document.createElement("div");
  251. cell.innerHTML = fields[idx];
  252. cell.classList.add("col-" + fields_width[idx]);
  253. row.appendChild(cell);
  254. }
  255. pass_table.appendChild(row);
  256. for (var idx=0; idx<dat["pass"].length; idx++) {
  257. var pass_data = dat["pass"][idx];
  258. var passid = pass_data["user_pass_id"];
  259. var pass_type = "unk";
  260. var pass_rule = pass_data["rule"];
  261. var pass_orig = "";
  262. var pass_remain = "";
  263. var pass_exp = "";
  264. if (pass_rule.search(/NRIDE/) >= 0) {
  265. pass_type = "NRide";
  266. pass_orig = pass_data["nrides_orig"];
  267. pass_remain = pass_data["nrides_remain"];
  268. pass_exp = "";
  269. }
  270. else if (pass_rule.search(/NDAY/) >= 0) {
  271. pass_type = "NDay";
  272. pass_orig = pass_data["nday_orig"];
  273. pass_remain = "";
  274. pass_exp = pass_data["nday_expiration"];
  275. }
  276. else {
  277. pass_type = "Other";
  278. }
  279. var pass_firstused = "";
  280. var pass_lastused = "";
  281. if ( (typeof pass_data["firstused"] !== "undefined") &&
  282. (pass_data["firstused"]) ) {
  283. pass_firstused = pass_data["firstused"];
  284. }
  285. if ( (typeof pass_data["lastused"] !== "undefined") &&
  286. (pass_data["lastused"]) ) {
  287. pass_lastused = pass_data["lastused"];
  288. }
  289. row = document.createElement("div");
  290. row.classList.add("row");
  291. row.classList.add("rowpop");
  292. if ((idx%2)==1) {
  293. row.classList.add("row-shade");
  294. }
  295. //var cell = document.createElement("div");
  296. //cell.innerHTML = "x";
  297. var cell = document.createElement("input");
  298. cell.setAttribute('type', 'checkbox');
  299. cell.setAttribute('value', '');
  300. cell.setAttribute('id', "ui.manage_card.cb_" + idx + "_pass");
  301. cell.classList.add("col-" + fields_width[0]);
  302. row.appendChild(cell);
  303. //cell.classList.add("col-" + fields_width[0]);
  304. //row.appendChild(cell);
  305. cell = document.createElement("div");
  306. cell.innerHTML = pass_type;
  307. cell.classList.add("col-" + fields_width[1]);
  308. row.appendChild(cell);
  309. cell = document.createElement("div");
  310. cell.innerHTML = pass_orig;
  311. cell.classList.add("col-" + fields_width[2]);
  312. row.appendChild(cell);
  313. cell = document.createElement("div");
  314. cell.innerHTML = pass_remain;
  315. cell.classList.add("col-" + fields_width[3]);
  316. row.appendChild(cell);
  317. cell = document.createElement("div");
  318. //cell.innerHTML = pass_exp;
  319. cell.innerHTML = _date_only(pass_exp);
  320. cell.classList.add("col-" + fields_width[4]);
  321. row.appendChild(cell);
  322. cell = document.createElement("div");
  323. //cell.innerHTML = pass_data["issued"];
  324. cell.innerHTML = _date_only(pass_data["issued"]);
  325. cell.classList.add("col-" + fields_width[5]);
  326. row.appendChild(cell);
  327. cell = document.createElement("div");
  328. //cell.innerHTML = pass_firstused;
  329. cell.innerHTML = _date_only(pass_firstused);
  330. cell.classList.add("col-" + fields_width[6]);
  331. row.appendChild(cell);
  332. cell = document.createElement("div");
  333. cell.innerHTML = pass_lastused;
  334. cell.classList.add("col-" + fields_width[7]);
  335. row.appendChild(cell);
  336. cell = document.createElement("div");
  337. cell.innerHTML = passid;
  338. cell.setAttribute('id', "ui.manage_card.row_" + idx + "_pass");
  339. cell.style.display = "none";
  340. row.appendChild(cell);
  341. pass_table.appendChild(row);
  342. }
  343. }
  344. function manage_card_find_fill(data) {
  345. var fields = [ "logical_card_id", "group", "mag_token", "rfid_token"];
  346. var user_fields = [ "userid", "username", "first_name", "last_name",
  347. "email", "phone", "address", "city", "state", "zip", "group" ];
  348. console.log("manage_card_find_fill:", data);
  349. for (var idx=0; idx<fields.length; idx++) {
  350. _fill_input_field("ui.manage_card." + fields[idx], "");
  351. }
  352. _fill_input_field("ui.manage_card.disp_userid", "");
  353. for (var idx=0; idx<fields.length; idx++) {
  354. if (fields[idx] in data) {
  355. _fill_input_field("ui.manage_card." + fields[idx], data[fields[idx]])
  356. }
  357. }
  358. for (_user_key in user_fields) {
  359. _fill_input_field("ui.manage_card." + user_fields[_user_key], "");
  360. }
  361. if ("user" in data) {
  362. for (_key in data["user"]) {
  363. _fill_input_field("ui.manage_card." + _key, data["user"][_key]);
  364. }
  365. if ("userid" in data["user"]) {
  366. _fill_input_field("ui.manage_card.disp_userid", data["user"]["userid"]);
  367. }
  368. }
  369. console.log("cp0");
  370. if ("pass" in data) {
  371. _create_pass_row(data);
  372. }
  373. window.history.replaceState({}, document.title, "/manage_card");
  374. }
  375. function manage_card_find_cardid() {
  376. var cardid = _get_input_field("ui.manage_card.logical_card_id");
  377. console.log("??", cardid);
  378. api_req({"api_function":"CardInfo", "ui_function":"manage_card.find", "data": [ ["action","search"], ["logical_card_id",cardid] ] });
  379. }
  380. function manage_card_find_magstripe() {
  381. var mag = _get_input_field("ui.manage_card.mag_token");
  382. api_req({"api_function":"CardInfo", "ui_function":"manage_card.find", "data": [ ["action","search"],["mag_token",mag] ] });
  383. }
  384. function manage_card_find_rfid() {
  385. var rfid = _get_input_field("ui.manage_card.rfid_token");
  386. api_req({"api_function":"CardInfo", "ui_function":"manage_card.find", "data": [ ["action","search"],["rfid_token",rfid] ] });
  387. }
  388. function manage_user_find_fill(data) {
  389. var fields = [ "userid", "username", "first_name", "last_name",
  390. "email", "phone", "address", "city", "state", "zip",
  391. "shipping_name", "shipping_city", "shipping_state", "shipping_address",
  392. "shipping_country_code", "shipping_country_name",
  393. "shipping_zip", "password"];
  394. for (_user_key in fields) {
  395. _fill_input_field("ui.manage_card." + _user_key, "");
  396. }
  397. if ("user" in data) {
  398. var user_data = data["user"];
  399. for (var idx=0; idx<fields.length; idx++) {
  400. if (fields[idx] in user_data) {
  401. _fill_input_field("ui.manage_user." + fields[idx], user_data[fields[idx]])
  402. }
  403. }
  404. }
  405. if ("card" in data) {
  406. var card_table = document.getElementById("ui.manage_user.list_cards");
  407. while (card_table.firstChild) {
  408. card_table.removeChild(card_table.lastChild);
  409. }
  410. var row = document.createElement("div");
  411. row.classList.add("row");
  412. row.classList.add("rowpop");
  413. row.classList.add("row-shade");
  414. var cell = document.createElement("div");
  415. cell.innerHTML = "Card Id";
  416. cell.classList.add("col-4");
  417. row.appendChild(cell);
  418. cell = document.createElement("div");
  419. cell.innerHTML = "Mag Stripe";
  420. cell.classList.add("col-4");
  421. row.appendChild(cell);
  422. cell = document.createElement("div");
  423. cell.innerHTML = "RFID";
  424. cell.classList.add("col-4");
  425. row.appendChild(cell);
  426. card_table.appendChild(row);
  427. var card_data = data["card"];
  428. for (var idx=0; idx<card_data.length; idx++) {
  429. var cardid = card_data[idx]["logical_card_id"];
  430. var magid = card_data[idx]["mag_token"];
  431. var rfid = card_data[idx]["rfid_token"];
  432. row = document.createElement("div");
  433. row.classList.add("row");
  434. row.classList.add("rowpop");
  435. if ((idx % 2) == 1) {
  436. row.classList.add("row-shade");
  437. }
  438. cell = document.createElement("div");
  439. cell.innerHTML = "<a href='/manage_card?logical_card_id=" + cardid + "'>" + cardid + "</a>";
  440. cell.classList.add("col-4");
  441. row.appendChild(cell);
  442. cell = document.createElement("div");
  443. cell.innerHTML = "<a href='/manage_card?logical_card_id=" + cardid + "'>" + magid + "</a>";
  444. cell.classList.add("col-4");
  445. row.appendChild(cell);
  446. cell = document.createElement("div");
  447. cell.innerHTML = "<a href='/manage_card?logical_card_id=" + cardid + "'>" + rfid + "</a>";
  448. cell.classList.add("col-4");
  449. row.appendChild(cell);
  450. card_table.appendChild(row);
  451. console.log("card", idx,
  452. card_data[idx]["logical_card_id"],
  453. card_data[idx]["mag_token"],
  454. card_data[idx]["rfid_token"] );
  455. }
  456. }
  457. window.history.replaceState({}, document.title, "/manage_user");
  458. }
  459. // --------------------------------------
  460. // --------------------------------------
  461. // --------------------------------------
  462. // --------------------------------------
  463. // --------------------------------------
  464. function add_card_block() {
  465. var pass = [ "none", "nride", "nday", "other" ];
  466. var mag_token = _get_input_field("ui.add_card_block.mag_token");
  467. var rfid_pfx = _get_input_field("ui.add_card_block.rfid_prefix");
  468. var rfid_val = _get_input_field("ui.add_card_block.rfid_value");
  469. var group_id = _get_select_id("ui.add_card_block.group");
  470. var count = _get_input_field("ui.add_card_block.count")
  471. var rfid_token = "";
  472. if (rfid_pfx && (rfid_pfx.length > 0) && rfid_val && (rfid_val.length > 0)) {
  473. rfid_token = "26:" + rfid_pfx + ":" + rfid_val;
  474. }
  475. if ((mag_token.length==0) && (rfid_token.length==0)) {
  476. update_message("ui.add_card_block.message", "error", "Please provide Magstripe or RFID");
  477. return;
  478. }
  479. if (count == "") {
  480. update_message("ui.add_card_block.message", "error", "Count must be positive");
  481. return;
  482. }
  483. update_message("ui.add_card_block.message", "success", "");
  484. var dat = {
  485. "api_function":"AddCardBlock",
  486. "ui_function":"add_card_block.add",
  487. "data": [
  488. ["group_id",group_id],
  489. ["count",count]
  490. ]
  491. };
  492. if (mag_token.length > 0) {
  493. if (mag_token.split(":").length == 1) {
  494. mag_token = "2:" + mag_token;
  495. }
  496. dat.data.push(["mag_token", mag_token]);
  497. }
  498. if (rfid_token.length > 0) {
  499. if (rfid_token.split(":").length < 2) {
  500. rfid_token = "26:" + rfid_token;
  501. }
  502. dat.data.push(["rfid_token", rfid_token]);
  503. }
  504. var pass_kind = "none";
  505. for (var ii=0; ii<pass.length; ii++) {
  506. var ele = document.getElementById("ui.add_card_block.pass_" + pass[ii]);
  507. if (ele.checked) {
  508. pass_kind = pass[ii];
  509. break;
  510. }
  511. }
  512. if (pass_kind == "other") {
  513. dat.data.push(["pass_class" , 'OTHER']);
  514. dat.data.push(["pass_rule" , _get_select("ui.add_card_block.pass_other_rule") ]);
  515. }
  516. else if (pass_kind === "nday") {
  517. var pass_nday_type = _get_select("ui.add_card_block.pass_nday_type");
  518. var pass_nday_region = _get_select("ui.add_card_block.pass_nday_region");
  519. var pass_nday_quantity = _get_select("ui.add_card_block.pass_nday_quantity");
  520. var pass_nday_other = _get_input_field("ui.add_card_block.pass_nday_quantity");
  521. var rule = 'TEST-ORG-NDAY';
  522. var nday = pass_nday_quantity;
  523. if (pass_nday_other && pass_nday_other.length > 0) {
  524. nday = pass_nday_other;
  525. }
  526. dat.data.push(["pass_class" , 'NDAY']);
  527. dat.data.push(["pass_rule", rule]);
  528. dat.data.push(["pass_nday_orig", nday]);
  529. }
  530. else if (pass_kind === "nride") {
  531. var pass_nride_type = _get_select("ui.add_card_block.pass_nride_type");
  532. var pass_nride_region = _get_select("ui.add_card_block.pass_nride_region");
  533. var pass_nride_quantity = _get_input_field("ui.add_card_block.pass_nride_quantity");
  534. var pass_nride_other = _get_input_field("ui.add_card_block.pass_nride_other");
  535. var rule = 'TEST-ORG-NRIDE';
  536. var nride = pass_nride_quantity;
  537. if (pass_nride_other && pass_nride_other.length > 0) {
  538. nride = pass_nride_other;
  539. }
  540. dat.data.push(["pass_class", 'NRIDE']);
  541. dat.data.push(["pass_rule", rule]);
  542. dat.data.push(["pass_nrides_orig", nride]);
  543. dat.data.push(["pass_nrides_remain", nride]);
  544. }
  545. console.log("add_card_block: sending", dat);
  546. api_req(dat);
  547. }
  548. // --------------------------------------
  549. // --------------------------------------
  550. // --------------------------------------
  551. // --------------------------------------
  552. // --------------------------------------
  553. function recycle_card() {
  554. var fields = [ "mag_token", "rfid_token_a", "rfid_token_b",
  555. "pass_nride_other",
  556. "pass_nday_other" ];
  557. var pass = [ "none", "nride", "nday", "other" ];
  558. var h_in = {};
  559. for (var idx=0; idx<fields.length; idx++) {
  560. var field = fields[idx];
  561. var val = _get_input_field("ui.recycle_card." + field);
  562. if (val && (val.length > 0)) { h_in[field] = val; }
  563. }
  564. var rfid_prefx = "26";
  565. if (("rfid_token_a" in h_in) && ("rfid_token_b" in h_in)) {
  566. h_in["rfid_token"] = rfid_prefix + ":" + h_in["rfid_token_a"] + ":" + h_in["rfid_token_b"];
  567. }
  568. var pass_kind = "none";
  569. for (var ii=0; ii<pass.length; ii++) {
  570. var ele = document.getElementById("ui.recycle_card.pass_" + pass[ii]);
  571. if (ele.checked) {
  572. pass_kind = pass[ii];
  573. break;
  574. }
  575. }
  576. var group = _get_select("ui.recycle_card.group");
  577. var other_rule = _get_select("ui.recycle_card.pass_other_rule");
  578. var pass_nday_type = _get_select("ui.recycle_card.pass_nday_type");
  579. var pass_nday_region = _get_select("ui.recycle_card.pass_nday_region");
  580. var pass_nday_quantity = _get_select("ui.recycle_card.pass_nday_quantity");
  581. var pass_nride_type = _get_select("ui.recycle_card.pass_nride_type");
  582. var pass_nride_region = _get_select("ui.recycle_card.pass_nride_region");
  583. var pass_nride_quantity = _get_select("ui.recycle_card.pass_nride_quantity");
  584. var dat = {
  585. "api_function":"RecycleCard",
  586. "ui_function":"recycle.update",
  587. "data": [
  588. //["mag_token",h_in["mag_token"]],
  589. //["rfid_token",h_in["rfid_token"]],
  590. ["group",group]
  591. ]
  592. };
  593. if ("mag_token" in h_in) {
  594. dat.data.push(["mag_token", h_in["mag_token"]]);
  595. }
  596. if ("rfid_token" in h_in) {
  597. dat.data.push(["rfid_token", h_in["rfid_token"]]);
  598. }
  599. if (pass_kind == "nday") {
  600. pass_rule = group + "-NDAY";
  601. dat.data.push( ["pass_rule",pass_rule ] );
  602. dat.data.push( ["pass_val", pass_nday_quantity ] );
  603. dat.data.push( ["pass_class", "NDAY" ] );
  604. }
  605. else if (pass_kind == "nride") {
  606. pass_rule = group + "-NRIDE";
  607. dat.data.push( ["pass_rule", pass_rule ] );
  608. dat.data.push( ["pass_val", pass_nride_quantity ] );
  609. dat.data.push( ["pass_class", "NRIDE" ] );
  610. }
  611. else if (pass_kind == "other") {
  612. pass_rule = other_rule;
  613. dat.data.push( ["pass_rule", pass_rule ] );
  614. dat.data.push( ["pass_class", "OTHER" ] );
  615. }
  616. console.log("recycle:>>>", dat);
  617. api_req(dat);
  618. }
  619. function recycle_card_radio(radio_button) {
  620. var _rid = ["pass_none", "pass_nride", "pass_nday", "pass_other"];
  621. for (var ii=0; ii<_rid.length; ii++) {
  622. var ele = document.getElementById("ui.recycle_card." + _rid[ii]);
  623. ele.checked = false;
  624. }
  625. if (radio_button === "none") {
  626. var ele = document.getElementById("ui.recycle_card.pass_none");
  627. ele.checked = true;
  628. }
  629. else if (radio_button === "nride") {
  630. var ele = document.getElementById("ui.recycle_card.pass_nride");
  631. ele.checked = true;
  632. }
  633. else if (radio_button === "nday") {
  634. var ele = document.getElementById("ui.recycle_card.pass_nday");
  635. ele.checked = true;
  636. }
  637. else if (radio_button === "other") {
  638. var ele = document.getElementById("ui.recycle_card.pass_other");
  639. ele.checked = true;
  640. }
  641. }
  642. // --------------------------------------
  643. // --------------------------------------
  644. // --------------------------------------
  645. // --------------------------------------
  646. // --------------------------------------
  647. function reissue_card() {
  648. var fields = [ "source_magstripe", "source_rfid_a", "source_rfid_b",
  649. "dest_magstripe", "dest_rfid_a", "dest_rfid_b" ];
  650. var data = [];
  651. for (var idx=0; idx<fields.length; idx++) {
  652. var field = fields[idx];
  653. var val = _get_input_field("ui.reissue_card." + field);
  654. if (val.length > 0) {
  655. data.push([ field, val ]);
  656. }
  657. }
  658. console.log("REISSUE (not implemented):", data);
  659. var dat = {
  660. "api_function":"Reissue",
  661. "ui_function":"reissue.update",
  662. "data": [
  663. ["source_logical_card_id",cardid],
  664. ["source_mag_token","..."],
  665. ["source_rfid_token","..."],
  666. ["source_group","..."],
  667. ["destination_mag_token","..."],
  668. ["destination_rfid_token","..."]
  669. ["destination_group","..."]
  670. ]};
  671. //api_req(dat);
  672. }
  673. function reissue_card_fill(card_data) {
  674. if (typeof card_data === "undefined") { return; }
  675. if ( (!("cards" in card_data)) || (card_data.cards.length==0)) {
  676. return;
  677. }
  678. var card = card_data.cards[0];
  679. if ("mag_token" in card) {
  680. _fill_input_field("ui.reissue_card.source_magstripe", card["mag_token"]);
  681. }
  682. if ("rfid_token" in card) {
  683. var tok = card["rfid_token"].split(":");
  684. var rfid_a = "", rfid_b = "";
  685. if (tok.length >= 3) {
  686. rfid_a = tok[1];
  687. rfid_b = tok[2];
  688. }
  689. _fill_input_field("ui.reissue_card.source_rfid_a", rfid_a);
  690. _fill_input_field("ui.reissue_card.source_rfid_b", rfid_b);
  691. }
  692. if ("group" in card) {
  693. }
  694. }
  695. // --------------------------------------
  696. // --------------------------------------
  697. // --------------------------------------
  698. // --------------------------------------
  699. // --------------------------------------
  700. function ui_search(search_type) {
  701. var txt = _get_input_field( "ui.search." + search_type);
  702. var dat = {
  703. "api_function":"Search",
  704. "ui_function":"ui_search.update",
  705. "data": [
  706. ["search_type", search_type],
  707. ["search_string", txt]
  708. ]};
  709. api_req(dat);
  710. }
  711. function _html_card_row(cardid, magid, rfid, idx) {
  712. idx = ((typeof idx === "undefined") ? 0 : idx);
  713. magid = ((typeof magid === "undeifned") ? "" : (magid ? magid : ""))
  714. rfid = ((typeof rfid === "undeifned") ? "" : (rfid ? rfid : ""))
  715. var row, cell;
  716. row = document.createElement("div");
  717. row.classList.add("row");
  718. row.classList.add("rowpop");
  719. if ((idx % 2) == 1) {
  720. row.classList.add("row-shade");
  721. }
  722. cell = document.createElement("div");
  723. cell.innerHTML = "<a href='/manage_card?logical_card_id=" + cardid + "'>" + cardid + "</a>";
  724. cell.classList.add("col-4");
  725. row.appendChild(cell);
  726. cell = document.createElement("div");
  727. cell.innerHTML = "<a href='/manage_card?logical_card_id=" + cardid + "'>" + magid + "</a>";
  728. cell.classList.add("col-4");
  729. row.appendChild(cell);
  730. cell = document.createElement("div");
  731. cell.innerHTML = "<a href='/manage_card?logical_card_id=" + cardid + "'>" + rfid + "</a>";
  732. cell.classList.add("col-4");
  733. row.appendChild(cell);
  734. return row;
  735. }
  736. function _html_user_row(user_info, idx) {
  737. idx = ((typeof idx === "undefined") ? 0 : idx);
  738. var row, cell;
  739. var userid = user_info["userid"];
  740. var username = "";
  741. if (("username" in user_info) &&
  742. (user_info["username"])) {
  743. username = user_info["username"];
  744. }
  745. var first_name = "";
  746. if (("first_name" in user_info) &&
  747. (user_info["first_name"])) {
  748. first_name = user_info["first_name"];
  749. }
  750. var last_name = "";
  751. if (("last_name" in user_info) &&
  752. (user_info["last_name"])) {
  753. last_name = user_info["last_name"];
  754. }
  755. row = document.createElement("div");
  756. row.classList.add("row");
  757. row.classList.add("rowpop");
  758. if ((idx % 2) == 1) {
  759. row.classList.add("row-shade");
  760. }
  761. cell = document.createElement("div");
  762. cell.innerHTML = "<a href='/manage_user?userid=" + userid + "'>" + userid + "</a>";
  763. cell.classList.add("col-4");
  764. row.appendChild(cell);
  765. cell = document.createElement("div");
  766. cell.innerHTML = "<a href='/manage_user?userid=" + userid + "'>" + username + "</a>";
  767. cell.classList.add("col-4");
  768. row.appendChild(cell);
  769. cell = document.createElement("div");
  770. cell.innerHTML = "<a href='/manage_user?userid=" + userid + "'>" + first_name + " " + last_name + "</a>";
  771. cell.classList.add("col-4");
  772. row.appendChild(cell);
  773. return row;
  774. }
  775. function _html_admin_row(admin_info, idx) {
  776. idx = ((typeof idx === "undefined") ? 0 : idx);
  777. var row, cell;
  778. var userid = admin_info["userid"];
  779. var username = "";
  780. if (("username" in admin_info) &&
  781. (admin_info["username"])) {
  782. username = admin_info["username"];
  783. }
  784. var group_id = "";
  785. if (("group_id" in admin_info) &&
  786. (admin_info["group_id"])) {
  787. group_id = admin_info["group_id"];
  788. }
  789. row = document.createElement("div");
  790. row.classList.add("row");
  791. row.classList.add("rowpop");
  792. if ((idx % 2) == 1) {
  793. row.classList.add("row-shade");
  794. }
  795. cell = document.createElement("div");
  796. cell.innerHTML = "<a href='/manage_admin?userid=" + userid + "'>" + userid + "</a>";
  797. cell.classList.add("col-4");
  798. row.appendChild(cell);
  799. cell = document.createElement("div");
  800. cell.innerHTML = "<a href='/manage_admin?userid=" + userid + "'>" + username + "</a>";
  801. cell.classList.add("col-4");
  802. row.appendChild(cell);
  803. cell = document.createElement("div");
  804. cell.innerHTML = "<a href='/manage_admin?userid=" + userid + "'>" + group_id + "</a>";
  805. cell.classList.add("col-4");
  806. row.appendChild(cell);
  807. return row;
  808. }
  809. function ui_search_fill(data) {
  810. var result_table = document.getElementById("ui.search.results");
  811. while (result_table.firstChild) {
  812. result_table.removeChild(result_table.lastChild);
  813. }
  814. var row, col, cell, a;
  815. var query_data = data.data;
  816. for (var idx=0; idx<query_data.length; idx++) {
  817. var _h = query_data[idx];
  818. if ("iscard" in _h) {
  819. row = _html_card_row( _h["logical_card_id"], _h["mag_token"], _h["rfid_token"], idx );
  820. result_table.appendChild(row);
  821. }
  822. else if ("isadmin" in _h) {
  823. row = _html_user_row( _h );
  824. result_table.appendChild(row);
  825. }
  826. else if ("isuser" in _h) {
  827. row = _html_user_row( _h );
  828. result_table.appendChild(row);
  829. }
  830. }
  831. }
  832. // --------------------------------------
  833. // --------------------------------------
  834. // --------------------------------------
  835. // --------------------------------------
  836. // --------------------------------------
  837. function manage_card_redirect_manage_user() {
  838. var userid = _get_input_field("ui.manage_card.userid");
  839. _redirect( "manage_user?" + "action=get&userid=" + userid);
  840. }
  841. function manage_card_reissue() {
  842. var cardid = _get_input_field("ui.manage_card.logical_card_id");
  843. _redirect( "reissue_card?" + "action=get&logical_card_id=" + cardid);
  844. }
  845. function manage_card_add_pass(pass_type) {
  846. //var cardid = _get_input_field("ui.manage_card.logical_card_id");
  847. console.log("manage_card_add_pass:", cardid, pass_type);
  848. var dat = {
  849. "api_function":"Pass",
  850. "ui_function":"manage_card.update",
  851. "data": [
  852. ["logical_card_id",cardid],
  853. ["nrides_orig", 3],
  854. ["nrides_remain", 2],
  855. ["nday_orig", 5],
  856. ["rule", "ORIG-NRIDE"]
  857. ]};
  858. api_req(dat);
  859. }
  860. function manage_card_add_pass_nride() {
  861. var cardid = _get_input_field("ui.manage_card.logical_card_id");
  862. var nrides_orig = _get_input_field("ui.manage_card.pass_nride_other");
  863. if (nrides_orig.length == 0) {
  864. nrides_orig = _get_select("ui.manage_card.pass_nride_orig");
  865. }
  866. var rule = "ORG";
  867. rule += "-" + _get_select("ui.manage_card.pass_nride_type");
  868. rule += "-" + _get_select("ui.manage_card.pass_nride_region");
  869. var api_data = {
  870. "api_function":"Pass",
  871. "ui_function":"manage_card.update",
  872. "data" : [
  873. ["action","add"],
  874. ["logical_card_id" , cardid],
  875. ["nrides_orig" , nrides_orig],
  876. ["nrides_remain" , nrides_orig],
  877. ["rule" , rule]
  878. ]
  879. };
  880. //DEBUG
  881. console.log(">>nride++", api_data);
  882. api_req(api_data);
  883. }
  884. function manage_card_add_pass_nday() {
  885. var cardid = _get_input_field("ui.manage_card.logical_card_id");
  886. var nday_orig = _get_input_field("ui.manage_card.pass_nday_other");
  887. if (nday_orig.length == 0) {
  888. nday_orig = _get_select("ui.manage_card.pass_nday_orig");
  889. }
  890. var rule = "ORG";
  891. rule += "-" + _get_select("ui.manage_card.pass_nday_type");
  892. rule += "-" + _get_select("ui.manage_card.pass_nday_region");
  893. var api_data = {
  894. "api_function":"Pass",
  895. "ui_function":"manage_card.update",
  896. "data" : [
  897. ["action","add"],
  898. ["logical_card_id" , cardid],
  899. ["nday_orig" , nday_orig],
  900. ["rule" , rule]
  901. ]
  902. };
  903. //DEBUG
  904. console.log(">>nday++", api_data);
  905. api_req(api_data);
  906. }
  907. function manage_card_add_pass_other() {
  908. var cardid = _get_input_field("ui.manage_card.logical_card_id");
  909. var ui_ele = document.getElementById("ui.manage_card.pass_other");
  910. var rule = ui_ele.options[ui_ele.selectedIndex].id;
  911. var api_data = {
  912. "api_function":"Pass",
  913. "ui_function":"manage_card.update",
  914. "data" : [
  915. ["action","add"],
  916. ["logical_card_id" , cardid],
  917. ["rule" , rule]
  918. ]
  919. };
  920. //DEBUG
  921. console.log(">>other++", api_data);
  922. api_req(api_data);
  923. }
  924. function manage_card_delete_pass() {
  925. var cardid = _get_input_field("ui.manage_card.logical_card_id");
  926. var ele = document.getElementById("ui.manage_card.list_passes");
  927. var n = ele.children.length;
  928. n-=1;
  929. for (var ii=0; ii<n; ii++) {
  930. var cb = document.getElementById("ui.manage_card.cb_" + ii + "_pass");
  931. if (!cb.checked) { continue; }
  932. var v = document.getElementById("ui.manage_card.row_"+ ii + "_pass");
  933. var passid = v.innerHTML;
  934. console.log("deleting pass", passid, "(card:", cardid,")");
  935. if (cb.checked) {
  936. var dat = {
  937. "api_function":"Pass",
  938. "ui_function":"manage_card.update",
  939. "data": [
  940. ["action", "deactivate"],
  941. ["logical_card_id",cardid],
  942. ["user_pass_id", passid]
  943. ]};
  944. api_req(dat);
  945. }
  946. }
  947. }
  948. function manage_card_toggle_pass_select() {
  949. var ele = document.getElementById("ui.manage_card.list_passes");
  950. var n = ele.children.length;
  951. n-=1;
  952. for (var ii=0; ii<n; ii++) {
  953. var cb = document.getElementById("ui.manage_card.cb_" + ii + "_pass");
  954. if (cb.checked) { cb.checked = false; }
  955. else { cb.checked = true; }
  956. }
  957. }
  958. // --------------------------------------
  959. // --------------------------------------
  960. function manage_user_find_userid() {
  961. var userid = _get_input_field("ui.manage_user.userid");
  962. api_req({"api_function":"UserInfo", "ui_function":"manage_user.find", "data": [ ["userid",userid] ] });
  963. }
  964. function manage_user_find_username() {
  965. var ele = document.getElementById("ui.manage_user.username");
  966. var username = ele.value;
  967. api_req({"api_function":"UserInfo", "ui_function":"manage_user.find", "data":[["username",username]]});
  968. }
  969. function manage_user_update_user() {
  970. var ele = document.getElementById("ui.manage_user.userid");
  971. var userid = ele.value;
  972. var user_data = [["action","update"],["userid", userid]];
  973. var fields = ["username", "lookup_userid", "lookup_username", "first_name", "last_name", "email", "phone",
  974. "address", "city", "state", "zip", "shipping_name", "shipping_address", "shipping_city",
  975. "shipping_state", "shipping_country_code", "shipping_country_name", "shipping_zip" ];
  976. for (var idx=0; idx<fields.length; idx++) {
  977. var _e = document.getElementById("ui.manage_user." + fields[idx]);
  978. if (!_e) { continue; }
  979. user_data.push([fields[idx],_e.value]);
  980. }
  981. var req_data = {"api_function":"User", "ui_function":"manage_user.update_finish", "data":user_data};
  982. api_req(req_data);
  983. }
  984. function manage_user_associate_card(data) {
  985. var ele = document.getElementById("ui.manage_user.userid");
  986. var userid = ele.value;
  987. var ele = document.getElementById("ui.manage_user.logical_card_id");
  988. var cardid = ele.value;
  989. ele = document.getElementById("ui.manage_user.mag_token");
  990. var mag = ele.value;
  991. ele = document.getElementById("ui.manage_user.rfid_token");
  992. var rfid = ele.value;
  993. var req_dat = { "api_function":"Card", "ui_function":"manage_user.associate_card",
  994. "data": [
  995. ["action","update"],
  996. ["userid", userid],
  997. ["logical_card_id",cardid],
  998. ["mag_token",mag],
  999. ["rfid_token",rfid]
  1000. ] };
  1001. api_req(req_dat);
  1002. }
  1003. function manage_user_reset_password(data) {
  1004. var ele = undefined;
  1005. ele = document.getElementById("ui.manage_user.userid");
  1006. var userid = ele.value;
  1007. if ((userid === "") || (typeof userid === "undefined") || isNaN(userid)) {
  1008. update_message("ui.manage_user.password_message", "error", "Please provide userid");
  1009. return;
  1010. }
  1011. ele = document.getElementById("ui.manage_user.new_password");
  1012. var pw0 = ele.value;
  1013. if ((pw0 === "") || (typeof pw0 === "undefined")) {
  1014. update_message("ui.manage_user.password_message", "error", "Please provide password");
  1015. return;
  1016. }
  1017. ele = document.getElementById("ui.manage_user.confirm_password");
  1018. var pw1 = ele.value;
  1019. if ((pw1 === "") || (typeof pw1 === "undefined")) {
  1020. update_message("ui.manage_user.password_message", "error", "Please provide confirmation password");
  1021. return;
  1022. }
  1023. if (pw0 !== pw1) {
  1024. update_message("ui.manage_user.password_message", "error", "Passwords must match");
  1025. return;
  1026. }
  1027. var req_dat = { "api_function":"User", "ui_function":"manage_user.update",
  1028. "data": [
  1029. ["action","update"],
  1030. ["userid", userid],
  1031. ["password",pw0]
  1032. ] };
  1033. api_req(req_dat);
  1034. }
  1035. // --------------------------------------
  1036. // --------------------------------------
  1037. function create_user_process_button() {
  1038. var val_names = ["username", "first_name", "last_name",
  1039. "email", "phone", "address", "city", "state", "zip",
  1040. "shipping_name", "shipping_address",
  1041. "shipping_city", "shipping_state",
  1042. "shipping_country_code", "shipping_country_name",
  1043. "shipping_zip",
  1044. "password"];
  1045. var req_dat = { "api_function":"User", "ui_function":"create_user.finish",
  1046. "data":[ ["action","add"]] };
  1047. for (var idx=0; idx<val_names.length; idx++) {
  1048. var v = _get_input_field("create_user:" + val_names[idx]);
  1049. if (v) {
  1050. req_dat.data.push([val_names[idx],v]);
  1051. }
  1052. }
  1053. api_req(req_dat);
  1054. }
  1055. // --------------------------------------
  1056. // --------------------------------------
  1057. // --------------------------------------
  1058. // --------------------------------------
  1059. // --------------------------------------
  1060. function admin_api_init() {
  1061. var ele;
  1062. var _func = location.pathname.substring(1);
  1063. //console.log("...init", _func);
  1064. //console.log(window.location.search);
  1065. var _h = _param2hash(window.location.search);
  1066. if (_func === "create_user") {
  1067. _attach_button("create_user:button_create", create_user_process_button);
  1068. }
  1069. else if (_func === "manage_user") {
  1070. _attach_button( "ui.manage_user.lookup_userid", manage_user_find_userid);
  1071. _attach_button( "ui.manage_user.lookup_username", manage_user_find_username);
  1072. _attach_button( "ui.manage_user.update_user", manage_user_update_user);
  1073. _attach_button( "ui.manage_user.associate_card", manage_user_associate_card);
  1074. _attach_button( "ui.manage_user.reset_password", manage_user_reset_password);
  1075. if ("userid" in _h) {
  1076. console.log("sending manage_user.find request");
  1077. api_req({"api_function":"UserInfo", "ui_function":"manage_user.find", "data":[["userid",_h["userid"]]]});
  1078. }
  1079. }
  1080. else if (_func === "manage_card") {
  1081. _attach_button( "ui.manage_card.lookup_logical_card_id", manage_card_find_cardid);
  1082. _attach_button( "ui.manage_card.lookup_mag_token", manage_card_find_magstripe);
  1083. _attach_button( "ui.manage_card.lookup_rfid_token", manage_card_find_rfid);
  1084. _attach_button( "ui.manage_card.manage_user", manage_card_redirect_manage_user);
  1085. _attach_button( "ui.manage_card.reissue", manage_card_reissue);
  1086. _attach_button( "ui.manage_card.add_pass_nride", manage_card_add_pass_nride);
  1087. _attach_button( "ui.manage_card.add_pass_nday", manage_card_add_pass_nday);
  1088. _attach_button( "ui.manage_card.add_pass_other", manage_card_add_pass_other);
  1089. _attach_button( "ui.manage_card.delete_pass", manage_card_delete_pass);
  1090. _attach_button( "ui.manage_card.toggle_pass_all", manage_card_toggle_pass_select);
  1091. if ("logical_card_id" in _h) {
  1092. console.log("sending manage_card.find request");
  1093. api_req({
  1094. "api_function":"CardInfo",
  1095. "ui_function":"manage_card.find",
  1096. "data": [
  1097. ["action","search"],
  1098. ["logical_card_id",_h["logical_card_id"] ]
  1099. ]
  1100. });
  1101. }
  1102. }
  1103. else if (_func === "reissue_card") {
  1104. _attach_button( "ui.reissue_card.reissue", reissue_card);
  1105. if ("logical_card_id" in _h) {
  1106. api_req({
  1107. "api_function":"CardInfo",
  1108. "ui_function":"reissue_card.find",
  1109. "data": [
  1110. ["action","search"],
  1111. ["logical_card_id",_h["logical_card_id"] ]
  1112. ]
  1113. });
  1114. }
  1115. }
  1116. else if (_func === "recycle_card") {
  1117. _attach_button( "ui.recycle_card.recycle", recycle_card);
  1118. _attach_button( "ui.recycle_card.pass_none", (function () { recycle_card_radio("none"); }) );
  1119. _attach_button( "ui.recycle_card.pass_nride", (function () { recycle_card_radio("nride"); }) );
  1120. _attach_button( "ui.recycle_card.pass_nday", (function () { recycle_card_radio("nday"); }) );
  1121. _attach_button( "ui.recycle_card.pass_other", (function () { recycle_card_radio("other"); }) );
  1122. recycle_card_radio("none");
  1123. if ("logical_card_id" in _h) {
  1124. api_req({
  1125. "api_function":"CardInfo",
  1126. "ui_function":"recycle_card.find",
  1127. "data": [
  1128. ["action","search"],
  1129. ["logical_card_id",_h["logical_card_id"] ]
  1130. ]
  1131. });
  1132. }
  1133. }
  1134. else if (_func === "add_card_block") {
  1135. _attach_button( "ui.add_card_block.add_card_block", add_card_block);
  1136. _attach_button( "ui.add_card_block.pass_none", (function () { update_pass_radio_button("add_card_block", "none"); }) );
  1137. _attach_button( "ui.add_card_block.pass_nride", (function () { update_pass_radio_button("add_card_block", "nride"); }) );
  1138. _attach_button( "ui.add_card_block.pass_nday", (function () { update_pass_radio_button("add_card_block", "nday"); }) );
  1139. _attach_button( "ui.add_card_block.pass_other", (function () { update_pass_radio_button("add_card_block", "other"); }) );
  1140. update_pass_radio_button("add_card_block", "none");
  1141. }
  1142. else if (_func === "search") {
  1143. _attach_button( "ui.search.find_card", (function() { return ui_search("card"); }) );
  1144. _attach_button( "ui.search.find_user", (function() { return ui_search("user"); }) );
  1145. _attach_button( "ui.search.find_admin", (function() { return ui_search("admin"); }) );
  1146. }
  1147. }
  1148. admin_api_init();