<?php

// connect to mysql, set connect to utf8

$connect = @new mysqli($srv$usr$pwd$db);

// check connection

if (mysqli_connect_errno()) {
 
$errno mysqli_connect_errno();
 
$err   mysqli_connect_error();
 echo <<<str
<h3>PHP could not access MySQL</h3>
<p>Error Number: 
$errno<br />
Internal error: "
$err"</p>
</body>
</html>
str;
 exit();
}

// $connect -> set_charset("utf8");

// SQL for hit counter update

$counterUpdateSQL = <<<str
 UPDATE metadata
 SET MetaValue=(MetaValue + 1)
 WHERE MetaKey = 'Count'
str;

// SQL for hit counter value

$counterSQL = <<<str
 SELECT MetaValue
 FROM metadata
 WHERE Metakey = 'Count'
str;

// SQL statement for top menu content

$topMenuSQL = <<<sql
SELECT * FROM (
 SELECT
  `node`.`CategoryID` AS `catID`,
  COUNT(`parent`.`CategoryName`) AS `depth`,
  `node`.`CategoryName` AS `Category`
 FROM `categories` `node`, `categories` `parent`
  WHERE `node`.`LeftValue`
   BETWEEN `parent`.`LeftValue` AND `parent`.`RightValue`
   AND `parent`.`LeftValue` > 1
 GROUP BY `node`.`CategoryID`
 ORDER BY `node`.`LeftValue`
 ) AS t
WHERE depth = 1
sql;

// run $topMenuSQL statement

$topMenuQry = @$connect -> query($topMenuSQL);

// check $topMenuQry

if ($topMenuQry === FALSE) {
 
$errno  $connect -> errno;
 
$errmsg $connect -> error;
 echo 
"<p>Main Menu SQL error<br />\r\n";
 echo 
"Error number: $errno<br />\r\n";
 echo 
"Internal error: \"$errmsg\"</p>";
 
$connect -> close();
 exit;
}

// SQL for top menu subtree

$topMenuSubSQL = <<<sql
SELECT
 node.CategoryName as Category,
 COUNT((parent.CategoryName) - (subtree.depth)) -1 as depth
FROM categories node,
 categories parent,
 categories subparent,
 (
  SELECT
   node.CategoryName,
   COUNT(parent.CategoryName) AS depth
  FROM categories node,
   categories parent
   WHERE node.LeftValue
    BETWEEN parent.LeftValue AND parent.RightValue
    AND node.CategoryName = @CatName
  GROUP BY node.CategoryName
  ORDER BY node.LeftValue
 ) AS subtree
 WHERE node.LeftValue BETWEEN parent.LeftValue AND parent.RightValue
  AND node.LeftValue BETWEEN subparent.LeftValue AND subparent.RightValue
  AND subparent.CategoryName = subtree.CategoryName
 GROUP BY node.CategoryName
 HAVING depth = 2
 ORDER BY node.LeftValue
sql;

// SQL statement for main menu content

$mainMenuSQL = <<<txt
 SELECT
  `node`.`CategoryID` AS `catID`,
  COUNT(`parent`.`CategoryName`) AS `depth`,
  `node`.`CategoryName` AS `Category`
 FROM `categories` `node`, `categories` `parent`
 WHERE `node`.`LeftValue`
  BETWEEN `parent`.`LeftValue` AND `parent`.`RightValue`
  AND `parent`.`LeftValue` > 1
 GROUP BY `node`.`CategoryID`
 ORDER BY `node`.`LeftValue`
txt;

// run $mainMenuSQL statement

$mainMenuQry = @$connect -> query($mainMenuSQL);

// check $mainMenuQry

if ($mainMenuQry === FALSE) {
 
$errno  $connect -> errno;
 
$errmsg $connect -> error;
 echo 
"<p>Main Menu SQL error<br />\r\n";
 echo 
"Error number: $errno<br />\r\n";
 echo 
"Internal error: \"$errmsg\"</p>";
 
$connect -> close();
 exit;
}

// Test if $_GET variables are set

if (!isset($_GET['catID'])) {
 
$_GET['catID'] = 0;
}

if (!isset(
$_GET['artID'])) {
 
$_GET['artID'] = null;
}

if (!isset(
$_GET['page'])) {
 
$_GET['page'] = null;
}

// SQL statement for category description

$catDescSQL = <<<txt
 SELECT
  `CategoryID` AS `catID`,
  `CategoryName` AS `catName`,
  `Description` AS `catDesc`
 FROM `categories`
 WHERE `CategoryID` = "
$_GET[catID]"
txt;

// run $catDescSQL statement

$catDescQry = @$connect -> query($catDescSQL);

// check $catDescQry

if ($catDescSQL === FALSE) {
 
$errno  $connect -> errno;
 
$errmsg $connect -> error;
 echo 
"<p>Category SQL error<br />\r\n";
 echo 
"Error number: $errno<br />\r\n";
 echo 
"Internal error: \"$errmsg\"</p>";
 
$connect -> close();
 exit;
}

// SQL statement for a requested article page

$artSQL = <<<txt
SELECT `SectionName`, `SectionContent`, `SectionID`
FROM `articleSections`
WHERE `ArticleID` = "
$_GET[artID]"
 AND `PageID` = "
$_GET[page]"
ORDER BY `SectionID`
txt;

// run $artSQL statement

$artQry = @$connect -> query($artSQL);

// check $artQry

if ($artQry === FALSE) {
 
$errno $connect -> errno;
 
$errmsg $connect -> error;
 echo 
"<p>Article SQL error<br />\r\n";
 echo 
"Error number: $errno<br />\r\n";
 echo 
"Internal error: \"$errmsg\"</p>";
 
$connect -> close();
 exit;
}

// SQL statement for article pages

$artPagesSQL = <<<txt
SELECT `PageID`, `SectionName`
FROM `articleSections`
WHERE `ArticleID` = "
$_GET[artID]"
GROUP BY `PageID`
txt;

// run $artPagesSQL statement

$artPagesQry = @$connect -> query($artPagesSQL);

// check $artPagesQry

if ($artPagesQry === FALSE) {
 
$errno $connect -> errno;
 
$errmsg $connect -> error;
 echo 
"<p>Article Page SQL error<br />\r\n";
 echo 
"Error number: $errno<br />\r\n";
 echo 
"Internal error: \"$errmsg\"</p>";
 
$connect -> close();
 exit;
}

// SQL statement for article pages + details

$artSectionSQL = <<<txt
SELECT `PageID`, `SectionID`, `SectionName`
FROM `articleSections`
WHERE `ArticleID` = "
$_GET[artID]"
GROUP BY `PageID`
txt;

// run $artSectionSQL statement

$artSectionQry = @$connect -> query($artSectionSQL);

// check $artSectionQry

if ($artSectionQry === FALSE) {
 
$errno $connect -> errno;
 
$errmsg $connect -> error;
 echo 
"<p>Article Section SQL error<br />\r\n";
 echo 
"Error number: $errno<br />\r\n";
 echo 
"Internal error: \"$errmsg\"</p>";
 
$connect -> close();
 exit;
}

// SQL statement for "Related Articles"

$relArtSQL = <<<txt
SELECT `ArticleTitle`, `ArticleSummary`, `articles`.`ArticleID` AS `artID`
FROM `articles`
LEFT JOIN `articles2categories`
 ON `articles2categories`.`ArticleID` = `articles`.`ArticleID`
LEFT JOIN `categories`
 ON `articles2categories`.`CategoryID` = `categories`.`CategoryID`
WHERE `categories`.`CategoryID` = "
$_GET[catID]"
 AND `articles`.`ArticleID` != "
$_GET[artID]"
txt;

// run $relArtSQL statement

$relArtQry = @$connect -> query($relArtSQL);

// check $relArtQry

if ($relArtQry === FALSE) {
 
$errno  $connect -> errno;
 
$errmsg $connect -> error;
 echo 
"<p>Related Article SQL error<br />\r\n";
 echo 
"Error number: $errno<br />\r\n";
 echo 
"Internal error: \"$errmsg\"</p>";
 
$connect -> close();
 exit;
}

?>