/include/layout.inc
PHP | 968 lines | 732 code | 122 blank | 114 comment | 117 complexity | f0ef7e3c35c9c28ee1247fe1ee0a53f7 MD5 | raw file
- <?php
- /* $Id$ */
- // Set the static content root differently on php.net
- if ($MYSITE == "http://www.php.net/" || $MYSITE == 'http://php.net/') {
- $_SERVER['STATIC_ROOT'] = 'http://static.php.net/www.php.net';
- } elseif ($MYSITE == 'https://www.php.net/' || $MYSITE == 'https://php.net/') {
- $_SERVER['STATIC_ROOT'] = 'https://static.php.net/www.php.net';
- } elseif (!isset($_SERVER['STATIC_ROOT'])) {
- $_SERVER['STATIC_ROOT'] = "";
- }
- // Use class names instead of colors
- ini_set('highlight.comment', 'comment');
- ini_set('highlight.default', 'default');
- ini_set('highlight.keyword', 'keyword');
- ini_set('highlight.string', 'string');
- ini_set('highlight.html', 'html');
- // Highlight PHP code
- function highlight_php($code, $return = FALSE)
- {
- // Using OB, as highlight_string() only supports
- // returning the result from 4.2.0
- ob_start();
- highlight_string($code);
- $highlighted = ob_get_contents();
- ob_end_clean();
- // This should eventually be a php_syntax_check() call when we move to PHP5
- // But use this ugly hack for now to avoid code snippets with bad syntax screwing up the highlighter
- if(strstr($highlighted,"include/layout.inc</b>")) $highlighted = '<span class="html">'.nl2br(htmlentities($code))."</span>";
- // Fix output to use CSS classes and wrap well
- $highlighted = '<div class="phpcode">' . str_replace(
- array(
- ' ',
- '<br />',
- '<font color="', // for PHP 4
- '<span style="color: ', // from PHP 5.0.0RC1
- '</font>',
- "\n ",
- ' ',
- ' '
- ),
- array(
- ' ',
- "<br />\n",
- '<span class="',
- '<span class="',
- '</span>',
- "\n ",
- ' ',
- ' '
- ),
- $highlighted
- ) . '</div>';
- if ($return) { return $highlighted; }
- else { echo $highlighted; }
- }
- // Stats pages still need this
- function commonHeader($title) { site_header($title); }
- function site_header($title = '', $config = array())
- {
- if (myphpnet_beta()) {
- return site_header_beta($title, $config);
- }
- global $EXPL_LANG, $SIDEBAR_DATA, $RSIDEBAR_DATA, $PAGE_COLUMNS, $PGI;
- // Default to empty array if improper parameter passed
- if (!is_array($config)) { $config = array(); }
- // String defaults
- $lang_input = $canonical = $base = $meta = $layout_helper = '';
- // Count number of columns for layout. The number identifies
- // the layout precisely, as we have no page having a right
- // sidebar and no left sidebar
- $PAGE_COLUMNS = 1;
- if (!empty($SIDEBAR_DATA)) { $PAGE_COLUMNS++; }
- if (!empty($RSIDEBAR_DATA)) { $PAGE_COLUMNS++; }
- // Check which language we are presenting, default to english
- $lang = "en";
- if (isset($config["lang"])) {
- $lang = language_convert($config["lang"]);
- } elseif (isset($PGI, $PGI['head'], $PGI['head'][1])) {
- $lang = language_convert($PGI['head'][1]);
- }
- // Print out lang and charset headers
- if (!isset($config["charset"])) { $config["charset"] = "utf-8"; }
- header("Content-type: text/html;charset={$config['charset']}");
- header("Content-language: {$lang}");
- if (isset($config["generate_modified"]) && $config["generate_modified"]) {
- $timestamp = @filemtime($_SERVER["DOCUMENT_ROOT"] . "/" .$_SERVER["BASE_PAGE"]);
- if ($timestamp) {
- $tsstring = gmdate("D, d M Y H:i:s ", $timestamp) . "GMT";
- header("Last-Modified: " . $tsstring);
- }
- }
- if (isset($config["extra_headers"]) && is_array($config["extra_headers"])) {
- foreach($config["extra_headers"] as $key => $value) {
- header(sprintf("%s: %s", $key, $value));
- }
- }
- if (!empty($title)) { $title = ": $title"; }
- // This page should not be indexed by robots
- if (in_array("noindex", $config)) {
- $meta .= "\n <meta name=\"robots\" content=\"noindex\" />";
- }
- // Set onload handler if required
- $onload = (isset($config['onload']) ? ' onload="' . $config['onload'] . '"' : '');
- // Explicit language setting means that we should put that into the form
- if (isset($EXPL_LANG)) {
- $lang_input = "\n <input type=\"hidden\" name=\"lang\" value=\"$EXPL_LANG\" />";
- }
- // Link tags
- $link = "";
- if (isset($config['link']) && is_array($config['link'])) {
- foreach($config['link'] as $rel => $url) {
- if (!is_array($url)) {
- $link .= "\n <link rel=\"$rel\" href=\"$url\" />";
- } else {
- $link .= "\n <link ";
- foreach($url as $attr => $val) {
- $link .= "$attr=\"$val\" ";
- }
- $link .= "/>";
- }
- }
- }
- // Base href setting for URL shortcuts to work
- if (!empty($_SERVER['BASE_HREF'])) {
- $base = "\n <base href=\"{$_SERVER['BASE_HREF']}\" />";
- $canonical = '<link rel="canonical" href="//php.net/' . $_SERVER['BASE_PAGE'] . '" />';
- }
- // Define layout helper in case we need it
- if ($PAGE_COLUMNS > 2) {
- $layout_helper = "<div id=\"layout_{$PAGE_COLUMNS}_helper\">";
- }
- // Choose name of mirror site specific CSS file
- $mirror_specific_style = ($_SERVER['STATIC_ROOT'] ? 'phpnet' : 'mirror');
- // Support for more header tags
- $moreheadtags = '';
- if (isset($config['headtags'])) {
- if (is_array($config['headtags'])) {
- $moreheadtags = "\n " . join("\n ", $config['headtags']);
- } else {
- $moreheadtags = "\n " . ((string)$config['headtags']);
- }
- }
- $classname = "default";
- if(isset($_SERVER['BASE_PAGE'])) {
- $classname = dirname($_SERVER['BASE_PAGE']);
- if(empty($classname)) {
- $classname = "default";
- }
- }
- // Right-to-left support
- $rtl = "";
- /* Does not appear to work... commenting out.
- switch ($lang) {
- case "he":
- case "ar":
- $rtl = ' style="direction: rtl"';
- break;
- }
- */
- // RTL Hack. Edit styles/rtl.css for rtl specific CSS.
- $import_rtl = '';
- if (in_array($lang, array('ar', 'fa', 'he'))) {
- $import_rtl = '@import url("' . $_SERVER['STATIC_ROOT'] . '/styles/rtl.css");';
- }
- $profile = "";
- if (isset($config['profile']) && !empty($config['profile'])) {
- $profile = ' profile="';
- if (is_array($config['profile'])) {
- $profile .= implode(" ", $config['profile']);
- } else {
- $profile .= $config['profile'];
- }
- $profile .= '"';
- }
- print <<<END_HEADER
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{$lang}" lang="{$lang}">
- <head{$profile}>
- <title>PHP{$title}</title>
- <style type="text/css" media="all">
- @import url("{$_SERVER['STATIC_ROOT']}/styles/site.css");
- @import url("{$_SERVER['STATIC_ROOT']}/styles/{$mirror_specific_style}.css");
- $import_rtl
- </style>
- <!--[if IE]><![if gte IE 6]><![endif]-->
- <style type="text/css" media="print">
- @import url("{$_SERVER['STATIC_ROOT']}/styles/print.css");
- </style>
- <!--[if IE]><![endif]><![endif]-->
- <meta http-equiv="Content-Type" content="text/html; charset={$config['charset']}"/>
- <link rel="shortcut icon" href="{$_SERVER['STATIC_ROOT']}/favicon.ico" />{$link}
- $canonical
- <script type="text/javascript" src="{$_SERVER['STATIC_ROOT']}/userprefs.js"></script>{$base}{$meta}{$moreheadtags}
- </head>
- <body{$onload}>
- <div id="headnav">
- <a href="/" rel="home"><img src="{$_SERVER['STATIC_ROOT']}/images/php.gif"
- alt="PHP" width="120" height="67" id="phplogo" /></a>
- <div id="headmenu">
- <a href="/downloads.php">downloads</a> |
- <a href="/docs.php">documentation</a> |
- <a href="/FAQ.php">faq</a> |
- <a href="/support.php">getting help</a> |
- <a href="/mailing-lists.php">mailing lists</a> |
- <a href="/license">licenses</a> |
- <a href="https://wiki.php.net/">wiki</a> |
- <a href="https://bugs.php.net/">reporting bugs</a> |
- <a href="/sites.php">php.net sites</a> |
- <a href="/conferences/">conferences</a> |
- <a href="/my.php">my php.net</a>
- </div>
- </div>
- <div id="headsearch">
- <form method="post" action="/search.php" id="topsearch">
- <p>
- <span title="Keyboard shortcut: Alt+S (Win), Ctrl+S (Apple)">
- <span class="shortkey">s</span>earch for
- </span>
- <input type="text" name="pattern" value="" size="30" accesskey="s" />
- <span>in the</span>
- <select name="show">
- <option value="all" >all php.net sites</option>
- <option value="local" >this mirror only</option>
- <option value="quickref" selected="selected">function list</option>
- <option value="manual" >online documentation</option>
- <option value="bugdb" >bug database</option>
- <option value="news_archive">Site News Archive</option>
- <option value="changelogs">All Changelogs</option>
- <option value="pear" >just pear.php.net</option>
- <option value="pecl" >just pecl.php.net</option>
- <option value="talks" >just talks.php.net</option>
- <option value="maillist" >general mailing list</option>
- <option value="devlist" >developer mailing list</option>
- <option value="phpdoc" >documentation mailing list</option>
- </select>
- <input type="image"
- src="{$_SERVER['STATIC_ROOT']}/images/small_submit_white.gif"
- class="submit" alt="search" />{$lang_input}
- </p>
- </form>
- </div>
- <div id="layout_{$PAGE_COLUMNS}">{$layout_helper}
- END_HEADER;
- // Print out left column
- if ($PAGE_COLUMNS > 1) {
- echo "\n <div id=\"leftbar\">\n$SIDEBAR_DATA\n </div>";
- }
- // Print out right column
- if ($PAGE_COLUMNS > 2) {
- echo "\n <div id=\"rightbar\">\n$RSIDEBAR_DATA\n </div>";
- }
- // Any layout workarounds?
- if (!empty($config["layout_workaround"])) {
- echo $config["layout_workaround"];
- }
- // Start main page content
- echo "\n <div id=\"content\" class=\"$classname\"{$rtl}>\n";
- }
- // Stats pages still need this
- function commonFooter() { site_footer(); }
- function site_footer($config = array())
- {
- if (myphpnet_beta()) {
- return site_footer_beta($config);
- }
- global $LAST_UPDATED, $PAGE_COLUMNS;
- $stats = (have_stats() ? "\n <a href=\"/stats/\">stats</a> |" : "");
- $rsslink = (isset($config["rss"]) ?
- "<a href=\"{$config["rss"]}\">RSS</a> |" :
- "");
- $atomlink = (isset($config["atom"]) ?
- "<a href=\"{$config["atom"]}\">Atom</a> |" :
- "");
- $viewsource = (isset($_SERVER['BASE_PAGE']) ?
- "<a href=\"/source.php?url=/{$_SERVER['BASE_PAGE']}\">show source</a> |" :
- "");
- $provider_url = mirror_provider_url();
- $provider_name = mirror_provider();
- $mirror_text = (is_official_mirror() ?
- "<a href=\"/mirror.php\">This mirror</a> generously provided by:" :
- "<a href=\"/mirror.php\">This unofficial mirror</a> is operated at:");
- $last_updated = strftime("%c %Z", $LAST_UPDATED);
- $layout_helper = ($PAGE_COLUMNS > 2 ? "</div>" : "");
- //$functionsjs = (in_array("functionsjs", $config) ? "\n<script src=\"" . $_SERVER['STATIC_ROOT'] . '/functions.js" type="text/javascript"></script>' : '');
- // Automate the Copyright year
- $current_year = date('Y');
- print <<<END_FOOTER
- </div>
- <div class="cleaner"> </div>
- {$layout_helper}</div>
- <div id="footnav">
- $rsslink $atomlink $viewsource
- <a href="/credits.php">credits</a> |$stats
- <a href="/sitemap.php">sitemap</a> |
- <a href="/contact.php">contact</a> |
- <a href="/contact.php#ads">advertising</a> |
- <a href="/mirrors.php">mirror sites</a>
- </div>
- <div id="pagefooter">
- <div id="copyright">
- <a href="/copyright.php">Copyright © 2001-{$current_year} The PHP Group</a><br />
- All rights reserved.
- </div>
- <div id="thismirror">
- {$mirror_text}
- <a href="{$provider_url}">{$provider_name}</a><br />
- Last updated: {$last_updated}
- </div>
- </div>
- <!--[if IE 6]>
- <script type="text/javascript">
- /*Load jQuery if not already loaded*/ if(typeof jQuery == 'undefined'){ document.write("<script type=\"text/javascript\" src=\"//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js\"></"+"script>"); var __noconflict = true; }
- var IE6UPDATE_OPTIONS = {
- icons_path: "/ie6update/images/"
- }
- </script>
- <script type="text/javascript" src="/ie6update/ie6update.js"></script>
- <![endif]-->
- </body>
- </html>
- END_FOOTER;
- }
- // Resize the image using the output of make_image()
- // (considering possible HTML/XHTML image tag endings)
- function resize_image($img, $width = 1, $height = 1)
- {
- // Drop width and height values from image if available
- $str = preg_replace('!width=\"([0-9]+?)\"!i', '', $img);
- $str = preg_replace('!height=\"([0-9]+?)\"!i', '', $str);
- // Return image with new width and height added
- return preg_replace(
- '!/?>$!',
- sprintf(' height="%s" width="%s" />', $height, $width),
- $str
- );
- }
- // Return an <img /> tag for a given image file available on the server
- function make_image($file, $alt = FALSE, $align = FALSE, $extras = FALSE,
- $dir = '/images', $border = 0, $addsize = TRUE)
- {
- // If no / was provided at the start of $dir, add it
- $webdir = $_SERVER['STATIC_ROOT'] . ($dir{0} == '/' ? '' : '/') . $dir;
- // Get width and height values if possible
- if ($addsize && ($size = @getimagesize($_SERVER['DOCUMENT_ROOT'] . "$dir/$file"))) {
- $sizeparams = ' ' . trim($size[3]);
- } else {
- $sizeparams = '';
- }
- // Convert right or left alignment to CSS float,
- // but leave other alignments intact (for now)
- if (in_array($align, array("right", "left"))) {
- $align = ' style="float: ' . $align . ';"';
- } elseif ($align) {
- $align = ' align="' . $align . '"';
- } else {
- $align = '';
- }
- // Return with image built up
- return sprintf('<img src="%s/%s" alt="%s"%s%s%s />',
- $webdir,
- $file,
- ($alt ? $alt : ''),
- $sizeparams,
- $align,
- ($extras ? ' ' . $extras : '')
- );
- return $image;
- }
- // Print an <img /> tag out for a given file
- function print_image($file, $alt = FALSE, $align = FALSE, $extras = FALSE,
- $dir = '/images', $border = 0)
- {
- echo make_image($file, $alt, $align, $extras, $dir, $border);
- }
- // Shortcut to usual news image printing (right floating
- // image from the news dir with an alt and an URL)
- function news_image($URL, $image, $alt, $print = true)
- {
- $str = "<a href=\"$URL\">" . make_image("news/$image", $alt, "right") . "</a>";
- if ($print) {
- echo $str;
- }
- return $str;
- }
- // Return HTML code for a submit button image
- function make_submit($file, $alt = FALSE, $align = FALSE, $extras = FALSE,
- $dir = '/images', $border = 0)
- {
- // Get an image without size info and convert the
- // border attribute to use CSS, as border="" is not
- // supported on <input> elements in [X]HTML
- $img = make_image($file, $alt, $align, $extras, $dir, 0, FALSE);
- $img = str_replace(
- "border=\"$border\"",
- "style=\"border: {$border}px;\"",
- $img
- );
- // Return with ready input image
- return '<input type="image"' . substr($img, 4);
- }
- // Return a hiperlink to something within the site
- function make_link ($url, $linktext = FALSE, $target = FALSE, $extras = FALSE)
- {
- return sprintf("<a href=\"%s\"%s%s>%s</a>",
- $url,
- ($target ? ' target="' . $target . '"' : ''),
- ($extras ? ' ' . $extras : ''),
- ($linktext ? $linktext : $url)
- );
- }
- // Print a hyperlink to something, within the site
- function print_link($url, $linktext = FALSE, $target = FALSE, $extras = FALSE)
- {
- echo make_link($url, $linktext, $target, $extras);
- }
- // make_popup_link()
- // return a hyperlink to something, within the site, that pops up a new window
- //
- function make_popup_link ($url, $linktext=false, $target=false, $windowprops="", $extras=false) {
- return sprintf("<a href=\"%s\" target=\"%s\" onclick=\"window.open('%s','%s','%s');return false;\"%s>%s</a>",
- htmlspecialchars($url, ENT_QUOTES | ENT_IGNORE),
- ($target ? $target : "_new"),
- htmlspecialchars($url, ENT_QUOTES | ENT_IGNORE),
- ($target ? $target : "_new"),
- $windowprops,
- ($extras ? ' '.$extras : ''),
- ($linktext ? $linktext : $url)
- );
- }
- // print_popup_link()
- // print a hyperlink to something, within the site, that pops up a new window
- //
- function print_popup_link($url, $linktext=false, $windowprops="", $target=false, $extras=false) {
- echo make_popup_link($url, $linktext, $windowprops, $target, $extras);
- }
- // Print a link for a downloadable file (including filesize)
- function download_link($file, $title, $showsize = TRUE, $mirror = '')
- {
- // Construct the download link for this site or a mirror site
- $download_link = "get/$file/from/a/mirror";
- if ($mirror != '') {
- $download_link = $mirror . $download_link;
- } else {
- $download_link = "/" . $download_link;
- }
- // Print out the download link
- print_link($download_link, $title);
- // Size display is required
- if ($showsize) {
- // We have a full path or a relative to the distributions dir
- if ($tmp = strrchr($file, "/")) {
- $local_file = substr($tmp, 1, strlen($tmp));
- } else {
- $local_file = "distributions/$file";
- }
- // Try to get the size of the file
- $size = @filesize($local_file);
- // Print out size in bytes (if size is
- // less then 1Kb, or else in Kb)
- if ($size) {
- echo ' [';
- if ($size < 1024) {
- echo number_format($size, 0, '.', ',') . 'b';
- } else {
- echo number_format($size/1024, 0, '.', ',') . 'Kb';
- }
- echo ']';
- }
- }
- }
- function sect_to_file($string) {
- $string = strtolower($string);
- $string = str_replace(' ','-',$string);
- $string = str_replace('_','-',$string);
- $func = "function.$string.php";
- $chap = "ref.$string.php";
- $feat = "features.$string.php";
- $struct = "control-structures.$string.php";
- if(@is_file($func)) return $func;
- else if(@is_file($chap)) return $chap;
- else if(@is_file($feat)) return $feat;
- else if(@is_file($struct)) return $struct;
- else return "$string.php";
- }
- function clean($var) {
- return htmlspecialchars(get_magic_quotes_gpc() ? stripslashes($var) : $var, ENT_QUOTES);
- }
- // Clean out the content of one user note for printing to HTML
- function clean_note($text)
- {
- // Highlight PHP source
- $text = highlight_php(trim($text), TRUE);
- // Turn urls into links
- $text = preg_replace(
- '!((mailto:|(http|ftp|nntp|news):\/\/).*?)(\s|<|\)|"|\\\\|\'|$)!',
- '<a href="\1" rel="nofollow" target="_blank">\1</a>\4',
- $text
- );
- return $text;
- }
- function display_errors($errors)
- {
- echo '<div class="errors">';
- if (count($errors) > 1) {
- echo "You need to do the following before your submission will be accepted:<ul>";
- foreach ($errors as $error) {
- echo "<li>$error</li>\n";
- }
- echo "</ul>";
- }
- else {
- echo $errors[0];
- }
- echo '</div>';
- }
- // Displays an event. Used in event submission
- // previews and event information displays
- function display_event($event, $include_date = 1)
- {
- global $COUNTRIES;
- // Current month (int)($_GET['cm'] ?: 0)
- global $cm;
- // Current year (int)($_GET['cy'] ?: 0)
- global $cy;
- // Weekday names array
- for ($i = 1; $i <= 7; $i++) {
- $days[$i] = strftime('%A', mktime(12, 0, 0, 4, $i, 2001));
- }
- // Recurring possibilities
- $re = array(
- 1 => 'First',
- 2 => 'Second',
- 3 => 'Third',
- 4 => 'Fourth',
- -1 => 'Last',
- -2 => '2nd Last',
- -3 => '3rd Last'
- );
- $sday = (isset($event['start']) && !empty($event['start'])) ? strtotime($event['start']) : 0;
- $eday = (isset($event['end']) && !empty($event['end'])) ? strtotime($event['end']) : 0;
- ?>
- <table border="0" cellspacing="0" cellpadding="3" width="100%" class="vevent">
- <tr bgcolor="#dddddd"><td>
- <?php
- // Print out date if needed
- if ($include_date && (isset($event['start']))) {
- echo "<b>", date("F j, Y", $sday), "</b>\n";
- }
- // Print link in case we have one
- if ($event['url']) { echo '<a href="', htmlentities($event['url'], ENT_QUOTES | ENT_IGNORE, 'UTF-8'),'" class="url">'; }
- // Print event description
- echo "<b class='summary'>", stripslashes(htmlentities($event['sdesc'], ENT_QUOTES | ENT_IGNORE, 'UTF-8')), "</b>";
- // End link
- if ($event['url']) { echo "</a>"; }
- // Print extra date info for recurring and multiday events
- switch ($event['type']) {
- case 2:
- case 'multi':
- $dtend = date("Y-m-d", strtotime("+1 day", $eday));
- echo " (<abbr class='dtstart'>", date("Y-m-d",$sday), "</abbr> to <abbr class='dtend' title='$dtend'>", date("Y-m-d",$eday), "</abbr>)";
- break;
- case 3:
- case 'recur':
- $days = $re[$event['recur']]. " " .$days[$event['recur_day']];
- if (!$cm || $cy) {
- $cm = date("m");
- $cy = date("Y");
- }
- $month = date("M", mktime(0, 0, 0, $cm, 1, $cy));
- $dtstart = date("Y-m-d", strtotime($days . ' 0st' .$month. ' ' .$cy));
- echo ' (Every <abbr class="dtstart" title="'.$dtstart.'">', $days, "</abbr> of the month)";
- break;
- }
- // Event category
- if(isset($event['category']) && $event['category']) {
- $cat = array("unknown", "User Group Event", "Conference", "Training");
- echo ' [' . $cat[$event['category']] . '] ';
- }
- // Print out country information
- echo ' (<span class="location">' , $COUNTRIES[$event['country']] , '</span>)';
- ?>
- </td></tr>
- <tr bgcolor="#eeeeee" class="description"><td>
- <?php
- // Print long description
- echo preg_replace("/\r?\n\r?\n/", "<br /><br />", trim(htmlentities($event['ldesc'],ENT_QUOTES | ENT_IGNORE, 'UTF-8')));
- // If we have an URL, print it out
- if ($event['url']) {
- echo '<br /><br /><b>URL:</b> ',
- '<a href="', htmlentities($event['url'], ENT_QUOTES | ENT_IGNORE, 'UTF-8'), '">',
- htmlentities($event['url'], ENT_QUOTES | ENT_IGNORE, 'UTF-8'), '</a>';
- }
- ?>
- </td></tr>
- </table>
- <?php
- }
- /**
- * Print a view
- *
- * @param string $templateName
- * @param array $params
- * @return void
- */
- function print_view($templateName, array $params = array()) {
- $path = $_SERVER['DOCUMENT_ROOT'] . '/views/' . $templateName;
- if(file_exists($path)) {
- if(!empty($params)) {
- foreach($params as $key => $param) {
- $$key = $param;
- }
- }
- include_once $path;
- }
- }
- // Print news links for archives
- function news_archive_sidebar()
- {
- global $SIDEBAR_DATA;
- $SIDEBAR_DATA = '
- <h3>Latest news</h3>
- <p>
- For the latest news, <a href="/index.php" rel="home">check the homepage</a>,
- or <a href="/feed.atom">our Atom feed</a>.
- </p>
- <h3>Archives by year</h3>
- <ul class="toc">
- ';
- for ($i = date("Y"); $i >= 1998; $i--) {
- $pagename = "archive/$i.php";
- $classname = ($pagename == $_SERVER['BASE_PAGE'] ? ' class="active"' : '');
- $SIDEBAR_DATA .= "<li{$classname}><a href=\"/{$pagename}\">{$i}</a></li>\n";
- }
- $SIDEBAR_DATA .= '</ul>';
- }
- // Print news
- function print_news($news, $dog, $max = 5, $onlyyear = null, $return = false) {
- $retval = array();
- $count = 0;
- $news = $news ? $news : array(); // default to empty array (if no news)
- foreach($news as $item) {
- $vevent = "";
- $ok = false;
- // Only print entries in the provided s/dog/cat/ egory
- // If its a conference, use the hCalendar container
- foreach($item["category"] as $category) {
- if (in_array($category["term"], (array)$dog)) {
- $ok = true;
- ++$count;
- }
- if ($category["term"] === "conferences" || $category["term"] === "cfp") {
- $vevent = " vevent";
- }
- }
- if ($count > $max) {
- break;
- }
- if ($ok === false) {
- continue;
- }
- $image = "";
- if(isset($item["newsImage"])) {
- $image = news_image($item["newsImage"]["link"], $item["newsImage"]["content"], $item["newsImage"]["title"], false);
- }
- //$id = parse_url($item["id"], PHP_URL_FRAGMENT); 5.1.2
- $id = parse_url($item["id"]);
- $id = $id["fragment"];
- // Find the permlink
- foreach($item["link"] as $link) {
- if ($link["rel"] === "via") {
- $permlink = $link["href"];
- break;
- }
- }
- if (!isset($permlink)) {
- $permlink = "#" .$id;
- }
- // PHP4 strtotime() doesn't support RFC3339 timestamps
- $published = substr($item["published"], 0, 10);
- $nixtimestamp = strtotime($published);
- $newsdate = date("d-M-Y", $nixtimestamp);
- if ($onlyyear && date("Y", $nixtimestamp) != $onlyyear) {
- $count--;
- continue;
- }
- if ($return) {
- $retval[] = array(
- "title" => $item["title"],
- "id" => $id,
- "permlink" => $permlink,
- "date" => $newsdate,
- );
- continue;
- }
- echo <<< EOT
- <div class="newsItem hentry{$vevent}">
- <div class="newsImage">{$image}</div>
- <h2 class="summary entry-title"><a name="{$id}" id="{$id}" href="{$permlink}" rel="bookmark" class="bookmark">{$item["title"]}</a></h2>
- <div class="entry-content description">
- <abbr class="published newsdate" title="{$item["published"]}">{$newsdate}</abbr>
- {$item["content"]}
- </div>
- </div>
- EOT;
- }
- return $retval;
- }
- // BETA
- function site_header_beta($title = '', $config = array())
- {
- global $SIDEBAR_DATA;
- global $MYSITE;
- $defaults = array(
- "lang" => myphpnet_language(),
- "current" => "",
- "meta-navigation" => array(),
- 'classes' => '',
- );
- $config += $defaults;
- $lang = language_convert($config["lang"]);
- $curr = $config["current"];
- $classes = $config['classes'];
- if (empty($title)) {
- $title = "Hypertext Preprocessor";
- }
- // shorturl; http://wiki.snaplog.com/short_url
- if (isset($_SERVER['BASE_PAGE']) && $shortname = get_shortname($_SERVER["BASE_PAGE"])) {
- $shorturl = "http://php.net/" . $shortname;
- }
- // For static content
- // FIXME: How does static.php.net work? Will it get the /js/ folders?
- if (false && ($MYSITE == "http://www.php.net/" || $MYSITE == 'http://php.net/')) {
- $STATIC_ROOT = "http://static.php.net/www.php.net/";
- } elseif (false && !empty($_SERVER["STATIC_ROOT"])) {
- $STATIC_ROOT = $_SERVER["STATIC_ROOT"];
- } else {
- $STATIC_ROOT = "/";
- }
- require dirname(__FILE__) ."/header.inc";
- }
- function site_footer_beta($config = array())
- {
- require dirname(__FILE__) . "/footer.inc";
- }
- function news_toc($sections = null) {
- include dirname(__FILE__) . "/pregen-news.inc";
- $items = array(
- "news" => array(
- "title" => "News",
- "link" => "/archive/",
- "children" => print_news($NEWS_ENTRIES, "frontpage", 3, null, true),
- ),
- "conferences" => array(
- "title" => "Conferences",
- "link" => "/conferences/",
- "children" => print_news($NEWS_ENTRIES, "conferences", 3, null, true),
- ),
- "papers" => array(
- "title" => "Call for Papers",
- "link" => "/conferences/",
- "children" => print_news($NEWS_ENTRIES, "cfp", 3, null, true),
- ),
- );
- foreach($items as $section => $menu) {
- // only print requested sections.
- if (is_array($sections) && !in_array($section, $sections)) {
- continue;
- }
- echo "<dt><a href='{$menu["link"]}'>{$menu["title"]}</a></dt>\n";
- foreach($menu["children"] as $child) {
- echo "<dd><a href='{$child["permlink"]}'>{$child["title"]}</a></dd>\n";
- }
- }
- }
- function doc_toc($lang) {
- $file = dirname(__FILE__) . "/../manual/$lang/toc/index.inc";
- if (!file_exists($file)) {
- $lang = "en"; // Fallback on english if the translation doesn't exist
- $file = dirname(__FILE__) . "/../manual/en/toc/index.inc";
- }
- require dirname(__FILE__) . "/../manual/$lang/toc/index.inc";
- ?>
- <dl>
- <dt><a href="/manual/">PHP Manual</a></dt>
- <?php doc_toc_list($lang, $TOC, 'getting-started'); ?>
- <?php doc_toc_title($lang, $TOC, 'install', 'dd'); ?>
- </dl>
- <dl>
- <?php doc_toc_title($lang, $TOC, 'langref'); ?>
- <?php doc_sub_entry($lang, 'langref', 'language.basic-syntax'); ?>
- <?php doc_sub_entry($lang, 'langref', 'language.variables'); ?>
- <?php doc_sub_entry($lang, 'langref', 'language.operators'); ?>
- <?php doc_sub_entry($lang, 'langref', 'language.functions'); ?>
- <?php doc_sub_entry($lang, 'langref', 'language.oop5'); ?>
- </dl>
- <dl>
- <?php doc_toc_title($lang, $TOC, 'funcref'); ?>
- <?php doc_sub_entry($lang, 'refs.basic.vartype', 'book.array'); ?>
- <?php doc_sub_entry($lang, 'refs.calendar', 'book.datetime'); ?>
- <?php doc_sub_entry($lang, 'refs.basic.text', 'book.strings'); ?>
- <?php doc_toc_title($lang, $TOC, 'faq'); ?>
- </dl>
- <dl>
- <?php doc_toc_title($lang, $TOC, 'security'); ?>
- <?php doc_sub_entry($lang, 'security', 'security.database'); ?>
- <?php doc_sub_entry($lang, 'security', 'security.variables'); ?>
- <?php doc_sub_entry($lang, 'faq', 'faq.passwords'); ?>
- <?php doc_toc_title($lang, $TOC, 'appendices'); ?>
- </dl>
- <?php
- }
- function doc_sub_entry($lang, $file, $subfile, $elm = "dd") {
- static $cache = array();
- if (isset($cache["$lang.$file"])) {
- $TOC = $cache["$lang.$file"];
- } else {
- include dirname(__FILE__) . "/../manual/$lang/toc/$file.inc";
- }
- foreach($TOC as $entry) {
- if (substr($entry[0], 0, strlen($subfile)) == $subfile) {
- echo "\t<$elm><a href='/manual/$lang/{$entry[0]}'>{$entry[1]}</a></$elm>\n";
- }
- }
- }
- function doc_toc_list($lang, $index, $file) {
- include dirname(__FILE__) . "/../manual/$lang/toc/$file.inc";
- doc_toc_title($lang, $index, $file);
- foreach($TOC as $entry) {
- echo "\t<dd><a href='/manual/$lang/{$entry[0]}'>{$entry[1]}</a></dd>\n";
- }
- }
- function doc_toc_title($lang, $index, $file, $elm = "dt") {
- foreach($index as $entry) {
- if ($entry[0] == "$file.php") {
- $link = $entry[0];
- $title = $entry[1];
- break;
- }
- }
- echo "<$elm><a href='/manual/$lang/$link'>$title</a></$elm>\n";
- }
- /* vim: set et ts=4 sw=4 ft=php: : */