function renderJavascriptStubs() { $toret = ' <script type="text/javascript">' . "\n"; $toret .= '<!--' . "\n"; if (!isset($GLOBALS['stub_loader'])) { $toret .= ' var StubFilesLoaded = false; function loadStubFiles(callback, args) { var StubJSLoader = new Kore.JSLoader(); StubJSLoader.addFile("includes/yui/yahoo/yahoo.js"); StubJSLoader.addFile("includes/yui/event/event.js"); StubJSLoader.addFile("includes/yui/connection/connection.js"); StubJSLoader.addFile("includes/kore/js/error.js"); StubJSLoader.addFile("includes/kore/js/dataprovider/transporter.js"); StubJSLoader.addFile("includes/kore/js/dataprovider/dataprovider.js"); StubJSLoader.addFile("includes/kore/js/dataprovider/jsonprovider.js"); StubJSLoader.loadFiles(function() { StubFilesLoaded = true; callback.apply(null, args); }); }'; $GLOBALS['stub_loader'] = true; } foreach ($this->exportedMethods as $m) { $obj_prefix1 = ''; $obj_prefix2 = ''; if ($m['object']) { $obj_prefix1 = $m['object'] . '_'; $obj_prefix2 = $m['object']; } $toret .= ' ' . $obj_prefix1 . $m['method'] . ' = function() { if(!StubFilesLoaded) { loadStubFiles(' . $obj_prefix1 . $m['method'] . ', arguments);return;}; var params = arguments; var functor = params[params.length-1]; var postOptions; var hash = { "AjaxServiceCall": "true", "ServiceObject" : "' . $obj_prefix2 . '", "ServiceMethod" : "' . $m['method'] . '" }; for (var i = 0; i < params.length-1; i++) { var sPar = params[i]; if((typeof params[i] == "string") && /^\\{[^\\}]+\\}$/.test(params[i])){ try { eval("var tmpObj = " + params[i]); Object.extend(hash, tmpObj); } catch(e) {}; } else { if (params[i].toString() == "POST-DATA") { postOptions = {method: "POST", postData: params[i+1]}; break; } else { hash["params_"+i] = params[i]; } }; } var url; '; if (isset($GLOBALS["stub_context"])) { // this file is included as the opened region in a widget $toret .= 'url = "' . KT_addReplaceParam($GLOBALS["stub_context"], "KT_ajax_request", "true") . '"; '; } else { if (KT_is_ajax_request()) { // this page is called from a widget to output content for a region $toret .= 'url = "' . KT_getFullUri() . '"; '; } else { $toret .= ' var L = window.location; url = L.protocol + "//" + L.host + L.pathname + L.search; if(typeof window.$ctrl != "undefined") { // on a master page var hashParams = window.location.hash.replace(/^#/, ""); if(hashParams){ url = window.$app_path + "?" + hashParams; } '; if (isset($GLOBALS['me'])) { $toret .= ' var currentPanel = "' . $GLOBALS['me']->id . '"; url = url.replace(/[^\\?&]*__state=[^&]*/i, ""); if ( !(new RegExp(currentPanel + "__state=","i").test(hashParams)) ) { url += (/\\?/.test(url)? "&" : "?"); url += currentPanel + "__state=' . $GLOBALS['me']->currentState . '"; } url = url.replace(/\\?&/i, "?"); '; } $toret .= ' } url += (/\\?/.test(url)? "&" : "?"); url += "KT_ajax_request=true"; '; } } $toret .= ' var _querry = $H(hash).toQueryString(); if(_querry){ url += (/\\?/.test(url)? "&" : "?"); } url += _querry; var provider; if (typeof postOptions == "undefined") { provider = new Kore.JsonProvider(url); } else { provider = new Kore.JsonProvider(url, postOptions); } provider.updateEvent.subscribe(functor, provider, true); provider.getContent(); }'; } $toret .= ' //--> </script> '; return $toret; }
<?php if (KT_is_ajax_request()) { $jaxon__all_panels = array_keys($GLOBALS['ctrl']->panels); $jaxon__real_panels = array(); $strlens = array(); $contents = ''; $start_index = 0; for ($jaxon__i = 0; $jaxon__i < count($jaxon__all_panels); $jaxon__i++) { $panelId = $jaxon__all_panels[$jaxon__i]; $panelObj =& $ctrl->getPanel($panelId); $must_return = $panelObj->stateFromUrl; if (in_array($panelId, $GLOBALS['panels_from_lc']) && !isset($_GET['KT_tooltip'])) { $must_return = true; } if ($must_return) { $tmp_arr = array('panels' => array($panelId => array('start' => 0, 'current_state' => $panelObj->currentState))); header('Kt_json: ' . KT_json($tmp_arr)); ob_start(); $panelObj->renderBegin(); require $panelObj->getFileName(); $panelObj->renderEnd(); $content = ob_get_contents(); ob_end_clean(); $content_js = $ctrl->renderJsBindings(false); $contents .= $content . $content_js; $strlen_content = strlen($content); $strlen_content_js = strlen($content_js); $strlen_all = $strlen_content + $strlen_content_js; $strlens[$panelId] = array('start' => $start_index, 'current_state' => $panelObj->currentState, 'end' => $start_index + $strlen_all, 'content' => $strlen_content, 'content_js' => $strlen_content_js); $start_index += $strlen_all;
/** * Make the redirect on server side; * @param string $url the URL to which is makeing the redirect; * @return nothing; */ function KT_redir($url) { $protocol = "http://"; $server_name = $_SERVER["HTTP_HOST"]; if ($server_name != '') { $protocol = "http://"; if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") { $protocol = "https://"; } if (preg_match("#^/#", $url)) { $url = $protocol . $server_name . $url; } else { if (!preg_match("#^[a-z]+://#", $url)) { $script = KT_getPHP_SELF(); if (isset($_SERVER['PATH_INFO']) && $_SERVER['PATH_INFO'] != '' && $_SERVER['PATH_INFO'] != $_SERVER['PHP_SELF']) { $script = substr($script, 0, strlen($script) - strlen($_SERVER['PATH_INFO'])); } $url = $protocol . $server_name . preg_replace("#/[^/]*\$#", "/", $script) . $url; } } $url = str_replace(" ", "%20", $url); if (KT_is_ajax_request()) { header("Kt_location: " . $url); echo "Redirecting to: " . $url; } else { header("Location: " . $url); } } exit; }
/** * end panel rendering; * - outputs the panel container for script operations, if we are not in XHR request * @return null */ function renderEnd() { $c = ob_get_contents(); ob_end_clean(); $visible = true; $test_content = trim($c); preg_match("/^<div\\s+class=\\\"panel__content\\\">(.*)<\\/div>\$/ims", $test_content, $matches); if (isset($matches[1])) { $test_content = trim($matches[1]); } if ($test_content == "") { $visible = false; } // BEGIN if (!KT_is_ajax_request()) { echo '<div id="__' . $this->id . '" class="panel_class" style="' . (!$visible ? 'display: none' : '') . '">'; include $this->templates_path . $this->style . '/begin.html'; } // CONTENT echo $c; // END if (!KT_is_ajax_request()) { include $this->templates_path . $this->style . '/end.html'; echo "</div>"; } if (count($this->lateHtml) > 0) { echo join("", $this->lateHtml); } }