<?php session_start(); include("include/settings.php"); $db = new SQLite3('ask.db'); $p_user = $db->query("SELECT * FROM users WHERE username = '" . $_GET["q"] . "';")->fetchArray(SQLITE3_ASSOC); if(!$p_user || $p_user["id"] == 0){ // Test if user exists or if it is the id 0, anonymous include("404.php"); die(); } if(isset($_SESSION["uid"])){ if($_SESSION["uid"] == $p_user["id"]){ $is_current_user = true; } } ?> <html> <head> <?php include("themes/$theme_name/user.php"); ?> <title><?= $p_user["username"] ?> | LibreCat</title> </head> <body> <?php // print_profile($p_user); ?> <?php include("include/header.php"); ?> <div id="parent-container"> <div id="user-container"> <p id="user-name"><?= $p_user["username"] ?></p> <p class="user-bio"><?php // if($p_user["bio"]) echo($p_user["bio"]); // else echo("This is a sample bio, please change me, this is just to test the layout."); ?></p> <?php if($is_current_user){ echo("<br/>"); if($fancy_urls){ echo("<a href='/config/profile'>config</a>"); echo(" - "); echo('<a target="_blank" href="https://twitter.com/share?text=Ask%20me%20something&url=https%3A%2F%2Fask.fai.su%2Fuser%2F' . $p_user["username"] . '&ref_src=twsrc%5Etfw">share on twitter</a>'); } else{ echo("<a href='/config.php?q=profile'>config</a>"); } } ?> </div> <?php /** QUESTION HIGHLIGHT **/ if(isset($_GET["p"])){ //Get info about the question $h_question = $db->query("SELECT * FROM questions WHERE id = " . $_GET["p"] . ";")->fetchArray(SQLITE3_ASSOC); $h_user = $db->query("SELECT * FROM users WHERE id = " . $h_question["by"] . ";")->fetchArray(SQLITE3_ASSOC); $q_key = md5($h_question["question"]); if($p_user["id"] == $h_question["user"] and ($h_question["private"] != 1 or $q_md5 != $_GET["key"] or $is_current_user)){ // Only show question that are for this user echo('<div class="highlighted-post">'); echo('<div class="question-body">'); $time = new DateTime("@0"); // Title echo("<p class='question-username'>"); if($h_user["id"] == 0){ // no link if anonymous echo($h_user["name"]); } else{ $new_get["q"] = $h_user["name"]; echo("<a href='" . redirect("user", $new_get) . "'>" . $h_user["name"] ."</a>\n"); } echo(" asked:</p>"); // Actual question text echo("\t<p class='question-text'>". $h_question["question"] ."</p>\n"); // Footer if($is_current_user){ echo("\t<a href='/action/reply.php?q=".$h_question["id"]."'>reply</a> "); echo("\t<a href='/action/delete-question.php?q=".$h_question["id"]."'>delete</a> "); echo("fav ignore "); } // Time $time->settimestamp($h_question["q_date"]); echo('<p class="question-date">'); echo('<a href="?p=' . $h_question["id"] . '">' . $time->format('Y-m-d h:i:s') . '</a>'); echo('</p>'); echo('</div>'); // question-body /* Answer */ if($h_question["answer"]){ echo("<div class='answer'>"); echo('<p class="title">' . $p_user["name"] . ' answered:'); echo("<p class='answer-text'>" . $h_question["answer"] . "</p>"); $time->settimestamp($h_question["a_date"]); echo("<p class='answer-date'>" . $time->format("Y-m-d h:i:s") . "</p>"); echo("</div>"); } echo('</div>'); // highlighted-post } } ?> <div class="columns-container"> <div class="column form-column"> <form name="input" action="/action/publish-question.php" method="post"> <textarea placeholder="Ask me anything!" id="post-text" name="post-text"></textarea> <br/> <input type="hidden" name="uid" value="<?= $p_user["id"] ?>"/> <p><input type="checkbox" <?php if(!isset($_SESSION["uid"])) echo("checked disabled"); ?> name="anon"/> Post anonymously</p> <p><input type="checkbox" name="priv"/> Private</p> <?php if(isset($errorMsg)) echo "<p>$errorMsg</p>\n"; ?> <input type="submit" value="Ask" name="post-submit"/> </form> </div> <div class="question-container column"> <?php if(!$_GET["page"]) $_GET["page"] = 1; $p_limit = 10; // TODO: Make the limit variable $p_offset = ($_GET['page'] - 1) * $p_limit; // SQLite3 unsertands offsets in units, not pages if(!$p_offset || $p_offset <= 0) $p_offset = 0; // TODO: Build a mechanism to make off-limits pages show as the last one $private_filter = ""; if(!$is_current_user) $private_filter = "AND private IS NOT 1 AND answer IS NOT NULL"; $q_count = $db->query('SELECT COUNT(*) FROM questions WHERE user = "' . $p_user["id"] . '";')->fetchArray(SQLITE3_ASSOC)['COUNT(*)']; $u_prep = $db->prepare("SELECT * FROM users WHERE id = :id"); $qs = $db->query("SELECT * FROM questions WHERE user = '". $p_user["id"] . "' " . $private_filter . " ORDER BY id DESC LIMIT ". $p_limit ." OFFSET ". $p_offset .";"); /** QUESTIONS MAIN LOOP **/ $time = new DateTime("@0"); $tmp_get = $_GET; while($current = $qs->fetchArray(SQLITE3_ASSOC)){ // Execute prepared statement $u_prep->bindValue(":id", $current["by"], SQLITE3_INTEGER); $q_user = $u_prep->execute()->fetchArray(SQLITE3_ASSOC); echo("\t\t\t"); echo("<div class='question'>\n"); // Question username echo("\t\t\t\t"); echo("<p class='question-username'>" ); if($q_user["id"] == 0){ // no link if anonymous echo($q_user["name"]); } else{ $new_get["q"] = $q_user["name"]; echo("<a href='" . redirect("user", $new_get) . "'>" . $q_user["name"] ."</a>"); } if($current["private"] == 1){ echo(" "); echo("<span class='question-private'>(private)</span>"); } echo("</p>\n"); // Actual text body echo("\t\t\t\t"); echo("<p class='question-text'>". $current["question"] ."</p>\n"); /* Question footer */ echo("\t\t\t\t"); echo('<div class="question-footer">'); echo("\n"); // Actions if($is_current_user){ echo("\t\t\t\t\t"); echo("<a href='/action/reply.php?q=".$current["id"]."'>reply</a>\n"); echo("\t\t\t\t\t"); echo("<a href='/action/delete-question.php?q=".$current["id"]."'>delete</a>\n"); echo("\t\t\t\t\t"); echo("fav\n"); } // Time $time->settimestamp($current["q_date"]); echo("\t\t\t\t\t"); $tmp_get["p"] = $current["id"]; if($current["private"] == 1) $tmp_get["key"] = md5($current["question"]); echo('<a href="' . redirect("user", $tmp_get) . '">'); echo("<p class='question-date'>" . $time->format("Y-m-d h:i:s") . "</p>"); echo("</a>\n"); echo("\t\t\t\t"); echo("</div>\n"); // Footer /* Answer */ if($current["answer"]){ echo("\t\t\t\t"); echo("<div class='answer'>\n"); echo("\t\t\t\t\t"); echo(nl2br("<p class='answer-text'>" . $current["answer"] . "</p>\n")); $time->settimestamp($current["a_date"]); echo("\t\t\t\t\t"); echo("<p class='answer-date'>" . $time->format("Y-m-d h:i:s") . "</p>\n"); echo("\t\t\t\t"); echo("</div>\n"); } echo("\t\t\t"); echo("</div>\n"); // Question echo("\n"); } /* PAGE SELECTOR */ // ps_* means Page Selector $p_total = ceil($q_count / $p_limit); $ps_margin = 2; // Amount of page numbers to show after and before the actual one // Limit displayed numbers to the existing ones (bound logic) if($_GET["page"] - $ps_margin <= 1) $ps_init = 1; else if($_GET["page"] + $ps_margin > $p_total) $ps_init = $p_total - $ps_margin * 2; else $ps_init = $_GET["page"] - $ps_margin; $ps = ""; $ps .= "<div class='page-selector'>\n"; function ps_item($label, $link){ $ps_item = ""; if($link){ $tmp_get = $_GET; $tmp_get["page"] = $link; $link_init = "<a href='" . redirect("user", $tmp_get) . "'>"; $label = $link_init . $label . "</a>"; } $ps_item = "\t<div class='ps_item'>" . $label . "</div>\n"; return $ps_item; } // "|<" and "<" if($ps_init > 1) $ps .= ps_item("|<", 1); if($_GET["page"] > 1) $ps .= ps_item("<", $_GET["page"] - 1); // Numbers for($i = $ps_init; $i <= $ps_init + $ps_margin * 2 && $i <= $p_total && $p_total != 1; $i++){ if($i == $_GET["page"]) $ps .= ps_item($i, ""); else $ps .= ps_item($i, $i); } // ">" and ">|" if($_GET["page"] < $p_total) $ps .= ps_item(">", $_GET["page"] + 1); if($ps_init + $ps_margin * 2 < $p_total) $ps .= ps_item(">|",$p_total); $ps .= "</div>\n"; echo $ps; ?> </div> </div> </div> <div id="footer"> <p> Powered by Librecat, under the GPL3 license. Source code: <a href="https://git.fai.su/dendy/librecat">https://git.fai.su/dendy/librecat</a> </p> </div> </body> </html>