Esempio n. 1
0
 static function set_current($major, $minor, $point)
 {
     if (self::$current != null) {
         die("Setting current version twice.");
     }
     self::$current = self::release($major, $minor, $point);
 }
 function display_from_archive($content_map = array())
 {
     // Set default values
     $this->params = array_merge(array('pattern' => '@^[/]([^/]+)[/](.*)$@', 'vpath' => $_SERVER["PATH_INFO"], 'archive_subdir' => true, 'zipfile' => true, 'fix_dir' => false, 'archive_dir' => ARCHIVE_DIR, 'archive_file_prefix' => ARCHIVE_FILE_PREFIX, 'use_http_expire_date' => false, 'override_extractor' => null, 'title' => NULL, 'charset' => NULL, 'content' => NULL, 'error' => false), $this->params);
     $this->get_archive_location();
     // Only use a permanent redirect for releases (beta or full).
     $redirect_status_code = $this->params['version'] && $this->params['version']->is_numbered_release() ? 301 : 302;
     // Calculate expiry date if requested.
     $expires = null;
     if ($this->params['use_http_expire_date']) {
         if (!$this->params['version']) {
             $expires = "+1 week";
         } else {
             $compare_version = BoostVersion::from($this->params['version'])->compare(BoostVersion::current());
             $expires = $compare_version === -1 ? "+1 year" : ($compare_version === 0 ? "+1 week" : "+1 day");
         }
     }
     // Check file exists.
     if ($this->params['zipfile']) {
         $check_file = $this->params['archive'];
         if (!is_readable($check_file)) {
             error_page($this->params, 'Unable to find zipfile.');
             return;
         }
     } else {
         $check_file = $this->params['file'];
         if (is_dir($check_file)) {
             if (substr($check_file, -1) != '/') {
                 $redirect = resolve_url(basename($check_file) . '/');
                 header("Location: {$redirect}", TRUE, $redirect_status_code);
                 return;
             }
             $found_file = NULL;
             if (is_readable("{$check_file}/index.html")) {
                 $found_file = 'index.html';
             } else {
                 if (is_readable("{$check_file}/index.htm")) {
                     $found_file = 'index.htm';
                 }
             }
             if ($found_file) {
                 $this->params['file'] = $check_file = $check_file . $found_file;
                 $this->params['key'] = $this->params['key'] . $found_file;
             } else {
                 if (!http_headers('text/html', filemtime($check_file), $expires)) {
                     return;
                 }
                 $display_dir = new BoostDisplayDir($this->params);
                 return $display_dir->display($check_file);
             }
         } else {
             if (!is_readable($check_file)) {
                 error_page($this->params, 'Unable to find file.');
                 return;
             }
         }
     }
     // Choose filter to use
     $info_map = array_merge($content_map, array(array('', '@[.](txt|py|rst|jam|v2|bat|sh|xml|xsl|toyxml)$@i', 'text', 'text/plain'), array('', '@[.](qbk|quickbook)$@i', 'qbk', 'text/plain'), array('', '@[.](c|h|cpp|hpp)$@i', 'cpp', 'text/plain'), array('', '@[.]png$@i', 'raw', 'image/png'), array('', '@[.]gif$@i', 'raw', 'image/gif'), array('', '@[.](jpg|jpeg|jpe)$@i', 'raw', 'image/jpeg'), array('', '@[.]svg$@i', 'raw', 'image/svg+xml'), array('', '@[.]css$@i', 'raw', 'text/css'), array('', '@[.]js$@i', 'raw', 'application/x-javascript'), array('', '@[.]pdf$@i', 'raw', 'application/pdf'), array('', '@[.](html|htm)$@i', 'raw', 'text/html'), array('', '@(/|^)(Jamroot|Jamfile|ChangeLog|configure)$@i', 'text', 'text/plain'), array('', '@[.]dtd$@i', 'raw', 'application/xml-dtd')));
     $preprocess = null;
     $extractor = null;
     $type = null;
     foreach ($info_map as $i) {
         if (preg_match($i[1], $this->params['key'])) {
             if ($i[0]) {
                 $version = BoostVersion::from($i[0]);
                 if ($version->compare(BoostVersion::page()) > 0) {
                     // This is after the current version.
                     continue;
                 }
             }
             $extractor = $i[2];
             $type = $i[3];
             $preprocess = isset($i[4]) ? $i[4] : NULL;
             break;
         }
     }
     if ($this->params['override_extractor']) {
         $extractor = $this->params['override_extractor'];
     }
     if (!$extractor) {
         if (strpos($_SERVER['HTTP_HOST'], 'www.boost.org') === false) {
             error_page($this->params, "No extractor found for filename.");
         } else {
             error_page($this->params);
         }
         return;
     }
     // Handle ETags and Last-Modified HTTP headers.
     // Output raw files.
     if ($extractor == 'raw') {
         if (!http_headers($type, filemtime($check_file), $expires)) {
             return;
         }
         display_raw_file($this->params, $_SERVER['REQUEST_METHOD'], $type);
     } else {
         // Read file from hard drive or zipfile
         // Note: this sets $this->params['content'] with either the
         // content or an error message.
         if (!extract_file($this->params)) {
             error_page($this->params, $this->params['content']);
             return;
         }
         // Check if the file contains a redirect.
         if ($type == 'text/html') {
             if ($redirect = detect_redirect($this->params['content'])) {
                 http_headers('text/html', null, "+1 day");
                 header("Location: {$redirect}", TRUE, $redirect_status_code);
                 if ($_SERVER['REQUEST_METHOD'] != 'HEAD') {
                     echo $this->params['content'];
                 }
                 return;
             }
         }
         if (!http_headers('text/html', filemtime($check_file), $expires)) {
             return;
         }
         // Finally process the file and display it.
         if ($_SERVER['REQUEST_METHOD'] != 'HEAD') {
             if ($preprocess) {
                 $this->params['content'] = call_user_func($preprocess, $this->params['content']);
             }
             echo_filtered($extractor, $this->params);
         }
     }
 }
Esempio n. 3
0
 static function set_current($major, $minor, $point)
 {
     if (self::$current != null) {
         throw new BoostVersion_Exception("Setting current version twice.");
     }
     self::$current = self::release($major, $minor, $point);
 }
Esempio n. 4
0
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

<?php 
// Returns true if the library is part of the current release of boost.
function xmlentities($text)
{
    return str_replace(array('&', '<', '>', '"', "'"), array('&amp;', '&lt;', '&gt;', '&quot;', '&apos;'), $text);
}
function echo_sitemap_url($loc, $priority, $freq)
{
    $loc_xml = isset($_SERVER['HTTP_HOST']) ? xmlentities("http://{$_SERVER['HTTP_HOST']}/{$loc}") : xmlentities("http://www.boost.org/{$loc}");
    echo <<<EOL
<url>
<loc>{$loc_xml}</loc>
<priority>{$priority}</priority>
<changefreq>{$freq}</changefreq>
</url>

EOL;
}
// Library list
echo_sitemap_url("doc/libs/", '1.0', 'daily');
// Library 'home pages'
$libs = BoostLibraries::load();
// TODO: Include hidden libraries? Or not?
foreach ($libs->get_for_version(BoostVersion::current()) as $lib) {
    echo_sitemap_url("doc/libs/release/{$lib['documentation']}", '1.0', 'daily');
}
?>
</urlset>
Esempio n. 5
0
<?php

require_once __DIR__ . '/../common/code/bootstrap.php';
if (isset($_GET['version'])) {
    try {
        $version = BoostVersion::from($_GET['version']);
    } catch (BoostVersion_Exception $e) {
        header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error', true, 500);
        echo json_encode(array('error' => $e->getMessage()));
        exit(0);
    }
} else {
    $version = BoostVersion::current();
}
// TODO: This is a bit awkard, should probably have an alternative
//       to 'get_for_version' which returns a BoostLibraries instance
//       rather than an array.
// TODO: Include hidden libraries.
$version_libs = array_map(function ($lib) {
    return new BoostLibrary($lib);
}, BoostLibraries::load()->get_for_version($version));
header('Content-type: application/json');
echo BoostLibrary::get_libraries_json($version_libs);
echo $version_libs->to_json();
 function display_from_archive($content_map = array())
 {
     extract($this->documenation_path_details());
     // Set default values
     $fix_dir = $this->get_param('fix_dir');
     $use_http_expire_date = $this->get_param('use_http_expire_date', false);
     $file = false;
     if ($fix_dir) {
         $fix_path = "{$fix_dir}/{$version_dir}/{$path}";
         if (is_file($fix_path) || is_dir($fix_path) && is_file("{$fix_path}/index.html")) {
             $file = $fix_path;
         }
     }
     if (!$file) {
         $file = $archive_dir . '/';
         $file = $file . $version_dir . '/' . $path;
     }
     // Only use a permanent redirect for releases (beta or full).
     $redirect_status_code = $version && $version->is_numbered_release() ? 301 : 302;
     // Calculate expiry date if requested.
     $expires = null;
     if ($use_http_expire_date) {
         if (!$version) {
             $expires = "+1 week";
         } else {
             $compare_version = BoostVersion::from($version)->compare(BoostVersion::current());
             $expires = $compare_version === -1 ? "+1 year" : ($compare_version === 0 ? "+1 week" : "+1 day");
         }
     }
     // Last modified date
     if (!is_readable($file)) {
         BoostWeb::error_404($file, 'Unable to find file.');
         return;
     }
     $last_modified = max(strtotime(BOOST_DOCS_MODIFIED_DATE), filemtime(dirname(__FILE__) . '/boost.php'), filemtime($file));
     // Check file exists.
     if (is_dir($file)) {
         if (substr($file, -1) != '/') {
             $redirect = BoostUrl::resolve(basename($file) . '/');
             header("Location: {$redirect}", TRUE, $redirect_status_code);
             return;
         }
         $found_file = NULL;
         if (is_readable("{$file}/index.html")) {
             $found_file = 'index.html';
         } else {
             if (is_readable("{$file}/index.htm")) {
                 $found_file = 'index.htm';
             }
         }
         if ($found_file) {
             $file = $file . $found_file;
             $path = $path . $found_file;
         } else {
             if (!BoostWeb::http_headers('text/html', $last_modified, $expires)) {
                 return;
             }
             $data = new BoostFilterData();
             $data->version = $version;
             $data->path = $path;
             $data->archive_dir = $archive_dir;
             $data->fix_dir = $fix_dir;
             $display_dir = new BoostDisplayDir($data);
             return $display_dir->display($file);
         }
     }
     // Choose filter to use
     $info_map = array_merge($content_map, array(array('', '@[.](txt|py|rst|jam|v2|bat|sh|xml|xsl|toyxml)$@i', 'text', 'text/plain'), array('', '@[.](qbk|quickbook)$@i', 'qbk', 'text/plain'), array('', '@[.](c|h|cpp|hpp)$@i', 'cpp', 'text/plain'), array('', '@[.]png$@i', 'raw', 'image/png'), array('', '@[.]gif$@i', 'raw', 'image/gif'), array('', '@[.](jpg|jpeg|jpe)$@i', 'raw', 'image/jpeg'), array('', '@[.]svg$@i', 'raw', 'image/svg+xml'), array('', '@[.]css$@i', 'raw', 'text/css'), array('', '@[.]js$@i', 'raw', 'application/x-javascript'), array('', '@[.]pdf$@i', 'raw', 'application/pdf'), array('', '@[.](html|htm)$@i', 'raw', 'text/html'), array('', '@(/|^)(Jamroot|Jamfile|ChangeLog|configure)$@i', 'text', 'text/plain'), array('', '@[.]dtd$@i', 'raw', 'application/xml-dtd'), array('', '@[.]json$@i', 'raw', 'application/json')));
     $preprocess = null;
     $extractor = null;
     $type = null;
     foreach ($info_map as $i) {
         if (preg_match($i[1], $path)) {
             if ($i[0]) {
                 $min_version = BoostVersion::from($i[0]);
                 if ($min_version->compare(BoostVersion::page()) > 0) {
                     // This is after the current version.
                     continue;
                 }
             }
             $extractor = $i[2];
             $type = $i[3];
             $preprocess = isset($i[4]) ? $i[4] : NULL;
             break;
         }
     }
     if (!$extractor) {
         if (strpos($_SERVER['HTTP_HOST'], 'www.boost.org') === false) {
             BoostWeb::error_404($file, 'No extractor found for filename.');
         } else {
             BoostWeb::error_404($file);
         }
         return;
     }
     // Handle ETags and Last-Modified HTTP headers.
     // Output raw files.
     if ($extractor == 'raw') {
         if (!BoostWeb::http_headers($type, $last_modified, $expires)) {
             return;
         }
         if ($_SERVER['REQUEST_METHOD'] != 'HEAD') {
             readfile($file);
         }
     } else {
         // Read file from hard drive
         $content = file_get_contents($file);
         // Check if the file contains a redirect.
         if ($type == 'text/html') {
             if ($redirect = detect_redirect($content)) {
                 BoostWeb::http_headers('text/html', null, "+1 day");
                 header("Location: {$redirect}", TRUE, $redirect_status_code);
                 if ($_SERVER['REQUEST_METHOD'] != 'HEAD') {
                     echo $content;
                 }
                 return;
             }
         }
         if (!BoostWeb::http_headers('text/html', $last_modified, $expires)) {
             return;
         }
         // Finally process the file and display it.
         if ($_SERVER['REQUEST_METHOD'] != 'HEAD') {
             if ($preprocess) {
                 $content = call_user_func($preprocess, $content);
             }
             $data = new BoostFilterData();
             $data->version = $version;
             $data->path = $path;
             $data->content = $content;
             $data->archive_dir = $archive_dir;
             $data->fix_dir = $fix_dir;
             echo_filtered($extractor, $data);
         }
     }
 }