sonarrradarrplexorganizrnginxdashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboard
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							135 lines
						
					
					
						
							4.1 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							135 lines
						
					
					
						
							4.1 KiB
						
					
					
				| <?php namespace App; | |
| 
 | |
| use GuzzleHttp\Exception\GuzzleException; | |
| use GuzzleHttp\Client; | |
| use App\Item; | |
| use App\Setting; | |
| use Form; | |
| use Cache; | |
| 
 | |
| abstract class Search | |
| { | |
| 
 | |
|     /** | |
|      * List of all search providers | |
|      *  | |
|      * @return Array | |
|      */ | |
|     public static function providers() | |
|     { | |
|         $providers = self::standardProviders(); | |
|         $providers = $providers + self::appProviders(); | |
|         return $providers; | |
|     } | |
| 
 | |
|     /** | |
|      * Gets details for a single provider | |
|      *  | |
|      * @return Object | |
|      */ | |
|     public static function providerDetails($provider) | |
|     { | |
|         $providers = self::providers(); | |
|         if(!isset($providers[$provider])) return false; | |
|         return (object)$providers[$provider] ?? false; | |
|     } | |
| 
 | |
|     /** | |
|      * Array of the standard providers | |
|      *  | |
|      * @return Array | |
|      */ | |
|     public static function standardProviders() | |
|     { | |
|         return [ | |
|             'google' => [ | |
|                 'url' => 'https://www.google.com/search', | |
|                 'var' => 'q', | |
|                 'method' => 'get', | |
|                 'type' => 'standard', | |
|             ], | |
|             'ddg' => [ | |
|                 'url' => 'https://duckduckgo.com/', | |
|                 'var' => 'q', | |
|                 'method' => 'get', | |
|                 'type' => 'standard', | |
|             ], | |
|             'bing' => [ | |
|                 'url' => 'https://www.bing.com/search', | |
|                 'var' => 'q', | |
|                 'method' => 'get', | |
|                 'type' => 'standard', | |
|             ], | |
|         ]; | |
|     } | |
| 
 | |
|     /** | |
|      * Loops through users apps to see if app is a search provider, might be worth | |
|      * looking into caching this at some point | |
|      *  | |
|      * @return Array | |
|      */ | |
|     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, | |
|                     'class' => $app->class, | |
|                     'url' => $app->url, | |
|                 ]; | |
| 
 | |
|             } | |
|         } | |
|         return $providers; | |
|     } | |
| 
 | |
|     /** | |
|      * Outputs the search form | |
|      *  | |
|      * @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; | |
|         $user_search_provider = $user_search_provider ?? 'none'; | |
| 
 | |
|         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; | |
|     } | |
| 
 | |
| 
 | |
| } |