Ticket #2947: musicweb.diff

File musicweb.diff, 9.4 KB (added by jochen, 13 years ago)
  • includes/sajax.php

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

     
    1212*************************************************************************/
    1313
    1414require_once("modules/music/mp3act_functions.php");
    15 require_once("modules/music/mp3act_sajax.php");
     15require_once("includes/sajax.php");
    1616
    1717GarbageCollector();
    1818