393 lines
14 KiB
PHP
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;
|
|
}
|
|
} |