PageRenderTime 26ms CodeModel.GetById 32ms RepoModel.GetById 0ms app.codeStats 1ms

/modules/music/mp3act_sajax.php

https://github.com/fracmak/mythweb
PHP | 361 lines | 288 code | 43 blank | 30 comment | 73 complexity | 3dbb5fa4391133ca74eab5dd59810b2c MD5 | raw file
  1. <?php
  2. if (!isset($SAJAX_INCLUDED)) {
  3. /*
  4. * GLOBALS AND DEFAULTS
  5. *
  6. */
  7. $GLOBALS['sajax_version'] = '0.12';
  8. $GLOBALS['sajax_debug_mode'] = 0;
  9. $GLOBALS['sajax_export_list'] = array();
  10. $GLOBALS['sajax_request_type'] = 'GET';
  11. $GLOBALS['sajax_remote_uri'] = '';
  12. $GLOBALS['sajax_failure_redirect'] = '';
  13. /*
  14. * CODE
  15. *
  16. */
  17. //
  18. // Initialize the Sajax library.
  19. //
  20. function sajax_init() {
  21. }
  22. //
  23. // Helper function to return the script's own URI.
  24. //
  25. function sajax_get_my_uri() {
  26. return $_SERVER["REQUEST_URI"];
  27. }
  28. $sajax_remote_uri = sajax_get_my_uri();
  29. //
  30. // Helper function to return an eval()-usable representation
  31. // of an object in JavaScript.
  32. //
  33. function sajax_get_js_repr($value) {
  34. $type = gettype($value);
  35. if ($type == "boolean") {
  36. return ($value) ? "Boolean(true)" : "Boolean(false)";
  37. }
  38. elseif ($type == "integer") {
  39. return "parseInt($value)";
  40. }
  41. elseif ($type == "double") {
  42. return "parseFloat($value)";
  43. }
  44. elseif ($type == "array" || $type == "object" ) {
  45. //
  46. // XXX Arrays with non-numeric indices are not
  47. // permitted according to ECMAScript, yet everyone
  48. // uses them.. We'll use an object.
  49. //
  50. $s = "{ ";
  51. if ($type == "object") {
  52. $value = get_object_vars($value);
  53. }
  54. foreach ($value as $k=>$v) {
  55. $esc_key = sajax_esc($k);
  56. if (is_numeric($k))
  57. $s .= "$k: " . sajax_get_js_repr($v) . ", ";
  58. else
  59. $s .= "\"$esc_key\": " . sajax_get_js_repr($v) . ", ";
  60. }
  61. if (count($value))
  62. $s = substr($s, 0, -2);
  63. return $s . " }";
  64. }
  65. else {
  66. $esc_val = sajax_esc($value);
  67. $s = "'$esc_val'";
  68. return $s;
  69. }
  70. }
  71. function sajax_handle_client_request() {
  72. global $sajax_export_list;
  73. $mode = "";
  74. if (! empty($_GET["rs"]))
  75. $mode = "get";
  76. if (!empty($_POST["rs"]))
  77. $mode = "post";
  78. if (empty($mode))
  79. return;
  80. $target = "";
  81. if ($mode == "get") {
  82. // Bust cache in the head
  83. header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
  84. header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  85. // always modified
  86. header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
  87. header ("Pragma: no-cache"); // HTTP/1.0
  88. $func_name = $_GET["rs"];
  89. if (! empty($_GET["rsargs"]))
  90. $args = $_GET["rsargs"];
  91. else
  92. $args = array();
  93. }
  94. else {
  95. $func_name = $_POST["rs"];
  96. if (! empty($_POST["rsargs"]))
  97. $args = $_POST["rsargs"];
  98. else
  99. $args = array();
  100. }
  101. if (! in_array($func_name, $sajax_export_list))
  102. echo "-:$func_name not callable";
  103. else {
  104. echo "+:";
  105. $result = call_user_func_array($func_name, $args);
  106. echo "var res = " . trim(sajax_get_js_repr($result)) . "; res;";
  107. }
  108. exit;
  109. }
  110. function sajax_get_common_js() {
  111. global $sajax_debug_mode;
  112. global $sajax_request_type;
  113. global $sajax_remote_uri;
  114. global $sajax_failure_redirect;
  115. $t = strtoupper($sajax_request_type);
  116. if ($t != "" && $t != "GET" && $t != "POST")
  117. return "// Invalid type: $t.. \n\n";
  118. ob_start();
  119. ?>
  120. // remote scripting library
  121. // (c) copyright 2005 modernmethod, inc
  122. var sajax_debug_mode = <?php echo $sajax_debug_mode ? "true" : "false"; ?>;
  123. var sajax_request_type = "<?php echo $t; ?>";
  124. var sajax_target_id = "";
  125. var sajax_failure_redirect = "<?php echo $sajax_failure_redirect; ?>";
  126. function sajax_debug(text) {
  127. if (sajax_debug_mode)
  128. alert(text);
  129. }
  130. function sajax_init_object() {
  131. sajax_debug("sajax_init_object() called..")
  132. var A;
  133. var msxmlhttp = new Array(
  134. 'Msxml2.XMLHTTP.5.0',
  135. 'Msxml2.XMLHTTP.4.0',
  136. 'Msxml2.XMLHTTP.3.0',
  137. 'Msxml2.XMLHTTP',
  138. 'Microsoft.XMLHTTP');
  139. for (var i = 0; i < msxmlhttp.length; i++) {
  140. try {
  141. A = new ActiveXObject(msxmlhttp[i]);
  142. } catch (e) {
  143. A = null;
  144. }
  145. }
  146. if(!A && typeof XMLHttpRequest != "undefined")
  147. A = new XMLHttpRequest();
  148. if (!A)
  149. sajax_debug("Could not create connection object.");
  150. return A;
  151. }
  152. var sajax_requests = new Array();
  153. function sajax_cancel() {
  154. for (var i = 0; i < sajax_requests.length; i++)
  155. sajax_requests[i].abort();
  156. }
  157. function sajax_do_call(func_name, args) {
  158. var i, x, n;
  159. var uri;
  160. var post_data;
  161. var target_id;
  162. sajax_debug("in sajax_do_call().." + sajax_request_type + "/" + sajax_target_id);
  163. target_id = sajax_target_id;
  164. if (typeof(sajax_request_type) == "undefined" || sajax_request_type == "")
  165. sajax_request_type = "GET";
  166. uri = "<?php echo $sajax_remote_uri; ?>";
  167. if (sajax_request_type == "GET") {
  168. if (uri.indexOf("?") == -1)
  169. uri += "?rs=" + escape(func_name);
  170. else
  171. uri += "&rs=" + escape(func_name);
  172. uri += "&rst=" + escape(sajax_target_id);
  173. uri += "&rsrnd=" + new Date().getTime();
  174. for (i = 0; i < args.length-1; i++)
  175. uri += "&rsargs[]=" + escape(args[i]);
  176. post_data = null;
  177. }
  178. else if (sajax_request_type == "POST") {
  179. post_data = "rs=" + escape(func_name);
  180. post_data += "&rst=" + escape(sajax_target_id);
  181. post_data += "&rsrnd=" + new Date().getTime();
  182. for (i = 0; i < args.length-1; i++)
  183. post_data = post_data + "&rsargs[]=" + escape(args[i]);
  184. }
  185. else {
  186. alert("Illegal request type: " + sajax_request_type);
  187. }
  188. x = sajax_init_object();
  189. if (x == null) {
  190. if (sajax_failure_redirect != "") {
  191. location.href = sajax_failure_redirect;
  192. return false;
  193. } else {
  194. sajax_debug("NULL sajax object for user agent:\n" + navigator.userAgent);
  195. return false;
  196. }
  197. } else {
  198. x.open(sajax_request_type, uri, true);
  199. // window.open(uri);
  200. sajax_requests[sajax_requests.length] = x;
  201. if (sajax_request_type == "POST") {
  202. x.setRequestHeader("Method", "POST " + uri + " HTTP/1.1");
  203. x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  204. }
  205. x.onreadystatechange = function() {
  206. if (x.readyState != 4)
  207. return;
  208. sajax_debug("received " + x.responseText);
  209. var status;
  210. var data;
  211. var txt = x.responseText.replace(/^\s*|\s*$/g,"");
  212. status = txt.charAt(0);
  213. data = txt.substring(2);
  214. if (status == "") {
  215. // let's just assume this is a pre-response bailout and let it slide for now
  216. } else if (status == "-")
  217. alert("Error: " + data);
  218. else {
  219. if (target_id != "")
  220. document.getElementById(target_id).innerHTML = eval(data);
  221. else {
  222. try {
  223. var callback;
  224. var extra_data = false;
  225. if (typeof args[args.length-1] == "object") {
  226. callback = args[args.length-1].callback;
  227. extra_data = args[args.length-1].extra_data;
  228. } else {
  229. callback = args[args.length-1];
  230. }
  231. callback(eval(data), extra_data);
  232. } catch (e) {
  233. sajax_debug("Caught error " + e + ": Could not eval " + data );
  234. }
  235. }
  236. }
  237. }
  238. }
  239. sajax_debug(func_name + " uri = " + uri + "/post = " + post_data);
  240. x.send(post_data);
  241. sajax_debug(func_name + " waiting..");
  242. delete x;
  243. return true;
  244. }
  245. <?php
  246. $html = ob_get_contents();
  247. ob_end_clean();
  248. return $html;
  249. }
  250. function sajax_show_common_js() {
  251. echo sajax_get_common_js();
  252. }
  253. // javascript escape a value
  254. function sajax_esc($val)
  255. {
  256. $val = str_replace("\\", "\\\\", $val);
  257. $val = str_replace("\r", "\\r", $val);
  258. $val = str_replace("\n", "\\n", $val);
  259. $val = str_replace("'", "\\'", $val);
  260. return str_replace('"', '\\"', $val);
  261. }
  262. function sajax_get_one_stub($func_name) {
  263. ob_start();
  264. ?>
  265. // wrapper for <?php echo $func_name; ?>
  266. function x_<?php echo $func_name; ?>() {
  267. sajax_do_call("<?php echo $func_name; ?>",
  268. x_<?php echo $func_name; ?>.arguments);
  269. }
  270. <?php
  271. $html = ob_get_contents();
  272. ob_end_clean();
  273. return $html;
  274. }
  275. function sajax_show_one_stub($func_name) {
  276. echo sajax_get_one_stub($func_name);
  277. }
  278. function sajax_export() {
  279. global $sajax_export_list;
  280. $n = func_num_args();
  281. for ($i = 0; $i < $n; $i++) {
  282. $sajax_export_list[] = func_get_arg($i);
  283. }
  284. }
  285. $sajax_js_has_been_shown = 0;
  286. function sajax_get_javascript()
  287. {
  288. global $sajax_js_has_been_shown;
  289. global $sajax_export_list;
  290. $html = "";
  291. if (! $sajax_js_has_been_shown) {
  292. $html .= sajax_get_common_js();
  293. $sajax_js_has_been_shown = 1;
  294. }
  295. foreach ($sajax_export_list as $func) {
  296. $html .= sajax_get_one_stub($func);
  297. }
  298. return $html;
  299. }
  300. function sajax_show_javascript()
  301. {
  302. echo sajax_get_javascript();
  303. }
  304. $SAJAX_INCLUDED = 1;
  305. }