2023-07-22 20:41:14 +02:00
< ? php
2023-11-07 14:04:56 +01:00
include " data/config.php " ;
2023-07-22 20:41:14 +02:00
/*
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 " ,
2023-11-07 14:04:56 +01:00
" options " => []
2023-07-22 20:41:14 +02:00
],
[
" 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 " => [
2023-09-13 15:01:23 +02:00
[
2023-11-07 14:04:56 +01:00
" description " => " Autocomplete<br><i>Picking <span class= \" code-inline \" >Auto</span> changes the source dynamically depending of the page's scraper<br><b>Warning:</b> If you edit this field, you will need to re-add the search engine so that the new autocomplete settings are applied!</i> " ,
2023-09-13 15:01:23 +02:00
" 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 "
]
]
],
2023-07-22 20:41:14 +02:00
[
" description " => " Web " ,
" parameter " => " scraper_web " ,
" options " => [
[
" value " => " ddg " ,
" text " => " DuckDuckGo "
],
[
" value " => " brave " ,
" text " => " Brave "
],
2023-08-27 07:45:59 +02:00
[
" value " => " yandex " ,
" text " => " Yandex "
],
2023-08-08 09:09:47 +02:00
/* [
" value " => " google " ,
" text " => " Google "
], */
2023-07-22 20:41:14 +02:00
[
" 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 "
2023-08-08 09:09:47 +02:00
],
[
" value " => " brave " ,
" text " => " Brave "
2023-08-14 05:35:08 +02:00
],
2023-08-08 09:09:47 +02:00
[
" value " => " google " ,
" text " => " Google "
2023-10-16 08:30:43 +02:00
],
[
" value " => " yep " ,
" text " => " Yep "
],
/* [
" value " => " pinterest " ,
" text " => " Pinterest "
], */
[
" value " => " imgur " ,
" text " => " Imgur "
],
[
" value " => " ftm " ,
" text " => " FindThatMeme "
2023-08-14 05:35:08 +02:00
]
2023-07-22 20:41:14 +02:00
]
],
[
" description " => " Videos " ,
" parameter " => " scraper_videos " ,
" options " => [
[
" value " => " yt " ,
" text " => " YouTube "
],
[
" value " => " ddg " ,
" text " => " DuckDuckGo "
2023-08-08 09:09:47 +02:00
],
[
" value " => " brave " ,
" text " => " Brave "
2023-08-27 07:45:59 +02:00
],
[
" value " => " yandex " ,
" text " => " Yandex "
2023-08-08 09:09:47 +02:00
] /* ,
[
" value " => " google " ,
" text " => " Google "
] */
2023-07-22 20:41:14 +02:00
]
],
[
" description " => " News " ,
" parameter " => " scraper_news " ,
" options " => [
[
" value " => " ddg " ,
" text " => " DuckDuckGo "
],
[
" value " => " brave " ,
" text " => " Brave "
2023-08-27 07:45:59 +02:00
],
/* [
2023-08-08 09:09:47 +02:00
" value " => " google " ,
" text " => " Google "
], */
2023-07-22 20:41:14 +02:00
[
" value " => " mojeek " ,
" text " => " Mojeek "
]
]
2023-09-04 04:41:44 +02:00
],
[
" description " => " Music " ,
" parameter " => " scraper_music " ,
" options " => [
[
" value " => " sc " ,
" text " => " SoundCloud "
]
]
2023-07-22 20:41:14 +02:00
]
]
]
];
2023-11-07 14:04:56 +01:00
/*
Set theme collection
*/
$themes = glob ( " static/themes/* " );
$settings [ 0 ][ " settings " ][ 1 ][ " options " ][] = [
" value " => " Dark " ,
" text " => " Dark "
];
foreach ( $themes as $theme ){
$theme = explode ( " . " , basename ( $theme ))[ 0 ];
$settings [ 0 ][ " settings " ][ 1 ][ " options " ][] = [
" value " => $theme ,
" text " => $theme
];
}
2023-07-22 20:41:14 +02:00
/*
Set cookies
*/
if ( $_POST ){
$loop = & $_POST ;
2023-09-13 15:01:23 +02:00
} elseif ( count ( $_GET ) !== 0 ){
// redirect user to front page
$loop = & $_GET ;
header ( " Location: / " );
2023-07-22 20:41:14 +02:00
2023-09-13 15:01:23 +02:00
} else {
2023-07-22 20:41:14 +02:00
// refresh cookie dates
$loop = & $_COOKIE ;
}
2023-10-16 08:30:43 +02:00
2023-07-22 20:41:14 +02:00
foreach ( $loop as $key => $value ){
2023-11-07 14:04:56 +01:00
if ( $key == " theme " ){
2023-07-22 20:41:14 +02:00
2023-11-07 14:04:56 +01:00
if ( $value == config :: DEFAULT_THEME ){
2023-07-22 20:41:14 +02:00
2023-11-07 14:04:56 +01:00
unset ( $_COOKIE [ $key ]);
setcookie (
" theme " ,
" " ,
[
" expires " => - 1 , // removes cookie
" samesite " => " Lax " ,
" path " => " / "
]
);
continue ;
}
} else {
foreach ( $settings as $title ){
foreach ( $title [ " settings " ] as $list ){
2023-07-22 20:41:14 +02:00
2023-11-07 14:04:56 +01:00
if (
$list [ " parameter " ] == $key &&
$list [ " options " ][ 0 ][ " value " ] == $value
){
unset ( $_COOKIE [ $key ]);
setcookie (
$key ,
" " ,
[
" expires " => - 1 , // removes cookie
" samesite " => " Lax " ,
" path " => " / "
]
);
continue 3 ;
}
2023-07-22 20:41:14 +02:00
}
}
}
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
2023-10-17 23:58:08 +02:00
" samesite " => " Lax " ,
" path " => " / "
2023-07-22 20:41:14 +02:00
]
);
}
include " lib/frontend.php " ;
$frontend = new frontend ();
echo
2023-11-07 14:04:56 +01:00
$frontend -> load (
" header_nofilters.html " ,
[
" title " => " Settings " ,
" class " => " "
]
);
2023-07-22 20:41:14 +02:00
$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 );
2023-09-13 15:01:23 +02:00
$code = " " ;
2023-07-22 20:41:14 +02:00
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 " ] . '">' ;
2023-11-07 14:04:56 +01:00
if ( $setting [ " parameter " ] == " theme " ){
if ( ! isset ( $_COOKIE [ " theme " ])){
$_COOKIE [ " theme " ] = config :: DEFAULT_THEME ;
}
}
2023-07-22 20:41:14 +02:00
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!">' .
2023-09-13 15:01:23 +02:00
'<a href="../">< Return to front page</a>' .
2023-07-22 20:41:14 +02:00
'</div>' .
'</form>' ;
2023-09-13 15:01:23 +02:00
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
]
);
}