422 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			422 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /*
 | |
| 	Define settings
 | |
| */
 | |
| $settings = [
 | |
| 	[
 | |
| 		"name" => "General",
 | |
| 		"settings" => [
 | |
| 			[
 | |
| 				"description" => "Allow NSFW content",
 | |
| 				"parameter" => "nsfw",
 | |
| 				"options" => [
 | |
| 					[
 | |
| 						"value" => "yes",
 | |
| 						"text" => "Yes"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "maybe",
 | |
| 						"text" => "Maybe"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "no",
 | |
| 						"text" => "No"
 | |
| 					]
 | |
| 				]
 | |
| 			],
 | |
| 			[
 | |
| 				"description" => "Theme",
 | |
| 				"parameter" => "theme",
 | |
| 				"options" => [
 | |
| 					[
 | |
| 						"value" => "dark",
 | |
| 						"text" => "Gruvbox dark"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "cream",
 | |
| 						"text" => "Gruvbox cream"
 | |
| 					]
 | |
| 				]
 | |
| 			],
 | |
| 			[
 | |
| 				"description" => "Prevent clicking background elements when image viewer is open",
 | |
| 				"parameter" => "bg_noclick",
 | |
| 				"options" => [
 | |
| 					[
 | |
| 						"value" => "no",
 | |
| 						"text" => "No"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "yes",
 | |
| 						"text" => "Yes"
 | |
| 					]
 | |
| 				]
 | |
| 			]
 | |
| 		]
 | |
| 	],
 | |
| 	[
 | |
| 		"name" => "Scrapers to use",
 | |
| 		"settings" => [
 | |
| 			[
 | |
| 				"description" => "Autocomplete<br><i>Picking <div class=\"code-inline\">Auto</div> changes the source dynamically depending of the page's scraper<br>Picking <div class=\"code-inline\">Disabled</div> disables this feature</i>",
 | |
| 				"parameter" => "scraper_ac",
 | |
| 				"options" => [
 | |
| 					[
 | |
| 						"value" => "disabled",
 | |
| 						"text" => "Disabled"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "auto",
 | |
| 						"text" => "Auto"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "brave",
 | |
| 						"text" => "Brave"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "ddg",
 | |
| 						"text" => "DuckDuckGo"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "yandex",
 | |
| 						"text" => "Yandex"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "google",
 | |
| 						"text" => "Google"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "qwant",
 | |
| 						"text" => "Qwant"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "yep",
 | |
| 						"text" => "Yep"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "marginalia",
 | |
| 						"text" => "Marginalia"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "yt",
 | |
| 						"text" => "YouTube"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "sc",
 | |
| 						"text" => "SoundCloud"
 | |
| 					]
 | |
| 				]
 | |
| 			],
 | |
| 			[
 | |
| 				"description" => "Web",
 | |
| 				"parameter" => "scraper_web",
 | |
| 				"options" => [
 | |
| 					[
 | |
| 						"value" => "ddg",
 | |
| 						"text" => "DuckDuckGo"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "brave",
 | |
| 						"text" => "Brave"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "yandex",
 | |
| 						"text" => "Yandex"
 | |
| 					],
 | |
| 					/*[
 | |
| 						"value" => "google",
 | |
| 						"text" => "Google"
 | |
| 					],*/
 | |
| 					[
 | |
| 						"value" => "mojeek",
 | |
| 						"text" => "Mojeek"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "marginalia",
 | |
| 						"text" => "Marginalia"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "wiby",
 | |
| 						"text" => "wiby"
 | |
| 					]
 | |
| 				]
 | |
| 			],
 | |
| 			[
 | |
| 				"description" => "Images",
 | |
| 				"parameter" => "scraper_images",
 | |
| 				"options" => [
 | |
| 					[
 | |
| 						"value" => "ddg",
 | |
| 						"text" => "DuckDuckGo"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "yandex",
 | |
| 						"text" => "Yandex"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "brave",
 | |
| 						"text" => "Brave"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "google",
 | |
| 						"text" => "Google"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "yep",
 | |
| 						"text" => "Yep"
 | |
| 					],
 | |
| 					/*[
 | |
| 						"value" => "pinterest",
 | |
| 						"text" => "Pinterest"
 | |
| 					],*/
 | |
| 					[
 | |
| 						"value" => "imgur",
 | |
| 						"text" => "Imgur"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "ftm",
 | |
| 						"text" => "FindThatMeme"
 | |
| 					]
 | |
| 				]
 | |
| 			],
 | |
| 			[
 | |
| 				"description" => "Videos",
 | |
| 				"parameter" => "scraper_videos",
 | |
| 				"options" => [
 | |
| 					[
 | |
| 						"value" => "yt",
 | |
| 						"text" => "YouTube"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "ddg",
 | |
| 						"text" => "DuckDuckGo"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "brave",
 | |
| 						"text" => "Brave"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "yandex",
 | |
| 						"text" => "Yandex"
 | |
| 					]/*,
 | |
| 					[
 | |
| 						"value" => "google",
 | |
| 						"text" => "Google"
 | |
| 					]*/
 | |
| 				]
 | |
| 			],
 | |
| 			[
 | |
| 				"description" => "News",
 | |
| 				"parameter" => "scraper_news",
 | |
| 				"options" => [
 | |
| 					[
 | |
| 						"value" => "ddg",
 | |
| 						"text" => "DuckDuckGo"
 | |
| 					],
 | |
| 					[
 | |
| 						"value" => "brave",
 | |
| 						"text" => "Brave"
 | |
| 					],
 | |
| 					/*[
 | |
| 						"value" => "google",
 | |
| 						"text" => "Google"
 | |
| 					],*/
 | |
| 					[
 | |
| 						"value" => "mojeek",
 | |
| 						"text" => "Mojeek"
 | |
| 					]
 | |
| 				]
 | |
| 			],
 | |
| 			[
 | |
| 				"description" => "Music",
 | |
| 				"parameter" => "scraper_music",
 | |
| 				"options" => [
 | |
| 					[
 | |
| 						"value" => "sc",
 | |
| 						"text" => "SoundCloud"
 | |
| 					]
 | |
| 				]
 | |
| 			]
 | |
| 		]
 | |
| 	]
 | |
| ];
 | |
| 
 | |
| /*
 | |
| 	Set cookies
 | |
| */
 | |
| 
 | |
| if($_POST){
 | |
| 
 | |
| 	$loop = &$_POST;
 | |
| }elseif(count($_GET) !== 0){
 | |
| 	
 | |
| 	// redirect user to front page
 | |
| 	$loop = &$_GET;
 | |
| 	header("Location: /");
 | |
| 	
 | |
| }else{
 | |
| 	// refresh cookie dates
 | |
| 	$loop = &$_COOKIE;
 | |
| }
 | |
| 
 | |
| foreach($loop as $key => $value){
 | |
| 	
 | |
| 	foreach($settings as $title){
 | |
| 		
 | |
| 		foreach($title["settings"] as $list){
 | |
| 			
 | |
| 			if(
 | |
| 				$list["parameter"] == $key &&
 | |
| 				$list["options"][0]["value"] == $value
 | |
| 			){
 | |
| 				
 | |
| 				unset($_COOKIE[$key]);
 | |
| 				
 | |
| 				setcookie(
 | |
| 					$key,
 | |
| 					"",
 | |
| 					[
 | |
| 						"expires" => -1, // removes cookie
 | |
| 						"samesite" => "Lax",
 | |
| 						"path" => "/"
 | |
| 					]
 | |
| 				);
 | |
| 				
 | |
| 				continue 3;
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	
 | |
| 	if(!is_string($value)){
 | |
| 		
 | |
| 		continue;
 | |
| 	}
 | |
| 	
 | |
| 	$key = trim($key);
 | |
| 	$value = trim($value);
 | |
| 	
 | |
| 	$_COOKIE[$key] = $value;
 | |
| 	
 | |
| 	setcookie(
 | |
| 		$key,
 | |
| 		$value,
 | |
| 		[
 | |
| 			"expires" => strtotime("+400 days"), // maximal cookie ttl in chrome
 | |
| 			"samesite" => "Lax",
 | |
| 			"path" => "/"
 | |
| 		]
 | |
| 	);
 | |
| }
 | |
| 
 | |
| include "lib/frontend.php";
 | |
| $frontend = new frontend();
 | |
| 
 | |
| echo
 | |
| 	'<!DOCTYPE html>' .
 | |
| 	'<html lang="en">' .
 | |
| 		'<head>' .
 | |
| 			'<meta http-equiv="Content-Type" content="text/html;charset=utf-8">' .
 | |
| 			'<title>Settings</title>' .
 | |
| 			'<link rel="stylesheet" href="/static/style.css?v4">' .
 | |
| 			'<meta name="viewport" content="width=device-width,initial-scale=1">' .
 | |
| 			'<meta name="robots" content="index,follow">' .
 | |
| 			'<link rel="icon" type="image/x-icon" href="/favicon.ico">' .
 | |
| 			'<meta name="description" content="4get.ca: Settings">' .
 | |
| 			'<link rel="search" type="application/opensearchdescription+xml" title="4get" href="/opensearch.xml">' .
 | |
| 		'</head>' .
 | |
| 		'<body' . $frontend->getthemeclass() . '>';
 | |
| 
 | |
| $left =
 | |
| 	'<h1>Settings</h1>' .
 | |
| 	'<form method="post" autocomplete="off">' .
 | |
| 		'By clicking <div class="code-inline">Update settings!</div>, a plaintext <div class="code-inline">key=value</div> cookie will be stored on your browser. When selecting a default setting, the parameter is removed from your cookies.';
 | |
| 
 | |
| $c = count($_COOKIE);
 | |
| $code = "";
 | |
| 
 | |
| if($c !== 0){
 | |
| 	
 | |
| 	$left .=
 | |
| 		'<br><br>Your current cookie looks like this:' .
 | |
| 		'<div class="code">';
 | |
| 	
 | |
| 	$ca = 0;
 | |
| 	foreach($_COOKIE as $key => $value){
 | |
| 		
 | |
| 		$code .= $key . "=" . $value;
 | |
| 		
 | |
| 		$ca++;
 | |
| 		if($ca !== $c){
 | |
| 			
 | |
| 			$code .= "; ";
 | |
| 		}
 | |
| 	}
 | |
| 	
 | |
| 	$left .= $frontend->highlightcode($code);
 | |
| 	
 | |
| 	$left .= '</div>';
 | |
| }else{
 | |
| 	
 | |
| 	$left .=
 | |
| 		'<br><br>You currently don\'t have any cookies set.';
 | |
| }
 | |
| 		
 | |
| $left .=
 | |
| 	'<div class="settings">';
 | |
| 
 | |
| foreach($settings as $title){
 | |
| 	
 | |
| 	$left .= '<h2>' . $title["name"] . '</h2>';
 | |
| 	
 | |
| 	foreach($title["settings"] as $setting){
 | |
| 		
 | |
| 		$left .=
 | |
| 			'<div class="setting">' .
 | |
| 				'<div class="title">' . $setting["description"] . '</div>' .
 | |
| 				'<select name="' . $setting["parameter"] . '">';
 | |
| 		
 | |
| 		foreach($setting["options"] as $option){
 | |
| 			
 | |
| 			$left .=
 | |
| 				'<option value="' . $option["value"] . '"';
 | |
| 			
 | |
| 			if(
 | |
| 				isset($_COOKIE[$setting["parameter"]]) &&
 | |
| 				$_COOKIE[$setting["parameter"]] == $option["value"]
 | |
| 			){
 | |
| 				$left .= ' selected';
 | |
| 			}
 | |
| 			
 | |
| 			$left .= '>' . $option["text"] . '</option>';
 | |
| 		}
 | |
| 		
 | |
| 		$left .= '</select></div>';
 | |
| 	}
 | |
| }
 | |
| 
 | |
| $left .=
 | |
| 	'</div>' .
 | |
| 	'<div class="settings-submit">' .
 | |
| 		'<input type="submit" value="Update settings!">' .
 | |
| 		'<a href="../">< Return to front page</a>' .
 | |
| 	'</div>' .
 | |
| 	'</form>';
 | |
| 
 | |
| if(count($_GET) === 0){
 | |
| 
 | |
| 	echo
 | |
| 		$frontend->load(
 | |
| 			"search.html",
 | |
| 			[
 | |
| 				"class" => "",
 | |
| 				"right-left" =>			
 | |
| 					'<div class="infobox"><h2>Preference link</h2>Follow this link to auto-apply all cookies. Useful if your browser clears out cookies after a browsing session. Following this link will redirect you to the front page, unless no settings are set.<br><br>' .
 | |
| 					'<a href="settings' . rtrim("?" . str_replace("; ", "&", $code), "?") . '">Bookmark me!</a>' .
 | |
| 					'</div>',
 | |
| 				"right-right" => "",
 | |
| 				"left" => $left
 | |
| 			]
 | |
| 		);
 | |
| }
 | 
