Browse Source

additions to search

search-enhancements
Chris 6 years ago
parent
commit
cd64d762e7
  1. 26
      app/Http/Controllers/SearchController.php
  2. 6
      app/Http/Controllers/SettingsController.php
  3. 2
      app/Item.php
  4. 77
      app/Search.php
  5. 37
      app/Setting.php
  6. 2
      public/css/app.css
  7. 2
      public/mix-manifest.json
  8. 10
      resources/assets/sass/_app.scss
  9. 1
      resources/lang/en/app.php
  10. 2
      resources/views/partials/search.blade.php
  11. 2
      routes/web.php

26
app/Http/Controllers/SearchController.php

@ -0,0 +1,26 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Search;
class SearchController extends Controller
{
public function index(Request $request)
{
$requestprovider = $request->input('provider');
$query = $request->input('q');
$provider = Search::providerDetails($requestprovider);
if($provider->type == 'external') {
return redirect($provider->url.'?'.$provider->var.'='.urlencode($query));
} else {
// get results
}
//print_r($provider);
}
}

6
app/Http/Controllers/SettingsController.php

@ -118,4 +118,10 @@ class SettingsController extends Controller
]);
}
public function search(Request $request)
{
}
}

2
app/Item.php

@ -166,7 +166,7 @@ class Item extends Model
public static function isSearchProvider($class)
{
$app = new $class;
return ((bool)($app instanceof \App\EnhancedApps)) ? $app : false;
return ((bool)($app instanceof \App\SearchInterface)) ? $app : false;
}
public function enabled()

77
app/Search.php

@ -3,6 +3,9 @@
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Client;
use App\Item;
use App\Setting;
use Form;
use Cache;
abstract class Search
{
@ -10,8 +13,9 @@ abstract class Search
public static function providers()
{
$providers = self::standardProviders();
$providers = $providers + self::appProviders();
// Need something to add in none standard providers
//die(print_r($providers));
return $providers;
}
@ -28,20 +32,40 @@ abstract class Search
'url' => 'https://www.google.com/search',
'var' => 'q',
'method' => 'get',
'type' => 'external',
],
'ddg' => [
'url' => 'https://duckduckgo.com/',
'var' => 'q',
'method' => 'get',
'type' => 'external',
],
'bing' => [
'url' => 'https://www.bing.com/search',
'var' => 'q',
'method' => 'get',
'type' => 'external',
],
];
}
public static function appProviders()
{
$providers = [];
$userapps = Item::all();
foreach($userapps as $app) {
if(empty($app->class)) continue;
if(($provider = Item::isSearchProvider($app->class)) !== false) {
$name = Item::nameFromClass($app->class);
$providers[strtolower($name)] = [
'type' => $provider->type,
];
}
}
return $providers;
}
public static function storeSearchProvider($class, $app)
{
if(!empty($class)) {
@ -52,10 +76,59 @@ abstract class Search
$search = new $class;
$providers[strtolower($name)] = [
'method' => $search->method,
'url' => '',
'var' => '',
'type' => $search->type,
];
}
}
}
/**
* @return html
*/
public static function form()
{
$output = '';
$homepage_search = Setting::fetch('homepage_search');
$search_provider = Setting::where('key', '=', 'search_provider')->first();
$user_search_provider = Setting::fetch('search_provider');
//die(print_r($search_provider));
//die(var_dump($user_search_provider));
// return early if search isn't applicable
if((bool)$homepage_search !== true) return $output;
if($user_search_provider === 'none') return $output;
if(empty($user_search_provider)) return $output;
if(is_null($user_search_provider)) return $output;
if((bool)$homepage_search && (bool)$search_provider) {
if((bool)$user_search_provider) {
$name = 'app.options.'.$user_search_provider;
$provider = self::providerDetails($user_search_provider);
$output .= '<div class="searchform">';
$output .= Form::open(['url' => 'search', 'method' => 'get']);
$output .= '<div id="search-container" class="input-container">';
$output .= '<select name="provider">';
foreach(self::providers() as $key => $searchprovider) {
$selected = ($key === $user_search_provider) ? ' selected="selected"' : '';
$output .= '<option value="'.$key.'"'.$selected.'>'.__('app.options.'.$key).'</option>';
}
$output .= '</select>';
$output .= Form::text('q', null, ['class' => 'homesearch', 'autofocus' => 'autofocus', 'placeholder' => __('app.settings.search').'...']);
$output .= '<button type="submit">'.ucwords(__('app.settings.search')).'</button>';
$output .= '</div>';
$output .= Form::close();
$output .= '</div>';
}
}
return $output;
}
}

37
app/Setting.php

@ -217,43 +217,6 @@ class Setting extends Model
return array_key_exists($key, Setting::$cache);
}
/**
* @return html
*/
public static function search()
{
$output = '';
$homepage_search = self::fetch('homepage_search');
$search_provider = self::where('key', '=', 'search_provider')->first();
$user_search_provider = self::fetch('search_provider');
//die(print_r($search_provider));
//die(var_dump($user_search_provider));
// return early if search isn't applicable
if((bool)$homepage_search !== true) return $output;
if($user_search_provider === 'none') return $output;
if(empty($user_search_provider)) return $output;
if(is_null($user_search_provider)) return $output;
if((bool)$homepage_search && (bool)$search_provider) {
if((bool)$user_search_provider) {
$name = 'app.options.'.$user_search_provider;
$provider = Search::providerDetails($user_search_provider);
$output .= '<div class="searchform">';
$output .= Form::open(['url' => $provider->url, 'method' => $provider->method]);
$output .= '<div class="input-container">';
$output .= Form::text($provider->var, null, ['class' => 'homesearch', 'autofocus' => 'autofocus', 'placeholder' => __($name).' '.__('app.settings.search').'...']);
$output .= '<button type="submit">'.ucwords(__('app.settings.search')).'</button>';
$output .= '</div>';
$output .= Form::close();
$output .= '</div>';
}
}
return $output;
}
/**
* The users that belong to the setting.

2
public/css/app.css

File diff suppressed because one or more lines are too long

2
public/mix-manifest.json

@ -1,4 +1,4 @@
{
"/css/app.css": "/css/app.css?id=d346be37404d0fda1d66",
"/css/app.css": "/css/app.css?id=550061ee14223568c451",
"/js/app.js": "/js/app.js?id=0db2e72b5cd42d83e306"
}

10
resources/assets/sass/_app.scss

@ -693,7 +693,7 @@ div.create {
border-bottom: 1px solid rgba(255,255,255,0.35);
position: relative;
width: 100%;
max-width: 500px;
max-width: 620px;
form {
width: 100%;
}
@ -703,6 +703,8 @@ div.create {
box-shadow: 0px 0px 5px 0 rgba(0,0,0,0.4);
overflow: hidden;
position: relative;
display: flex;
}
input {
padding: 17px 15px;
@ -726,6 +728,12 @@ div.create {
text-transform: uppercase;
background: $app-red;
}
select {
padding: 0 10px;
background: #f5f5f5;
border: none;
border-right: 1px solid #ddd;
}
}
.ui-autocomplete {

1
resources/lang/en/app.php

@ -42,6 +42,7 @@ return [
'options.startpage' => 'StartPage',
'options.yes' => 'Yes',
'options.no' => 'No',
'options.nzbhydra' => 'NZBHydra',
'buttons.save' => 'Save',
'buttons.cancel' => 'Cancel',

2
resources/views/partials/search.blade.php

@ -1 +1 @@
{!! App\Setting::search() !!}
{!! App\Search::form() !!}

2
routes/web.php

@ -42,6 +42,8 @@ Route::post('appload', 'ItemController@appload')->name('appload');
Route::post('test_config', 'ItemController@testConfig')->name('test_config');
Route::get('/get_stats/{id}', 'ItemController@getStats')->name('get_stats');
Route::get('/search', 'SearchController@index')->name('search');
Route::get('view/{name_view}', function ($name_view) {
return view('SupportedApps::'.$name_view)->render();
});

Loading…
Cancel
Save