/', googleAnalytics() . '', $html); $html = preg_replace('/<\/body>/', '' . "\n", $html); if (false) { if (stripos($html, '')) { $html = preg_replace('/(.*)/', '$1', $html); } else { // if we can't find a head element, brute force the framebusting in to the HTML $html = '' . $html; } } if (!$html && !$ajax) { $javascript = "/*\n Created using " . HOST . "\n Source can be edit via " . HOST . "$code_id/edit\n*/\n\n" . $javascript; } if (!$html) { header("Content-type: text/javascript"); } echo $html ? $html : $javascript; $edit_mode = false; } } if (!$edit_mode || $ajax) { exit; } function connect() { // sniff, and if on my mac... $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); mysql_select_db(DB_NAME, $link); } function encode($s) { static $jsonReplaces = array(array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"')); return '"' . str_replace($jsonReplaces[0], $jsonReplaces[1], $s) . '"'; } function getCodeIdParams($request) { $revision = array_pop($request); $code_id = array_pop($request); if ($code_id == null) { $code_id = $revision; $revision = 1; } return array($code_id, $revision); } function getMaxRevision($code_id) { $sql = sprintf('select max(revision) as rev from sandbox where url="%s"', mysql_real_escape_string($code_id), mysql_real_escape_string($revision)); $result = mysql_query($sql); $row = mysql_fetch_object($result); return $row->rev ? $row->rev : 0; } function formatCompletedCode($html, $javascript, $code_id, $revision) { global $ajax; if (stripos($html, '%code%') === false) { $html = preg_replace('@@', "\n", $html); } // removed the regex completely to try to protect $n variables in JavaScript $htmlParts = explode("%code%", $html); $html = $htmlParts[0] . $javascript . $htmlParts[1]; $html = preg_replace("/%code%/", $javascript, $html); if (!$ajax && $code_id != 'jsbin') { $code_id .= $revision == 1 ? '' : '/' . $revision; $html = preg_replace('/", $html); } return array($html, $javascript); } function getCode($code_id, $revision, $testonly = false) { $sql = sprintf('select * from sandbox where url="%s" and revision="%s"', mysql_real_escape_string($code_id), mysql_real_escape_string($revision)); $result = mysql_query($sql); if (!mysql_num_rows($result) && $testonly == false) { header("HTTP/1.0 404 Not Found"); return defaultCode(true); } else if (!mysql_num_rows($result)) { return array($revision); } else { $row = mysql_fetch_object($result); // TODO required anymore? used for auto deletion $sql = 'update sandbox set last_viewed=now() where id=' . $row->id; mysql_query($sql); $javascript = preg_replace('/\r/', '', $row->javascript); $html = preg_replace('/\r/', '', $row->html); $revision = $row->revision; // return array(preg_replace('/\r/', '', $html), preg_replace('/\r/', '', $javascript), $row->streaming, $row->active_tab, $row->active_cursor); return array($revision, get_magic_quotes_gpc() ? stripslashes($html) : $html, get_magic_quotes_gpc() ? stripslashes($javascript) : $javascript, $row->streaming, $row->active_tab, $row->active_cursor); } } function defaultCode($not_found = false) { $library = ''; $usingRequest = false; if (isset($_REQUEST['html']) || isset($_REQUEST['js'])) { $usingRequest = true; } if (@$_REQUEST['html']) { $html = $_REQUEST['html']; } else if ($usingRequest) { $html = ''; } else { $html = << JS Bin

Hello World

HERE_DOC; } $javascript = ''; if (@$_REQUEST['js']) { $javascript = $_REQUEST['js']; } else if ($usingRequest) { $javascript = ''; } else { if ($not_found) { $javascript = 'document.getElementById("hello").innerHTML = "This URL does not have any code saved to it.";'; } else { $javascript = "if (document.getElementById('hello')) {\n document.getElementById('hello').innerHTML = 'Hello World - this was inserted using JavaScript';\n}\n"; } } return array(get_magic_quotes_gpc() ? stripslashes($html) : $html, get_magic_quotes_gpc() ? stripslashes($javascript) : $javascript); } // I'd consider using a tinyurl type generator, but I've yet to find one. // this method also produces *pronousable* urls function generateCodeId($tries = 0) { $code_id = generateURL(); if ($tries > 2) { $code_id .= $tries; } // check if it's free $sql = sprintf('select id from sandbox where url="%s"', mysql_real_escape_string($code_id)); $result = mysql_query($sql); if (mysql_num_rows($result)) { $code_id = generateCodeId(++$tries); } else if ($tries > 10) { echo('Too many tries to find a new code_id - please contact using about'); exit; } return $code_id; } function generateURL() { // generates 5 char word $vowels = str_split('aeiou'); $const = str_split('bcdfghjklmnpqrstvwxyz'); $word = ''; for ($i = 0; $i < 5; $i++) { if ($i % 2 == 0) { // even = vowels $word .= $vowels[rand(0, 4)]; } else { $word .= $const[rand(0, 20)]; } } return $word; } function googleAnalytics() { return << var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); HERE_DOC; } ?>