Misdew/canvas/interact.php
2022-07-20 09:20:25 -04:00

336 lines
11 KiB
PHP

<?php
$this_page = "canvas";
require_once("../inc/conx.php");
if($logged_in == false) {
header("location: /");
exit();
}
$g_user = safe($_GET['u']);
if($g_user == '') {
$g_user = $u_username;
}
if(mysqli_num_rows($cnv_q = mysqli_query($conx, "SELECT uid,username FROM accounts WHERE username='$g_user'")) == '0') {
header("location: /hub");
exit();
}
$cnv_r = mysqli_fetch_assoc($cnv_q);
$cnv_uid = $cnv_r['uid'];
$cnv_username = $cnv_r['username'];
// ************************ //
// *** BLOCKING SYSTEM *** //
// ************************ //
$blks = mysqli_query($conx, "SELECT blocked_uid FROM blocking WHERE uid='$u_uid' && blocked_uid='$cnv_uid'");
$blkc = mysqli_num_rows($blks);
if($blkc > 0) {
header("location: /hub");
exit();
}
$blks = mysqli_query($conx, "SELECT blocked_uid FROM blocking WHERE blocked_uid='$u_uid' && uid='$cnv_uid'");
$blkc = mysqli_num_rows($blks);
if($blkc > 0) {
header("location: /hub");
exit();
}
// ************************ //
// *** BLOCKING SYSTEM *** //
// ************************ //
// User theme colors
$usri_q2 = mysqli_query($conx, "SELECT username_color,text_color FROM user_theme_colors WHERE uid='$cnv_uid' && theme_id='$g_themeid'");
$usri_r2 = mysqli_fetch_assoc($usri_q2);
$username_color = $usri_r2['username_color'];
$username_tcolor = $usri_r2['text_color'];
# # # # # # #
# WEBSITE LOCATION #
# # # # # # #
if($u_siteloc != '/canvas/' . $cnv_username) {
if($cnv_username == $u_username) {
$loc_desc = "viewin\' their canvas";
}
else {
$loc_desc = "stalkin\' a canvas";
}
mysqli_query($conx, "UPDATE accounts SET site_locdesc='$loc_desc' WHERE uid='$u_uid'");
mysqli_query($conx, "UPDATE accounts SET site_locurl='/canvas/$cnv_username' WHERE uid='$u_uid'");
}
?>
<div class="comment_box">
<center>
<table style="width: 95%; word-break: break-word;">
<tr>
<td style="width: 100%;">
<div id="comment" placeholder="Write a comment..." class="comment_box" contenteditable></div>
</td>
<td onclick="pComment();">
<button id="pstcomm" class="comment_button">
<i class="fa fa-pencil" aria-hidden="true"></i>
</button>
</td>
</tr>
</table>
<center>
</div>
<?php
echo "<div id=\"comments\">";
require_once("comments.php");
echo "</div><br>";
if($u_username != $cnv_username) {
echo "<div class=\"question_ask_box\">
<center>
<table style=\"width: 95%; word-break: break-word;\">
<tr>
<td style=\"width: 100%;\">
<div id=\"question\" placeholder=\"Ask a question...\" class=\"question_ask_box\" contenteditable></div>
</td>
<td onclick=\"askQuest('norm');\">
<button id=\"norm\" class=\"question_ask_buttons\">
<i class=\"fa fa-pencil\" aria-hidden=\"true\"></i>
</button>
</td>
<td onclick=\"askQuest('anon');\">
<button id=\"anon\" class=\"question_ask_buttons\">
<i class=\"fa fa-eye-slash\" aria-hidden=\"true\"></i>
</button>
</td>
</tr>
</table>
<center>
</div>";
}
echo "<div id=\"questions\">";
require_once("questions.php");
echo "</div>";
?>
<script>
function upQs() {
$.get("questions.php?u=<?php echo $cnv_username; ?>", function(d) {
$("#questions").html(d);
});
}
function upCs() {
$.get("comments.php?u=<?php echo $cnv_username; ?>", function(d) {
$("#comments").html(d);
});
}
function quesRem(quest_id) {
if (confirm('Remove?')) {
var true_btn = "rembtn_" + quest_id;
$.ajax({
url: 'question_delete.php',
type: 'GET',
data: { quest_id: quest_id },
success: function(data){
if(data == '') {
$('#' + true_btn).empty();
document.getElementById(true_btn).innerHTML = '<i class=\"fa fa-check-circle\" aria-hidden=\"true\"></i>';
upQs();
}
},
error: function(data) {
document.getElementById(true_btn).innerHTML = '<i class=\"fa fa-exclamation\" aria-hidden=\"true\"></i>';
}
});
document.getElementById(true_btn).innerHTML = '<i class=\"fa fa-spinner\" aria-hidden=\"true\"></i>';
}
}
function dComment(c_id) {
if (confirm('Remove?')) {
$.ajax({
url: 'comment_delete.php',
type: 'GET',
data: { c_id: c_id },
success: function(data){
if(data == '') {
upCs();
}
},
error: function(data) {
alert('error');
}
});
}
}
function loadQuests() {
var amount = document.getElementById("qamount").value;
var qcontent = document.getElementById("ld_quests");
$.ajax({
type: 'get',
url: 'more_questions.php',
data: {
amntcnt:amount, c: <?php echo $cnv_uid; ?>
},
success: function(more_content) {
qcontent.innerHTML = qcontent.innerHTML+more_content;
document.getElementById("qamount").value = Number(amount)+3;
}
});
var getcount = new XMLHttpRequest();
getcount.open("GET", "questamnt.php?c=<?php echo $cnv_uid;?>", true);
getcount.onreadystatechange = function(){
if(getcount.readyState == 4)
if(getcount.status == 200) {
document.getElementById("qLd").innerHTML = '<div id=\"questions_loadmore\"><i class=\"fa fa-chevron-circle-down fa-lg\" aria-hidden=\"true\"></i></div>';
var numCont = getcount.responseText;
if(numCont <= Number(amount) + 3) {
document.getElementById("qLd").innerHTML = "";
}
}
else{
alert("error");
document.getElementById("qLd").innerHTML = '<div id=\"questions_loadmore\"><i class=\"fa fa-chevron-circle-down fa-lg\" aria-hidden=\"true\"></i></div>';
}
};
getcount.send();
return false;
}
function loadComments() {
var camount = document.getElementById("camount").value;
var ccontent = document.getElementById("ld_comments");
$.ajax({
type: 'get',
url: 'more_comments.php',
data: {
amntcnt:camount, u: <?php echo $cnv_uid; ?>
},
success: function(more_content) {
ccontent.innerHTML = ccontent.innerHTML+more_content;
document.getElementById("camount").value = Number(camount)+5;
}
});
var getcount = new XMLHttpRequest();
getcount.open("GET", "cmtamnt.php?c=<?php echo $cnv_uid;?>", true);
getcount.onreadystatechange = function(){
if(getcount.readyState == 4)
if(getcount.status == 200) {
document.getElementById("cLd").innerHTML = '<div id=\"comments_loadmore\"><i class=\"fa fa-chevron-circle-down fa-lg\" aria-hidden=\"true\"></i></div>';
var numCont = getcount.responseText;
if(numCont <= Number(camount) + 5) {
document.getElementById("cLd").innerHTML = "";
}
}
else{
alert("error");
document.getElementById("qLd").innerHTML = '<div id=\"questions_loadmore\"><i class=\"fa fa-chevron-circle-down fa-lg\" aria-hidden=\"true\"></i></div>';
}
};
getcount.send();
return false;
}
/**
* Returns the style for a node.
*
* @param n The node to check.
* @param p The property to retrieve (usually 'display').
* @link http://www.quirksmode.org/dom/getstyles.html
*/
function getNodeStyle( n, p ) {
return n.currentStyle ?
n.currentStyle[p] :
document.defaultView.getComputedStyle(n, null).getPropertyValue(p);
}
//IF THE NODE IS NOT ACTUALLY IN THE DOM then this won't take into account <div style="display: inline;">text</div>
//however for simple things like `contenteditable` this is sufficient, however for arbitrary html this will not work
function isNodeBlock(node) {
if (node.nodeType == document.TEXT_NODE) {return false;}
var d = getNodeStyle( node, 'display' );//this is irrelevant if the node isn't currently in the current DOM.
if (d.match( /^block/ ) || d.match( /list/ ) || d.match( /row/ ) ||
node.tagName == 'BR' || node.tagName == 'HR' ||
node.tagName == 'DIV' // div,p,... add as needed to support non-DOM nodes
) {
return true;
}
return false;
}
/**
* Converts HTML to text, preserving semantic newlines for block-level
* elements.
*
* @param node - The HTML node to perform text extraction.
*/
function htmlToText( htmlOrNode, isNode ) {
var node = htmlOrNode;
if (!isNode) {node = jQuery("<span>"+htmlOrNode+"</span>")[0];}
//TODO: inject "unsafe" HTML into current DOM while guaranteeing that it won't
// change the visible DOM so that `isNodeBlock` will work reliably
var result = '';
if( node.nodeType == document.TEXT_NODE ) {
// Replace repeated spaces, newlines, and tabs with a single space.
result = node.nodeValue.replace( /\s+/g, ' ' );
} else {
for( var i = 0, j = node.childNodes.length; i < j; i++ ) {
result += htmlToText( node.childNodes[i], true );
if (i < j-1) {
if (isNodeBlock(node.childNodes[i])) {
result += '\n';
} else if (isNodeBlock(node.childNodes[i+1]) &&
node.childNodes[i+1].tagName != 'BR' &&
node.childNodes[i+1].tagName != 'HR') {
result += '\n';
}
}
}
}
return result;
}
function askQuest(button_used) {
document.getElementById("anon").innerHTML = '<i class=\"fa fa-eye-slash\" aria-hidden=\"true\"></i>';
document.getElementById("norm").innerHTML = '<i class=\"fa fa-pencil\" aria-hidden=\"true\"></i>';
if(button_used == 'anon') {
ask_type = "anon";
conf_win = "Ask anonymously?";
}
else {
ask_type = "norm";
conf_win = "Ask normally?";
}
if (confirm(conf_win)) {
var question = $('#question').html();
var question = htmlToText(question);
if(question !='') {
var cnv_uid = "<?php echo "$cnv_uid"; ?>";
$.ajax({
url: 'question_ask.php',
type: 'POST',
data: { question: question, ask_type: ask_type, cnv_uid: cnv_uid },
success: function(data){
if(data == '') {
$('#question').empty();
document.getElementById(ask_type).innerHTML = '<i class=\"fa fa-check-circle\" aria-hidden=\"true\"></i>';
}
},
error: function(data) {
document.getElementById(ask_type).innerHTML = '<i class=\"fa fa-exclamation\" aria-hidden=\"true\"></i>';
}
});
document.getElementById(ask_type).innerHTML = '<i class=\"fa fa-spinner\" aria-hidden=\"true\"></i>';
}
}
}
function pComment() {
document.getElementById("pstcomm").innerHTML = '<i class=\"fa fa-pencil\" aria-hidden=\"true\"></i>';
var comment = $('#comment').html();
var comment = htmlToText(comment);
if(comment !='') {
var cnv_uid = "<?php echo $cnv_uid; ?>";
$.ajax({
url: 'post_comment.php',
type: 'POST',
data: { comment: comment, cnv_uid: cnv_uid },
success: function(data){
if(data == '') {
$('#comment').empty();
document.getElementById("pstcomm").innerHTML = '<i class=\"fa fa-check-circle\" aria-hidden=\"true\"></i>';
upCs();
}
},
error: function(data) {
document.getElementById("pstcomm").innerHTML = '<i class=\"fa fa-exclamation\" aria-hidden=\"true\"></i>';
}
});
document.getElementById("pstcomm").innerHTML = '<i class=\"fa fa-spinner\" aria-hidden=\"true\"></i>';
}
}
</script>