private function start() { if ($this->headers === null) { $this->headers = array(); } echo REST::html_start($this->title) . $this->html_form . <<<EOS <h2>Contents</h2> <table class="toc" id="directory_index"><tbody> <tr><th class="delete"></th><th class="name">Name</th> EOS; foreach ($this->headers as $header) { if (strtolower(substr($header, -4)) == 'html') { $header = substr($header, 0, -4); } echo '<th class="' . preg_replace('/[^\\w\\d]+/', '', $header) . '">' . htmlspecialchars($header, ENT_QUOTES, 'UTF-8') . '</th>'; } echo "</tr>\n"; $this->header_sent = true; }
/** * Injects your own HTML generation functions instead of the default ones. * * Both parameters must be of PHP's pseudo type "callback". See PHP's * documentation for details. * * @param $html_start callback Must point to a method with the same signature * as self::html_start(). * @param $html_end callback Must point to a method with the same signature * os self::html_end(). */ public static function setHTML($html_start, $html_end) { self::$html_start = $html_start; self::$html_end = $html_end; }
); } $bct = REST::best_content_type(array('text/html' => 1, 'application/xhtml+xml' => 1, 'text/plain' => 1), 'text/html'); if ($bct === 'text/plain') { REST::header(array('Content-Type' => 'text/plain; charset=US-ASCII', 'Refresh' => '60; ' . $_SERVER['REQUEST_URI'], 'Cache-Control' => 'no-cache')); if ($_SERVER['REQUEST_METHOD'] === 'HEAD') { exit; } echo $tokens / $total; exit; } REST::header(array('Content-Type' => REST::best_xhtml_type() . '; charset=UTF-8', 'Refresh' => '60; ' . $_SERVER['REQUEST_URI'], 'Cache-Control' => 'no-cache')); if ($_SERVER['REQUEST_METHOD'] === 'HEAD') { exit; } echo REST::html_start('Progress'); ?> <table class="progress"><tbody> <tr> <td style="width: <?php echo $width * $tokens / $total; ?> pt;" class="done"> <?php if ($percentage >= 50) { echo sprintf('%.1f%%', $percentage); } ?> </td> <td style="width: <?php echo $width - $width * $tokens / $total;
exit; } echo <<<EOS TokenId: {$row[0]} TokenName: {$row[1]} TokenURL: {$tokenURL} Timeout: {$row[2]} Description: {$row[3]} EOS; exit; } REST::header(array('Content-Type' => $xhtmltype . '; charset=UTF-8', 'Cache-Control' => 'no-cache')); if ($_SERVER['REQUEST_METHOD'] === 'HEAD') { exit; } echo REST::html_start('Lock info'); ?> <h2>Lock info</h2> <table class="lockinfo"><tbody> <tr><th>TokenId:</th><td id="tokenId"><?php echo htmlentities($row[0]); ?> </td></tr> <tr><th>TokenName:</th><td id="tokenName"><?php echo htmlentities($row[1]); ?> </td></tr> <tr><th>TokenURL:</th><td id="tokenURL"><a href="<?php echo htmlspecialchars($tokenURL, ENT_QUOTES, 'UTF-8'); ?> "><?php
} ksort($handles); $handles = array_keys($handles); if ($p_max > 0) { $handles = array_slice($handles, $p_page * $p_max, $p_max); } //... And print everything $xhtml_type = REST::best_xhtml_type() . '; charset=UTF-8'; $content_type = REST::best_content_type(array($xhtml_type => 1.0, 'application/json' => 1.0), $xhtml_type); REST::header(array('status' => REST::HTTP_OK, 'Content-Type' => $content_type)); // For a HEAD request, we can quit now: if ($_SERVER['REQUEST_METHOD'] === 'HEAD') { exit; } if ($content_type == $xhtml_type) { echo REST::html_start('Searchresults'); echo <<<EOS <table class="searchresults"><tbody><tr> <th class="handle">Handle</th> </tr> EOS; $num_rows = 0; while ($search_stmt->fetch()) { $num_rows++; echo "<tr class=\"handle\"><td><a href=\"" . CP::PORTAL_URL . "{$handle}\">{$handle}</a></td></tr>"; } if (!$num_rows) { echo "<tr class=\"handle\"><td>No results found</td></tr>"; } echo "</tbody></table>"; echo REST::html_end();
$content_type = REST::best_content_type(array($xhtml_type => 1.0, 'application/json' => 1.0, 'application/x-www-form-urlencoded' => 1.0, 'text/plain; charset=US-ASCII' => 0.5), $xhtml_type); // When was this handle last modified? $modified = 0; foreach ($handle->timestamp as $idx => $timestamp) { if ($timestamp > $modified) { $modified = $timestamp; } } REST::check_if_modified_since($modified); REST::header(array('status' => REST::HTTP_OK, 'Content-Type' => $content_type, 'Modified' => REST::http_date($modified))); // For a HEAD request, we can quit now: if ($_SERVER['REQUEST_METHOD'] === 'HEAD') { exit; } if ($content_type == $xhtml_type) { echo REST::html_start('Metadata for handle ' . htmlspecialchars($handle->handle(), ENT_COMPAT, 'UTF-8')); echo <<<EOS <table class="handledata"><tbody><tr> <th class="idx">idx</th> <th class="type">type</th> <th class="data">data</th> <th class="data">refs</th> <th class="modified">timestamp</th> </tr> EOS; foreach ($handle->type as $idx => $type) { if (strpos($type, 'HS_') === 0) { continue; } echo '<tr><td class="idx">' . $idx . '</td><td class="type">' . htmlspecialchars($type, ENT_COMPAT, 'UTF-8') . '</td><td class="data">'; if ($type == 'URL' && REST::isValidURI($handle->data[$idx])) {
* * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * $Id: database_types.php 2459 2009-08-10 21:20:41Z pieterb $ **************************************************************************/ /** * File documentation. * @todo Implement retrieval of info about individual database types. * @package Portal */ require_once 'include/global.php'; REST::require_method('GET', 'HEAD'); $path_info = Portal::path_info(); if (!empty($path_info[0])) { $id = Portal_DB::databaseTypeIDByName($path_info[0]); if (empty($id)) { REST::fatal(REST::HTTP_NOT_FOUND); } REST::header(REST::best_xhtml_type() . '; charset="UTF-8"'); echo REST::html_start("Database type \"{$path_info[0]}\"") . Portal_DB::databaseTypeDescription($id) . REST::html_end(); exit; } $directory = RESTDir::factory(); foreach (Portal_DB::databaseTypeIDs() as $id) { $directory->line(Portal_DB::databaseTypeName($id), array('Content-Type' => Portal_DB::databaseTypeContentType($id), 'Extension' => Portal_DB::databaseTypeExtension($id))); } $directory->end();
); REST::fatal(REST::HTTP_ACCEPTED); } REST::require_method('GET', 'HEAD'); $result = Portal_MySQL::query(<<<EOS SELECT SUM(`usage_seconds`), DATE(`usage_timestamp`), `usage_status` FROM `Usage` WHERE `user_id` = {$userid} GROUP BY 3,2 ORDER BY 3,2 ASC; EOS ); REST::header(REST::best_xhtml_type() . '; charset="UTF-8"'); echo REST::html_start('Usage statistics') . <<<EOS <!--<form action="stats" method="post"> token: <input type="text" name="token" value=""/> seconds: <input type="text" name="seconds" value=""/> <input type="submit"/> </form>--> <table class="usagestats"><tbody> <tr> <th class="date">Date</th> <th class="walltime">Walltime</th> <th class="status">Status</th> </tr> EOS; $STATUS_STRING = array(0 => 'OK', 1 => 'Transient error', 2 => 'Fatal error'); while ($row = $result->fetch_row()) { echo '<tr><td class="date">' . gmstrftime('%F', strtotime($row[1] . 'T00:00:00Z')) . '</td><td class="walltime">' . sprintf('%d:%02d:%02d', floor($row[0] / 3600), floor($row[0] % 3600 / 60), $row[0] % 60) . '</td><td class="status">' . $STATUS_STRING[$row[2]] . "</td></tr>\n";
/** * Shows a message screen to the user. * @param string $message HTML message * @param string $status HTTP status * @param string $redirect URL for automatic redirection * @param string $location Location of the created URL */ public static function show_message($message, $status, $location) { REST::header(array('status' => $status, 'Content-Type' => REST::best_xhtml_type() . '; charset=UTF-8', 'Location' => REST::rel2url($location))); echo REST::html_start('Redirect') . <<<EOS <p>{$message}</p> <script type="text/javascript"><![CDATA[ setTimeout( 'window.location.href = "{$location}";', 1000 ); ]]></script> EOS; echo REST::html_end(); exit; }
SELECT `TV`.`tokenId` FROM `TokenValues` AS `TV` NATURAL LEFT JOIN `Tokens` AS `T` WHERE `T`.`tokenId` IS NULL; EOS ); Topos::real_query(<<<EOS DELETE `TokenValues` FROM `OrphanValues` NATURAL JOIN `TokenValues`; EOS ); Topos::real_query(<<<EOS DROP TABLE `OrphanValues`; EOS ); REST::header(array('Content-Type' => REST::best_xhtml_type() . '; charset=UTF-8')); echo REST::html_start('Pool'); echo '<p>Pool destroyed successfully.</p>'; echo REST::html_end(); exit; } REST::require_method('HEAD', 'GET'); // Fetch number of tokens $query = <<<EOS SELECT COUNT(`tokenId`), SUM(UNIX_TIMESTAMP() < `tokenLockTimeout`) FROM `Pools` NATURAL JOIN `Tokens` WHERE `poolName` = {$escPool}; EOS; list($ntokens, $nlocks) = Topos::query($query)->fetch_row(); $form = <<<EOS <h2>Forms</h2> <h3>Delete</h3>
* * $Id$ **************************************************************************/ require_once 'include/global.php'; $escPool = Topos::escape_string($TOPOS_POOL); // TODO: the DELETE handler was written by Evert, using a subquery. I'm used // to doing this with a single JOIN query... if ($_SERVER['REQUEST_METHOD'] === 'DELETE') { Topos::real_query(<<<EOS UPDATE `Tokens` SET `tokenLockTimeout` = 0, `tokenLockUUID` = null WHERE `poolId` = (SELECT `poolId` FROM `Pools` WHERE `Pools`.`poolName` = {$escPool}); EOS ); REST::header(array('Content-Type' => REST::best_xhtml_type() . '; charset=UTF-8')); echo REST::html_start('Locks'); echo '<p>Locks destroyed successfully.</p>'; echo REST::html_end(); exit; } REST::require_method('HEAD', 'GET'); $result = Topos::query(<<<EOS SELECT `tokenId`, `tokenName`, `tokenLockUUID`, `tokenLockTimeout` - UNIX_TIMESTAMP(), `tokenLockDescription` FROM `Pools` NATURAL JOIN `Tokens` WHERE `poolName` = {$escPool} AND `tokenLockTimeout` > UNIX_TIMESTAMP() ORDER BY 1; EOS ); $directory = RESTDir::factory();
if (!$mailresult) { REST::fatal(REST::HTTP_INTERNAL_SERVER_ERROR, <<<EOS Your registration was successful, but the email containing your password could not be sent. The site administrator has been informed and will contact you as soon as possible. EOS ); } $message = <<<EOS <p>Registration successful.</p> <p>An e-mail with password has been sent to <a href="mailto:{$_GET['email']}">{$_GET['email']}</a>.</p> EOS; if ($referrer) { $message .= <<<EOS <p>Click here to continue:<br/> <a href="{$referrer}">{$referrer}</a></p> EOS; } REST::fatal(REST::HTTP_ACCEPTED, $message); } REST::header(REST::best_xhtml_type() . '; charset="UTF-8"'); echo REST::html_start('Register') . <<<EOS <p>Fill in your e-mail address and display name below, and you'll recieve a password.</p> <form action="register.php" method="get"> <input type="hidden" name="referrer" value="{$referrer}"/> <input type="text" name="email" value=""/> E-mail address (invisible to other users)<br/> <input type="text" name="name" value=""/> Display name (visible to other users if you share your databases)<br/> <input type="submit" value="Request password"/> </form> EOS . REST::html_end();
try { $query = <<<EOS DELETE `Tokens`, `TokenValues` FROM `Tokens` NATURAL JOIN `Pools` NATURAL JOIN `TokenValues` WHERE `Tokens`.`tokenId` = {$TOPOS_TOKEN} AND `poolName` = {$escPool}; EOS; Topos::real_query($query); $retries = 0; } catch (Topos_Retry $e) { $retries++; } } if (Topos::mysqli()->affected_rows) { REST::header(array('Content-Type' => REST::best_xhtml_type() . '; charset=UTF-8')); echo REST::html_start('Token destroyed'); echo '<p>Token destroyed successfully.</p>'; echo REST::html_end(); exit; } else { REST::fatal(REST::HTTP_NOT_FOUND); } } REST::require_method('HEAD', 'GET'); if (!empty($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { REST::fatal(REST::HTTP_NOT_MODIFIED); } $query = <<<EOS SELECT `tokenValue`, `tokenType`, `tokenCreated`, `tokenName`, IF(`tokenLockTimeout` > UNIX_TIMESTAMP(),`tokenLockUUID`,NULL) FROM `Pools` NATURAL JOIN `Tokens` NATURAL JOIN `TokenValues`