Пример #1
0
function freshports_PortDisplay($db, $category, $port)
{
    global $TableWidth;
    global $FreshPortsTitle;
    global $User;
    require_once $_SERVER['DOCUMENT_ROOT'] . '/../classes/port-display.php';
    # these two options must be the last on the line.  And as such are mutually exclusive
    define('BYPASSCACHE', 'bypasscache=1');
    # do not read the cache for display
    define('REFRESHCACHE', 'refreshcache=1');
    # refresh the cache
    $BypassCache = substr($_SERVER["REQUEST_URI"], strlen($_SERVER["REQUEST_URI"]) - strlen(BYPASSCACHE)) == BYPASSCACHE;
    $RefreshCache = substr($_SERVER["REQUEST_URI"], strlen($_SERVER["REQUEST_URI"]) - strlen(REFRESHCACHE)) == REFRESHCACHE;
    $Debug = 0;
    if ($Debug) {
        echo 'into ' . __FILE__ . ' now' . "<br>\n";
    }
    $PageNumber = 1;
    if (isset($_SERVER['REDIRECT_QUERY_STRING'])) {
        parse_str($_SERVER['REDIRECT_QUERY_STRING'], $query_parts);
    } else {
        $query_parts = null;
    }
    if ($Debug) {
        echo print_r($query_parts, true);
    }
    if (isset($query_parts['page']) && Is_Numeric($query_parts['page'])) {
        $PageNumber = intval($query_parts['page']);
        if ($PageNumber != $query_parts['page'] || $PageNumber < 1) {
            $PageNumber = 1;
        }
    }
    $port_display = new port_display($db, $User);
    $port_display->SetDetailsFull();
    $Cache = new CachePort();
    $Cache->PageSize = $User->page_size;
    $result = $Cache->RetrievePort($category, $port, CACHE_PORT_DETAIL, $PageNumber);
    if (!$result && !$BypassCache && !$RefreshCache) {
        if ($Debug) {
            echo "found something from the cache<br>\n";
        }
        $HTML = $Cache->CacheDataGet();
        #
        # we need to know the element_id of this port
        # and the whether or not it is on the person's watch list
        # let's create a special function for that!
        #
        $EndOfFirstLine = strpos($HTML, "\n");
        if ($EndOfFirstLine == false) {
            die('Internal error: I was expecting an ElementID and found nothing');
        }
        # extract the ElementID from the cache
        $ElementID = intval(substr($HTML, 0, $EndOfFirstLine));
        if ($ElementID == 0) {
            syslog(LOG_ERR, "Extract of ElementID from cache failed.  Is cache corrupt/deprecated? port was {$category}/{$port}");
            die('sorry, I encountered a problem with the cache.  Please send the URL and this message to the webmaster.');
        }
        if ($User->id) {
            $OnWatchList = freshports_OnWatchList($db, $User->id, $ElementID);
        } else {
            $OnWatchList = 0;
        }
        $HTML = substr($HTML, $EndOfFirstLine + 1);
    } else {
        if ($Debug) {
            echo "found NOTHING in cache for '{$category}/{$port}'<br>\n";
        }
        $HTML = '';
        $port_id = freshports_GetPortID($db, $category, $port);
        if (!isset($port_id)) {
            if ($Debug) {
                echo "{$category}/{$port} is not a port according to freshports_GetPortID<br>\n";
            }
            return -1;
        }
        if ($Debug) {
            echo "{$category}/{$port} found by freshports_GetPortID<br>";
        }
        $MyPort = new Port($db);
        $MyPort->FetchByID($port_id, $User->id);
        $port_display->port = $MyPort;
        $HTML .= $port_display->Display();
        $HTML .= "</TD></TR>\n</TABLE>\n\n";
        $HTML .= DisplayPortCommits($MyPort, $PageNumber);
        # If we are not reading
        if (!$BypassCache || $RefreshCache) {
            $Cache->CacheDataSet($MyPort->{'element_id'} . "\n" . $HTML);
            $Cache->AddPort($MyPort->category, $MyPort->port, CACHE_PORT_DETAIL, $PageNumber);
        }
        $ElementID = $MyPort->{'element_id'};
        $OnWatchList = $MyPort->{'onwatchlist'};
    }
    # At this point, we have the port detail HTML
    $HTML = $port_display->ReplaceWatchListToken($OnWatchList, $HTML, $ElementID);
    global $ShowAds, $BannerAd;
    global $ShowAds;
    global $BannerAd;
    if ($ShowAds && $BannerAd) {
        $HTML_For_Ad = "<hr><center>\n" . Ad_728x90PortDescription() . "\n</center>\n<hr>\n";
    } else {
        $HTML_For_Ad = '';
    }
    $HTML = $port_display->ReplaceAdvertismentToken($HTML, $HTML_For_Ad);
    freshports_ConditionalGetUnix($Cache->LastModifiedGet());
    header("HTTP/1.1 200 OK");
    $Title = $category . "/" . $port;
    require_once $_SERVER['DOCUMENT_ROOT'] . '/../include/getvalues.php';
    freshports_Start($Title, "{$FreshPortsTitle} - new ports, applications", "FreeBSD, index, applications, ports");
    ?>


<?php 
    echo freshports_MainTable();
    ?>

<tr><TD VALIGN="top" width="100%">

<?php 
    echo freshports_MainContentTable();
    ?>

<TR>
<?php 
    echo freshports_PageBannerText("Port details");
    ?>
</TR>

<tr><td valign="top" width="100%">

<?php 
    echo $HTML;
    ?>

</TD>
  <TD VALIGN="top" WIDTH="*" ALIGN="center">
  <?php 
    echo freshports_SideBar();
    ?>
  </td>
</TR>

</TABLE>

<?php 
    echo freshports_ShowFooter();
    ?>

</body>
</html>

<?php 
    return 0;
}