<?php
// Password and general access configuration here
$password = "hitlerdidnothingwrong";
$REQUIRE_PASSWORD_TO_VIEW = false;
$REQUIRE_PASSWORD_TO_ADD = true;
$REQUIRE_PASSWORD_TO_EDIT = true;

$PASSWORD_OK = false;
if(isset($_GET["password"]))
{
	if($_GET["password"]==$password){
		$PASSWORD_OK=true;
	};
};
?>
<?php
// General configuration of this script
$INFO_DATABASE_NAME = "database.db"; // Change it into PATH if database is somewhere else
$INFO_TABLE_NAME = "links";

$INFO_SHOW_ABOUT_LINK = true;
$INFO_SHOW_STATS_LINK = false; // default false because reasons (nothing interesting to show)

$INFO_SHOW_BOTH = "respect";
//$INFO_SHOW_BOTH = "respect";
	// Options for $INFO_SHOW_BOTH
	// "respect" - the script will respect each link's settings
	// "always" - always show both URL + Description
	// "never" - never show URL + Description (Show only description if provided)
?>
<html>
<body>
<?php
	echo '<a href="?';
	if($PASSWORD_OK){
		echo "password=" . $_GET["password"];
	};
	echo '">Home</a> ';

	if($PASSWORD_OK){
		echo '<a href="?">Logout</a> ' . "\n";
	}else{
		echo '<a href="?action=login">Login</a> ' . "\n";
	};

	if($INFO_SHOW_STATS_LINK == true){
		echo '<a href="?action=stats';
			if($PASSWORD_OK){
				echo "&password=" . $_GET["password"];
			}
		echo '">Stats</a> ';
	};
	if($INFO_SHOW_ABOUT_LINK == true){
		echo '<a href="?action=about';
			if($PASSWORD_OK){
				echo "&password=" . $_GET["password"];
			}
		echo '">About</a> ';
	};
?>
	<center><h1>Read Later</h1></center>
	<hr>
	<?php
	if(!$REQUIRE_PASSWORD_TO_ADD || ($REQUIRE_PASSWORD_TO_ADD && $PASSWORD_OK)){
	?>
	Add: <form action="" method="GET">
		<input type="hidden" name="action" value="add">
		<?php
		if($PASSWORD_OK){
			echo '<input type="hidden" name="password" value="' . $_GET["password"] . '">' . "\n";
		};
		?>
		URL: <input type="text" name="URL">
		Description: <input type="text" name="DESCRIPTION">
		<input type="submit" value="Read later!">
		</form>
	<hr>
	<?php
	};
	?>

<?php
$db = new SQLite3($INFO_DATABASE_NAME);

if(isset($_GET["action"]))
{
	if($_GET["action"]=="login"){
	$db->close();
	?>
	<form action="" method="GET">
		Password: <input type="password" name="password">
		<input type="submit" value="Validate">
	</form>
	<?php
	die();
	}elseif($_GET["action"]=="add")
	{
		if(!$REQUIRE_PASSWORD_TO_ADD || ($REQUIRE_PASSWORD_TO_ADD && $PASSWORD_OK)){
		if(strlen($_GET["URL"])>2){
		$db_query = $db->query('insert into ' . $INFO_TABLE_NAME .
			'(URL,DESCRIPTION,STATUS,IMPORTANT,SHOWBOTH,CATEGORY,DATE) values ' .
			'("' . $_GET["URL"]. '", " ' . $_GET["DESCRIPTION"] . '", "N",0,0,"OTHER","TODAY");');
		if(!$db_query)
		{
		echo "Something went wrong";
		$db->close();
		die();
		};
		};
		};
	}elseif($_GET["action"]=="edit")
	{
		if(!$REQUIRE_PASSWORD_TO_EDIT || ($REQUIRE_PASSWORD_TO_EDIT && $PASSWORD_OK)){
		$db_query = $db->query("select * from $INFO_TABLE_NAME where ID=".$_GET["ID"]."");
		$db_query_result = $db_query->fetchArray(SQLITE3_ASSOC);
		?>
		<hr>
		<form action="" method="GET">
		<input type="hidden" name="action" value="update">
		<?php
		if($PASSWORD_OK){
			echo '<input type="hidden" name="password" value="' . $_GET["password"] . '">' . "\n";
		};
		?>
		<input type="hidden" name="ID" value=<?php echo $_GET["ID"];?>>
		URL: <input type="text" name="URL" value="<?php echo $db_query_result["URL"];?>" width=100%><br>
		Description: <input type="text" name="DESCRIPTION" value="<?php echo $db_query_result["DESCRIPTION"];?>"><br>
		Category: <input type="text" name="CATEGORY" value="<?php echo $db_query_result["CATEGORY"];?>"><br>
		Status: <select name="STATUS">
				<?php
				if($db_query_result["STATUS"]=="N")
				{
				echo '<option value="N">Not read yet</option>' . "\n";
				}else{
				echo '<option value="R">Read already</option>' . "\n";
				};
				echo '<option value="N">------------</option>' . "\n";
				?>
				<option value="N">Not read yet</option>
				<option value="R">Read already</option>
			</select><br>
		Is it important? <input type="checkbox" name="IMPORTANT" <?php if($db_query_result["IMPORTANT"]==1){echo "checked";};?>><br>
		Show both URL and description? <input type="checkbox" name="SHOWBOTH" <?php if($db_query_result["SHOWBOTH"]==1){echo "checked";};?>><br>
		<input type="submit" value="Edit">
		</form>
		<form action="" method="GET">
		<input type="hidden" name="action" value="delete">
		<?php
		if($PASSWORD_OK){
			echo '<input type="hidden" name="password" value="' . $_GET["password"] . '">' . "\n";
		};
		?>
		<input type="hidden" name="ID" value=<?php echo $_GET["ID"];?>>
		<input type="submit" value="Delete">
		</form>
		<hr>
		<?php
		};
	}elseif($_GET["action"]=="update")
	{
		if(!$REQUIRE_PASSWORD_TO_EDIT || ($REQUIRE_PASSWORD_TO_EDIT && $PASSWORD_OK)){
		$db->query("update $INFO_TABLE_NAME set URL = '" . $_GET["URL"] . "' where ID = " . $_GET["ID"] . "");
		$db->query("update $INFO_TABLE_NAME set DESCRIPTION = '" . $_GET["DESCRIPTION"] . "' where ID = " . $_GET["ID"] ."");
		$db->query("update $INFO_TABLE_NAME set CATEGORY = '" . $_GET["CATEGORY"] . "' where ID = " . $_GET["ID"] ."");
		$db->query("update $INFO_TABLE_NAME set STATUS = '" . $_GET["STATUS"] . "' where ID = " . $_GET["ID"] ."");
			if(isset($_GET["IMPORTANT"])){
				$db->query("update $INFO_TABLE_NAME set IMPORTANT = 1 where ID = " . $_GET["ID"] ."");
			}else{
				$db->query("update $INFO_TABLE_NAME set IMPORTANT = 0 where ID = " . $_GET["ID"] ."");
			};
			if(isset($_GET["SHOWBOTH"])){
				$db->query("update $INFO_TABLE_NAME set SHOWBOTH = 1 where ID = " . $_GET["ID"] ."");
			}else{
				$db->query("update $INFO_TABLE_NAME set SHOWBOTH = 0 where ID = " . $_GET["ID"] ."");
			};
		};
	}elseif($_GET["action"]=="delete")
	{
		if(!$REQUIRE_PASSWORD_TO_EDIT || ($REQUIRE_PASSWORD_TO_EDIT && $PASSWORD_OK)){
			$db->query("delete from $INFO_TABLE_NAME where ID=" . $_GET["ID"] . "");
		};
	}elseif($_GET["action"]=="stats")
	{
		echo "Require password to view: $REQUIRE_PASSWORD_TO_VIEW <br>\n";
		echo "Require password to add: $REQUIRE_PASSWORD_TO_ADD <br>\n";
		echo "Require password to edit: $REQUIRE_PASSWORD_TO_EDIT <br>\n";
		$db->close();
		echo "</body>\n</html>";
		die();

	}elseif($_GET["action"]=="about"){
		?>
		Read-later script to save links for later use<br>
		<br>
		----<br>
		If no description is provided, only the URL will be shown.<br>
		If description is provided, only the description will be shown by default.<br>
		----<br>
		More settings in Edit menu<br>
		----<br>
		This script uses GET instead of POST, because I can manipulate GET in links.<br>
		Otherwise I would have to make buttons everywhere to send POST to the server.<br>
		----<br>
		Category and Date does nothing.<br>
		----<br>
		<br>
		Tested on:<br>
		<ul>
		<li>Debian GNU/Linux 10 (buster)</li>
		<li>PHP 5.6.11</li>
		<li>SQLite3 3.27.2 2019-02-25</li>
		<li>Falkon browser 3.0.0</li>
		<li>Lynx Version 2.8.9rel.1 (08 Jul 2018)</li>
		</ul>
		<br>
		Shema for a default sqlite3 table:<br><br>

		<code>
		CREATE TABLE links<br>
		(ID INTEGER primary key AUTOINCREMENT,<br>
		URL text NOT NULL,<br>
		DESCRIPTION text,<br>
		STATUS text NOT NULL,<br>
		IMPORTANT bool NOT_NULL,<br>
		SHOWBOTH bool NOT_NULL,<br>
		CATEGORY text NOT NULL,<br>
		DATE char(10));<br>
		</code><br><br>

		This little PHP file has been written by Sebastian Skibinski<br>
		in <b>GNU Nano 3.2</b><br>
		Initial idea: 2022-01-07<br>
		Last official modification: 2022-01-08<br>
		Thanks
		<?php
		$db->close();
		echo "</body>\n</html>";
		die();
	};
};

if(!$REQUIRE_PASSWORD_TO_VIEW || ($REQUIRE_PASSWORD_TO_VIEW && $PASSWORD_OK)){
$db_query = $db->query("select * from $INFO_TABLE_NAME;");
//echo $db->lastErrorMsg();
	while($db_query_result = $db_query->fetchArray(SQLITE3_ASSOC)){
		echo "[ ". $db_query_result["STATUS"] ." ] ";
		if($db_query_result["IMPORTANT"]==1){ echo "<b>";};
		echo '<a href="' . $db_query_result["URL"] . '"';
			if($INFO_SHOW_BOTH == "respect"){
				if($db_query_result["SHOWBOTH"]==1){
					echo ">" . $db_query_result["URL"] . " - " . $db_query_result["DESCRIPTION"] . "</a>";
				}elseif($db_query_result["SHOWBOTH"]==0){
					if(strlen($db_query_result["DESCRIPTION"])>1){
						echo ">" . $db_query_result['DESCRIPTION'] . "</a>";
					}else{
						echo ">" . $db_query_result['URL'] . "</a>";
					};
				};
			}elseif($INFO_SHOW_BOTH == "always"){
				echo ">" . $db_query_result["URL"] . " - " . $db_query_result["DESCRIPTION"] . "</a>";
			}elseif($INFO_SHOW_BOTH == "never"){
					if(strlen($db_query_result["DESCRIPTION"])>1){
						echo ">" . $db_query_result['DESCRIPTION'] . "</a>";
					}else{
						echo ">" . $db_query_result['URL'] . "</a>";
					};
			};
		if($db_query_result["IMPORTANT"]==1){ echo "</b>";};
		if(!$REQUIRE_PASSWORD_TO_EDIT || ($REQUIRE_PASSWORD_TO_EDIT && $PASSWORD_OK)){
			echo " | <a href=?action=edit&ID=" . $db_query_result["ID"] ."";
			if($PASSWORD_OK){
				echo "&password=" . $_GET["password"] . "";
			};
			echo ">edit</a>";
		};
		echo "<br>\n";
	};
};
$db->close();
?>
</body>
</html>
