Files
furatalog-web-admin/admin/script/furatalog.lib.php
T

393 lines
14 KiB
PHP

<?php
class contentObject {
public string $name;
public string $price;
public string $rating;
public int $creator_id;
public int $currency_id;
public string $url;
public string $image;
public int $nsfw;
public int $section;
public function __construct() {
}
}
class furatalogLib {
private $databaseConnection;
private $secureGET;
public $maxpages;
private $fs;
public function init() {
error_reporting(E_ERROR | E_PARSE);
require_once("/var/www/local/admin/script/furatalog.sessions.php");
$this->fs = new furatalogSessions();
//$cookieLifetime = 60 * 60 * 24 * 30;
//session_set_cookie_params($cookieLifetime);
//ini_set('session.gc_maxlifetime', $cookieLifetime);
if (isset($_GET["nsfw"])) {
if ($_GET["nsfw"] == "0") {
$this->fs->setSessionData("nsfw", false);
} else if ($_GET["nsfw"] == "1") {
$this->fs->setSessionData("nsfw", true);
}
$tempUrl = $_SERVER['REQUEST_URI'];
$tempUrl = str_replace('?nsfw=0','', $tempUrl);
$tempUrl = str_replace('?nsfw=1','', $tempUrl);
$tempUrl = str_replace('&nsfw=0','', $tempUrl);
$tempUrl = str_replace('&nsfw=1','', $tempUrl);
header("Location: " . $tempUrl);
die();
}
$this->databaseConnection = new mysqli("10.0.0.200", "furatalog_usr", "1yRNpaUtXu[cw@-m", "furatalog");
$_GET["moin"] = "hi";
$this->secureGET = $_GET;
foreach ($this->secureGET as $query_string_variable => $value) {
$newValue = str_replace('"', '\"', $value);
$newValue = str_replace("'", "\'", $newValue);
$newValue = str_replace(";", "", $newValue);
$newValue = str_replace("`", "", $newValue);
$this->secureGET[$query_string_variable] = $newValue;
}
}
private function getCreatorID($creatorURL) {
$creatorURL = implode('/', array_slice(explode('/', $creatorURL), 0, 3));
$creatorRequestResult = $this->databaseConnection->query("SELECT * FROM creator WHERE `gumroad_url`='" . $creatorURL . "'");
if ($creatorRequestResult->num_rows > 0) {
$creatorID = $creatorRequestResult->fetch_assoc()["id"];
} else {
$string = file_get_contents($creatorURL);
$dom = new DomDocument();
$dom->loadHTML($string);
$finder = new DomXPath($dom);
$creatorName = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' profile ')]")[0]->childNodes[0]->childNodes[0]->textContent;
$creatorpicture = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' profile ')]")[0]->childNodes[0]->childNodes[0]->childNodes[0]->attributes[1]->textContent;
$this->databaseConnection->query("INSERT INTO `creator` (`id`, `name`, `pb_url`, `booth_url`, `gumroad_url`, `payhip_url`, `jinxxy_url`) VALUES (NULL, '" . str_replace("'", "\'", $creatorName) . "', '" . $creatorpicture . "', '', '" . $creatorURL . "', '', '')");
$creatorResult = $this->databaseConnection->query("SELECT id FROM `creator` WHERE gumroad_url='" . $creatorURL . "'");
$creatorID = $creatorResult->fetch_assoc()["id"];
}
return (string)$creatorID;
}
private function getCurrencyID($currencySymbol) {
$result = $this->databaseConnection->query("SELECT id FROM currency WHERE symbol='" . $currencySymbol . "'");
$currencyID = $result->fetch_assoc()["id"];
return (int)$currencyID;
}
public function getItems($section, $page = 1) {
if (!isset($this->secureGET["s"])) {
$this->secureGET["s"] = "";
}
$this->secureGET["s"] = rtrim($this->secureGET["s"]);
$whereRequest = "";
if (isset($this->secureGET["s"])) {
$searchSplitArray = explode(" ", $this->secureGET["s"]);
foreach ($searchSplitArray as $key => $value) {
//$tmpVal = str_replace("'","\'", $value);
$tmpVal = preg_replace("/[^a-zA-Z0-9\s]/", "", $value);
if ($whereRequest != "") {
$whereRequest .= " AND ";
}
//$tmpVal = implode('%', str_split($tmpVal));
$newtmpVal = "";
$maxStringPos = strlen($tmpVal);
$currentStringPos = 1;
foreach (str_split($tmpVal) as $key2 => $value2) {
if ($currentStringPos < $maxStringPos) {
$newtmpVal .= $value2 . "[^" . $value2 . "]{0,2}";
} else {
$newtmpVal .= $value2;
}
$currentStringPos++;
}
$tmpVal = $newtmpVal;
$whereRequest .= "(content.name REGEXP '" . $tmpVal . "' OR
creator.name REGEXP '" . $tmpVal . "'
" . ($section==1 ?
" OR species.name REGEXP '" . $tmpVal . "' OR species.tag REGEXP '" . $tmpVal . "') " :
")") . "";
}
} else {
$whereRequest .= "(content.name LIKE '%%' OR
creator.name LIKE '%%'
" . ($section==1 ?
" OR species.name LIKE '%%' OR species.tag LIKE '%%') " :
")") . "";
}
$tmp = $this->databaseConnection->query("
SELECT
content.id as 'content_id',
content.name as 'content_name',
content.price as 'content_price',
content.rating as 'content_rating',
content.url as 'content_url',
content.image as 'content_image',
currency.currency as 'currency_currency',
currency.symbol as 'currency_symbol',
`currency`.`font-awesome` as 'currency_fontawesome',
creator.name as 'creator_name',
creator.pb_url as 'creator_pb_url'
" . ($section==1?",
species.name as 'species_name'":"") . "
FROM `content`
JOIN creator ON content.creator_id=creator.id
JOIN currency ON content.currency_id=currency.id
" . ($section==1?"
JOIN content_species ON content.id=content_species.content_id
JOIN species ON content_species.species_id=species.id":"") . "
WHERE
" . $whereRequest . "
AND (content.section LIKE \"%" . $section . "%\"
" . (($this->fs->issetSessionData("nsfw") && $this->fs->getSessionData("nsfw")==true) ? '' : 'AND content.nsfw = 0') . ")
GROUP BY content.id
ORDER BY content.id DESC
LIMIT " . ($page - 1) * 40 . ", 40;
");
$total = $this->databaseConnection->query("
SELECT
content.id as 'content_id',
content.name as 'content_name',
content.price as 'content_price',
content.rating as 'content_rating',
content.url as 'content_url',
content.image as 'content_image',
currency.currency as 'currency_currency',
currency.symbol as 'currency_symbol',
`currency`.`font-awesome` as 'currency_fontawesome',
creator.name as 'creator_name',
creator.pb_url as 'creator_pb_url'
" . ($section==1?",
species.name as 'species_name'":"") . "
FROM `content`
JOIN creator ON content.creator_id=creator.id
JOIN currency ON content.currency_id=currency.id
" . ($section==1?"
JOIN content_species ON content.id=content_species.content_id
JOIN species ON content_species.species_id=species.id":"") . "
WHERE
" . $whereRequest . "
AND (content.section LIKE \"%" . $section . "%\"
" . (($this->fs->issetSessionData("nsfw") && $this->fs->getSessionData("nsfw")==true) ? '' : 'AND content.nsfw = 0') . ")
GROUP BY content.id
");
$this->maxpages = (ceil((int)$total->num_rows / 40));
$items = array();
while ($row = $tmp->fetch_assoc()) {
$items[] = $row;
}
return $items;
}
function printScriptSec() {
$returnContent = "";
$currentpage = (isset($_GET["p"]) ? $_GET["p"] : 1);
$search=isset($_GET["s"]) ? "&s=" . $_GET["s"] : "";
$nextpage=isset($_GET["p"]) ? $_GET["p"] : 1;
$prevpage=isset($_GET["p"]) ? $_GET["p"] : 1;
$returnContent .= "
<script>
var currentPage = \"" . $currentpage . "\";
var nextpage = \"?p=" . $nextpage+1 . $search . "\";
var prevpage = \"?p=" . $prevpage-1 . $search . "\";
var maxpages = " . $this->maxpages . ";
</script>
<script src=\"/data/script/script.js\"></script>
";
return $returnContent;
}
function printItemLists($section) {
$returnContent = "";
$returnContent .= "<div class=\"itemlist\">";
$page = isset($_GET["p"]) ? $_GET["p"] : 1;
$returnContent .= $this->printItemList($section, $page);
$returnContent .= "</div>";
$returnContent .= "<div class=\"itemlist itemlistnext\">";
$page = isset($_GET["p"]) ? ((int)$_GET["p"] + 1) : 2;
$returnContent .= $this->printItemList($section, $page);
$returnContent .= "</div>";
if (isset($_GET["p"]) && ((int)$_GET["p"]) >= 2) {
$returnContent .= "<div class=\"itemlist itemlistprev\">";
$page = isset($_GET["p"]) ? ((int)$_GET["p"] - 1) : 0;
$returnContent .= $this->printItemList($section, $page);
$returnContent .= "</div>";
}
return $returnContent;
}
private function printItemList($section, $page) {
$returnContent = "";
$items = $this->getItems($section, $page);
foreach ($items as $item) {
$currency = $item["currency_fontawesome"]=="" ? $item["currency_symbol"] : $item["currency_fontawesome"];
if (str_contains($item["content_url"],"gumroad")) {
$plattform = "https://assets.gumroad.com/assets/pink-icon-c5f5013768a1da41246e70403f02afc8b34ac89c20f3ba2dd0a01f3973027700.png";
} else if (str_contains($item["content_url"],"booth")) {
$plattform = "https://asset.booth.pm/favicon.ico";
} else if (str_contains($item["content_url"],"payhip")) {
$plattform = "https://payhip.com/images/designv2/favicon/favicon-196x196.png";
} else if (str_contains($item["content_url"],"jinxxy")) {
$plattform = "https://jinxxy.com/icon.png";
}
$returnContent .= "<div class='item-container' style=\"background-image: url('". $item["content_image"] ."')\">
<a href='". $item["content_url"] ."'><div class='item'>
<img class='plattform' src='". $plattform ."'>
<img class='preview' src='". $item["content_image"] ."'>
<div class='item-info'>
<a class='name' title='". $item["content_name"] ."'>". $item["content_name"] ."</a>
<div class='info'>
<a class='creator'>
<img src=\"". $item["creator_pb_url"] ."\">
". $item["creator_name"] ."
</a>
<a class=\"price\">" . sprintf("%.2f", (double)($item["content_price"] / 100)) . " " . $currency ."</a>
</div>
</div>
</div></a>
</div>";
}
return $returnContent;
}
public function printNsfwCheck() {
$returnContent = "";
if ($this->fs->issetSessionData("nsfw") && $this->fs->getSessionData("nsfw") == true) {
$returnContent .= '';
} else if ($this->fs->issetSessionData("nsfw") && $this->fs->getSessionData("nsfw") == false) {
$returnContent .= '';
} else {
// Base URL
$url = "https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
// New parameter to add
$newParam = "nsfw=";
// Check if the URL already has query parameters
if (strpos($url, '?') !== false) {
// Append with '&'
$url .= '&' . $newParam;
} else {
// Append with '?'
$url .= '?' . $newParam;
}
$returnContent .= '
<div class="nsfwcheck">
<span>Do you want to see NSFW content?</span>
<div class="answers">
<a href="' . $url . '1">Yes</a>
<a href="' . $url . '0">No</a>
</div>
</div>
';
}
return $returnContent;
}
public function printPagerNumbers() {
$returnContent = "";
$currentpage = (isset($_GET["p"]) ? $_GET["p"] : 1);
$currentMaxPages = $this->maxpages;
$search=isset($_GET["s"]) ? "&s=" . $_GET["s"] : "";
$before = "";
if (!($currentpage <= 1)) {
$returnContent .= "<a class=\"prev\" href=\"?p=" . (1) . $search . "\"><<</a>";
$returnContent .= "<a class=\"prev\" href=\"?p=" . ($currentpage-1) . $search . "\"><</a>";
}
for ($i = $currentpage-1; ($i > 0 && $i > ($currentpage-3)); $i--) {
if (($i+1) == 1) return;
$before = "<a class=\"number\" href=\"?p=" . $i . $search . "\">" . $i . "</a>" . $before;
}
$returnContent .= $before;
$returnContent .= "<a class=\"number current\">" . $currentpage . "</a>";
for ($i = $currentpage+1; ($i <= $currentMaxPages && $i < ($currentpage+3)); $i++) {
if ($currentMaxPages == $currentpage) return;
$returnContent .= "<a class=\"number\" href=\"?p=" . $i . $search . "\">" . $i . "</a>";
}
if (!($currentpage >= $currentMaxPages)) {
$returnContent .= "<a class=\"next\" href=\"?p=" . ($currentpage+1) . $search . "\">></a>";
$returnContent .= "<a class=\"next\" href=\"?p=" . ($currentMaxPages) . $search . "\">>></a>";
}
return $returnContent;
}
}