Apply Laravel coding style

Shift automatically applies the Laravel coding style - which uses the PSR-2 coding style as a base with some minor additions.

You may customize the adopted coding style by adding a [PHP CS Fixer][1] or [PHP CodeSniffer][2] config to your project root. Feel free to use [Shift's Laravel ruleset][3] to help you get started.

For more information on customizing the code style applied by Shift, [watch this short video][4].

[1]: https://github.com/FriendsOfPHP/PHP-CS-Fixer
[2]: https://github.com/squizlabs/PHP_CodeSniffer
[3]: https://gist.github.com/laravel-shift/cab527923ed2a109dda047b97d53c200
[4]: https://laravelshift.com/videos/shift-code-style
This commit is contained in:
Shift
2022-03-19 13:54:32 +00:00
parent 0fe6565346
commit b1dc4d4a41
86 changed files with 1051 additions and 1093 deletions

View File

@@ -13,14 +13,13 @@ class Application extends Model
//
public function icon()
{
if(!file_exists(storage_path('app/public/'.$this->icon))) {
if (! file_exists(storage_path('app/public/'.$this->icon))) {
$img_src = app_path('SupportedApps/'.$this->name.'/'.str_replace('icons/', '', $this->icon));
$img_dest = storage_path('app/public/'.$this->icon);
//die("i: ".$img_src);
@copy($img_src, $img_dest);
}
return $this->icon;
}
@@ -32,33 +31,38 @@ class Application extends Model
public function defaultColour()
{
// check if light or dark
if($this->tile_background == 'light') return '#fafbfc';
if ($this->tile_background == 'light') {
return '#fafbfc';
}
return '#161b1f';
}
public function class()
{
$name = $this->name;
$name = preg_replace('/[^\p{L}\p{N}]/u', '', $name);
$name = preg_replace('/[^\p{L}\p{N}]/u', '', $name);
$class = '\App\SupportedApps\\'.$name.'\\'.$name;
return $class;
}
public static function classFromName($name)
{
$name = preg_replace('/[^\p{L}\p{N}]/u', '', $name);
$name = preg_replace('/[^\p{L}\p{N}]/u', '', $name);
$class = '\App\SupportedApps\\'.$name.'\\'.$name;
return $class;
}
public static function apps()
{
$json = json_decode(file_get_contents(storage_path('app/supportedapps.json'))) ?? [];
$apps = collect($json->apps);
$sorted = $apps->sortBy('name', SORT_NATURAL|SORT_FLAG_CASE);
$sorted = $apps->sortBy('name', SORT_NATURAL | SORT_FLAG_CASE);
return $sorted;
}
@@ -66,49 +70,52 @@ class Application extends Model
{
$apps = self::apps();
$list = [];
foreach($apps as $app) {
$list[] = (object)[
foreach ($apps as $app) {
$list[] = (object) [
'label' => $app->name,
'value' => $app->appid
'value' => $app->appid,
];
}
return $list;
}
public static function getApp($appid)
{
$localapp = Application::where('appid', $appid)->first();
$localapp = self::where('appid', $appid)->first();
$app = self::single($appid);
$application = ($localapp) ? $localapp : new Application;
$application = ($localapp) ? $localapp : new self;
if(!file_exists(app_path('SupportedApps/'.className($app->name)))) {
if (! file_exists(app_path('SupportedApps/'.className($app->name)))) {
SupportedApps::getFiles($app);
SupportedApps::saveApp($app, $application);
} else {
// check if there has been an update for this app
if($localapp) {
if($localapp->sha !== $app->sha) {
if ($localapp) {
if ($localapp->sha !== $app->sha) {
SupportedApps::getFiles($app);
$app = SupportedApps::saveApp($app, $application);
}
} else {
} else {
SupportedApps::getFiles($app);
$app = SupportedApps::saveApp($app, $application);
}
}
return $app;
return $app;
}
public static function single($appid)
{
$apps = self::apps();
$app = $apps->where('appid', $appid)->first();
if ($app === null) return null;
$classname = preg_replace('/[^\p{L}\p{N}]/u', '', $app->name);
if ($app === null) {
return null;
}
$classname = preg_replace('/[^\p{L}\p{N}]/u', '', $app->name);
$app->class = '\App\SupportedApps\\'.$classname.'\\'.$classname;
return $app;
}
@@ -117,11 +124,10 @@ class Application extends Model
$list = [];
$list['null'] = 'None';
$apps = self::apps();
foreach($apps as $app) {
foreach ($apps as $app) {
$list[$app->appid] = $app->name;
}
return $list;
}
}

View File

@@ -2,9 +2,9 @@
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Application;
use App\SupportedApps;
use Illuminate\Console\Command;
class RegisterApp extends Command
{
@@ -40,40 +40,38 @@ class RegisterApp extends Command
public function handle()
{
$folder = $this->argument('folder');
if($folder == 'all') {
if ($folder == 'all') {
$apps = scandir(app_path('SupportedApps'));
foreach($apps as $folder) {
if($folder == '.' || $folder == '..') continue;
foreach ($apps as $folder) {
if ($folder == '.' || $folder == '..') {
continue;
}
$this->addApp($folder);
}
} else {
$this->addApp($folder);
}
}
public function addApp($folder)
{
$json = app_path('SupportedApps/'.$folder.'/app.json');
if(file_exists($json)) {
if (file_exists($json)) {
$app = json_decode(file_get_contents($json));
if(isset($app->appid)) {
if (isset($app->appid)) {
$exists = Application::find($app->appid);
if($exists) {
$this->error('Application already registered - '.$exists->name." - ".$exists->appid);
if ($exists) {
$this->error('Application already registered - '.$exists->name.' - '.$exists->appid);
} else {
// Doesn't exist so add it
SupportedApps::saveApp($app, new Application);
$this->info("Application Added - ".$app->name." - ".$app->appid);
$this->info('Application Added - '.$app->name.' - '.$app->appid);
}
} else {
$this->error('No App ID for - '.$folder);
}
} else {
$this->error('Could not find '.$json);
}
}
}

View File

@@ -1,12 +1,15 @@
<?php namespace App;
<?php
namespace App;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
interface EnhancedApps
{
public function test();
public function livestats();
public function url($endpoint);
}
public function livestats();
public function url($endpoint);
}

View File

@@ -4,13 +4,18 @@ use Illuminate\Support\Str;
function format_bytes($bytes, $is_drive_size = true, $beforeunit = '', $afterunit = '')
{
$btype = ($is_drive_size === true) ? 1000 : 1024;
$labels = array('B','KB','MB','GB','TB');
for($x = 0; $bytes >= $btype && $x < (count($labels) - 1); $bytes /= $btype, $x++); // use 1000 rather than 1024 to simulate HD size not real size
if($labels[$x] == "TB") return(round($bytes, 3).$beforeunit.$labels[$x].$afterunit);
elseif($labels[$x] == "GB") return(round($bytes, 2).$beforeunit.$labels[$x].$afterunit);
elseif($labels[$x] == "MB") return(round($bytes, 2).$beforeunit.$labels[$x].$afterunit);
else return(round($bytes, 0).$beforeunit.$labels[$x].$afterunit);
$btype = ($is_drive_size === true) ? 1000 : 1024;
$labels = ['B', 'KB', 'MB', 'GB', 'TB'];
for ($x = 0; $bytes >= $btype && $x < (count($labels) - 1); $bytes /= $btype, $x++); // use 1000 rather than 1024 to simulate HD size not real size
if ($labels[$x] == 'TB') {
return round($bytes, 3).$beforeunit.$labels[$x].$afterunit;
} elseif ($labels[$x] == 'GB') {
return round($bytes, 2).$beforeunit.$labels[$x].$afterunit;
} elseif ($labels[$x] == 'MB') {
return round($bytes, 2).$beforeunit.$labels[$x].$afterunit;
} else {
return round($bytes, 0).$beforeunit.$labels[$x].$afterunit;
}
}
function str_slug($title, $separator = '-', $language = 'en')
@@ -34,24 +39,25 @@ if (! function_exists('str_is')) {
}
}
function get_brightness($hex) {
function get_brightness($hex)
{
// returns brightness value from 0 to 255
// strip off any leading #
$hex = str_replace('#', '', $hex);
if(strlen($hex) == 3) {
if (strlen($hex) == 3) {
$hex = $hex[0].$hex[0].$hex[1].$hex[1].$hex[2].$hex[2];
}
$c_r = hexdec(substr($hex, 0, 2));
$c_g = hexdec(substr($hex, 2, 2));
$c_b = hexdec(substr($hex, 4, 2));
return (($c_r * 299) + ($c_g * 587) + ($c_b * 114)) / 1000;
}
function title_color($hex)
{
if(get_brightness($hex) > 130) {
if (get_brightness($hex) > 130) {
return ' black';
} else {
return ' white';
@@ -62,18 +68,16 @@ function getLinkTargetAttribute()
{
$target = \App\Setting::fetch('window_target');
if($target === 'current') {
if ($target === 'current') {
return '';
} else {
return ' target="' . $target . '"';
return ' target="'.$target.'"';
}
}
function className($name)
{
$name = preg_replace('/[^\p{L}\p{N}]/u', '', $name);
$name = preg_replace('/[^\p{L}\p{N}]/u', '', $name);
return $name;
}

View File

@@ -3,8 +3,8 @@
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use App\User;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
@@ -92,6 +92,7 @@ class LoginController extends Controller
{
Auth::logout();
session(['current_user' => $user]);
return redirect()->route('dash');
}
@@ -100,6 +101,7 @@ class LoginController extends Controller
$user = User::where('autologin', $uuid)->first();
Auth::login($user, true);
session(['current_user' => $user]);
return redirect()->route('dash');
}
@@ -122,5 +124,4 @@ class LoginController extends Controller
{
return Session::get('url.intended') ? Session::get('url.intended') : $this->redirectTo;
}
}

View File

@@ -2,10 +2,10 @@
namespace App\Http\Controllers\Auth;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use App\User;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Validator;
class RegisterController extends Controller
{

View File

@@ -2,12 +2,12 @@
namespace App\Http\Controllers;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Support\Facades\Auth;
use App\User;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Support\Facades\Auth;
class Controller extends BaseController
{
@@ -22,7 +22,6 @@ class Controller extends BaseController
//print_r($this->user);
return $next($request);
});
}
public function user()

View File

@@ -2,23 +2,21 @@
namespace App\Http\Controllers;
use Artisan;
use App\Application;
use App\Item;
use App\Setting;
use App\User;
use GrahamCampbell\GitHub\Facades\GitHub;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use App\SupportedApps;
use App\Jobs\ProcessApps;
use App\Search;
use Illuminate\Support\Facades\Route;
use GuzzleHttp\Exception\GuzzleException;
use App\Setting;
use App\SupportedApps;
use App\User;
use Artisan;
use GrahamCampbell\GitHub\Facades\GitHub;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Storage;
class ItemController extends Controller
{
@@ -26,7 +24,8 @@ class ItemController extends Controller
{
$this->middleware('allowed');
}
/**
/**
* Display a listing of the resource on the dashboard.
*
* @return \Illuminate\Http\Response
@@ -46,7 +45,7 @@ class ItemController extends Controller
return view('welcome', $data);
}
/**
/**
* Set order on the dashboard.
*
* @return \Illuminate\Http\Response
@@ -54,7 +53,7 @@ class ItemController extends Controller
public function setOrder(Request $request)
{
$order = array_filter($request->input('order'));
foreach($order as $o => $id) {
foreach ($order as $o => $id) {
$item = Item::find($id);
$item->order = $o;
$item->save();
@@ -72,10 +71,11 @@ class ItemController extends Controller
$item->pinned = true;
$item->save();
$route = route('dash', []);
return redirect($route);
}
/**
/**
* Unpin item on the dashboard.
*
* @return \Illuminate\Http\Response
@@ -86,36 +86,38 @@ class ItemController extends Controller
$item->pinned = false;
$item->save();
$route = route('dash', []);
return redirect($route);
}
/**
/**
* Unpin item on the dashboard.
*
* @return \Illuminate\Http\Response
*/
public function pinToggle($id, $ajax=false, $tag=false)
public function pinToggle($id, $ajax = false, $tag = false)
{
$item = Item::findOrFail($id);
$new = ((bool)$item->pinned === true) ? false : true;
$new = ((bool) $item->pinned === true) ? false : true;
$item->pinned = $new;
$item->save();
if($ajax) {
if(is_numeric($tag) && $tag > 0) {
if ($ajax) {
if (is_numeric($tag) && $tag > 0) {
$item = Item::whereId($tag)->first();
$data['apps'] = $item->children()->pinned()->orderBy('order', 'asc')->get();
} else {
$data['apps'] = Item::pinned()->orderBy('order', 'asc')->get();
}
$data['ajax'] = true;
return view('sortable', $data);
} else {
$route = route('dash', []);
return redirect($route);
}
}
/**
* Display a listing of the resource.
*
@@ -123,18 +125,17 @@ class ItemController extends Controller
*/
public function index(Request $request)
{
$trash = (bool)$request->input('trash');
$trash = (bool) $request->input('trash');
$data['apps'] = Item::ofType('item')->orderBy('title', 'asc')->get();
$data['trash'] = Item::ofType('item')->onlyTrashed()->get();
if($trash) {
if ($trash) {
return view('items.trash', $data);
} else {
return view('items.list', $data);
}
}
/**
* Show the form for creating a new resource.
*
@@ -146,8 +147,8 @@ class ItemController extends Controller
$data['tags'] = Item::ofType('tag')->orderBy('title', 'asc')->pluck('title', 'id');
$data['tags']->prepend(__('app.dashboard'), 0);
$data['current_tags'] = '0';
return view('items.create', $data);
return view('items.create', $data);
}
/**
@@ -160,9 +161,9 @@ class ItemController extends Controller
{
// Get the item
$item = Item::find($id);
if($item->appid === null && $item->class !== null) { // old apps wont have an app id so set it
if ($item->appid === null && $item->class !== null) { // old apps wont have an app id so set it
$app = Application::where('class', $item->class)->first();
if($app) {
if ($app) {
$item->appid = $app->appid;
}
}
@@ -173,10 +174,9 @@ class ItemController extends Controller
//$data['current_tags'] = $data['item']->parent;
//die(print_r($data['current_tags']));
// show the edit form and pass the nerd
return view('items.edit', $data);
return view('items.edit', $data);
}
public function storelogic($request, $id = null)
{
$application = Application::single($request->input('appid'));
@@ -185,12 +185,12 @@ class ItemController extends Controller
'url' => 'required',
]);
if($request->hasFile('file')) {
if ($request->hasFile('file')) {
$path = $request->file('file')->store('icons');
$request->merge([
'icon' => $path
'icon' => $path,
]);
} elseif(strpos($request->input('icon'), 'http') === 0) {
} elseif (strpos($request->input('icon'), 'http') === 0) {
$contents = file_get_contents($request->input('icon'));
if ($application) {
@@ -204,7 +204,7 @@ class ItemController extends Controller
$path = 'icons/'.$icon;
Storage::disk('public')->put($path, $contents);
$request->merge([
'icon' => $path
'icon' => $path,
]);
}
@@ -212,10 +212,10 @@ class ItemController extends Controller
$current_user = User::currentUser();
$request->merge([
'description' => $config,
'user_id' => $current_user->id
'user_id' => $current_user->id,
]);
if($request->input('appid') === 'null') {
if ($request->input('appid') === 'null') {
$request->merge([
'class' => null,
]);
@@ -223,20 +223,16 @@ class ItemController extends Controller
$request->merge([
'class' => Application::classFromName($application->name),
]);
}
if($id === null) {
if ($id === null) {
$item = Item::create($request->all());
} else {
$item = Item::find($id);
$item->update($request->all());
}
$item->parents()->sync($request->tags);
}
/**
@@ -250,6 +246,7 @@ class ItemController extends Controller
$this->storelogic($request);
$route = route('dash', []);
return redirect($route)
->with('success', __('app.alert.success.item_created'));
}
@@ -265,7 +262,6 @@ class ItemController extends Controller
//
}
/**
* Update the specified resource in storage.
*
@@ -277,8 +273,9 @@ class ItemController extends Controller
{
$this->storelogic($request, $id);
$route = route('dash', []);
return redirect($route)
->with('success',__('app.alert.success.item_updated'));
->with('success', __('app.alert.success.item_updated'));
}
/**
@@ -290,8 +287,8 @@ class ItemController extends Controller
public function destroy(Request $request, $id)
{
//
$force = (bool)$request->input('force');
if($force) {
$force = (bool) $request->input('force');
if ($force) {
Item::withTrashed()
->where('id', $id)
->forceDelete();
@@ -300,8 +297,9 @@ class ItemController extends Controller
}
$route = route('items.index', []);
return redirect($route)
->with('success',__('app.alert.success.item_deleted'));
return redirect($route)
->with('success', __('app.alert.success.item_deleted'));
}
/**
@@ -315,11 +313,12 @@ class ItemController extends Controller
//
Item::withTrashed()
->where('id', $id)
->restore();
->restore();
$route = route('items.index', []);
return redirect($route)
->with('success',__('app.alert.success.item_restored'));
->with('success', __('app.alert.success.item_restored'));
}
/**
@@ -332,7 +331,9 @@ class ItemController extends Controller
$output = [];
$appid = $request->input('app');
if($appid === "null") return null;
if ($appid === 'null') {
return null;
}
/*$appname = $request->input('app');
//die($appname);
@@ -358,22 +359,19 @@ class ItemController extends Controller
$output['custom'] = null;
$app = Application::single($appid);
$output = (array)$app;
$output = (array) $app;
$appdetails = Application::getApp($appid);
if((boolean)$app->enhanced === true) {
if ((bool) $app->enhanced === true) {
// if(!isset($app->config)) { // class based config
$output['custom'] = className($appdetails->name).'.config';
$output['custom'] = className($appdetails->name).'.config';
// }
}
$output['colour'] = ($app->tile_background == 'light') ? '#fafbfc' : '#161b1f';
$output['iconview'] = config('app.appsource').'icons/' . $app->icon;
$output['iconview'] = config('app.appsource').'icons/'.$app->icon;
;
return json_encode($output);
}
@@ -385,20 +383,20 @@ class ItemController extends Controller
$app = $single->class;
$app_details = new $app();
$app_details->config = (object)$data;
$app_details->config = (object) $data;
$app_details->test();
}
public function execute($url, $attrs = [], $overridevars=false)
public function execute($url, $attrs = [], $overridevars = false)
{
$res = null;
$vars = ($overridevars !== false) ?
$overridevars : [
'http_errors' => false,
'timeout' => 15,
'http_errors' => false,
'timeout' => 15,
'connect_timeout' => 15,
'verify' => false
'verify' => false,
];
$client = new Client($vars);
@@ -406,21 +404,22 @@ class ItemController extends Controller
$method = 'GET';
try {
return $client->request($method, $url, $attrs);
return $client->request($method, $url, $attrs);
} catch (\GuzzleHttp\Exception\ConnectException $e) {
Log::error("Connection refused");
Log::error('Connection refused');
Log::debug($e->getMessage());
} catch (\GuzzleHttp\Exception\ServerException $e) {
Log::debug($e->getMessage());
}
return $res;
}
public function websitelookup($url)
{
$url = \base64_decode($url);
$data = $this->execute($url);
return $data->getBody();
}
@@ -429,26 +428,19 @@ class ItemController extends Controller
$item = Item::find($id);
$config = $item->getconfig();
if(isset($item->class)) {
if (isset($item->class)) {
$application = new $item->class;
$application->config = $config;
echo $application->livestats();
}
}
public function checkAppList()
{
ProcessApps::dispatch();
$route = route('items.index');
return redirect($route)
->with('success', __('app.alert.success.updating'));
}
}

View File

@@ -2,9 +2,9 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Search;
use Illuminate\Http\Request;
class SearchController extends Controller
{
@@ -15,9 +15,9 @@ class SearchController extends Controller
$provider = Search::providerDetails($requestprovider);
if($provider->type == 'standard') {
if ($provider->type == 'standard') {
return redirect($provider->url.'?'.$provider->query.'='.urlencode($query));
} elseif($provider->type == 'external') {
} elseif ($provider->type == 'external') {
$class = new $provider->class;
//print_r($provider);
return $class->getResults($query, $provider);

View File

@@ -2,12 +2,12 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Setting;
use App\SettingGroup;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;
class SettingsController extends Controller
{
@@ -40,15 +40,18 @@ class SettingsController extends Controller
$setting = Setting::find($id);
//die("s: ".$setting->label);
if((bool)$setting->system === true) return abort(404);
if ((bool) $setting->system === true) {
return abort(404);
}
if (!is_null($setting)) {
if (! is_null($setting)) {
return view('settings.edit')->with([
'setting' => $setting,
]);
} else {
$route = route('settings.list', []);
return redirect($route)
return redirect($route)
->with([
'error' => __('app.alert.error.not_exist'),
]);
@@ -65,39 +68,39 @@ class SettingsController extends Controller
$setting = Setting::find($id);
$user = $this->user();
if (!is_null($setting)) {
if (! is_null($setting)) {
$data = Setting::getInput($request);
$setting_value = null;
if ($setting->type == 'image') {
if($request->hasFile('value')) {
if ($request->hasFile('value')) {
$path = $request->file('value')->store('backgrounds');
$setting_value = $path;
}
} else {
$setting_value = $data->value;
}
$user->settings()->detach($setting->id);
$user->settings()->save($setting, ['uservalue' => $setting_value]);
$route = route('settings.index', []);
return redirect($route)
return redirect($route)
->with([
'success' => __('app.alert.success.setting_updated'),
]);
} else {
$route = route('settings.index', []);
return redirect($route)
return redirect($route)
->with([
'error' => __('app.alert.error.not_exist'),
]);
}
}
/**
* @param int $id
*
@@ -107,21 +110,19 @@ class SettingsController extends Controller
{
$user = $this->user();
$setting = Setting::find($id);
if((bool)$setting->system !== true) {
if ((bool) $setting->system !== true) {
$user->settings()->detach($setting->id);
$user->settings()->save($setting, ['uservalue' => '']);
}
$route = route('settings.index', []);
return redirect($route)
return redirect($route)
->with([
'success' => __('app.alert.success.setting_updated'),
]);
}
public function search(Request $request)
{
}
}

View File

@@ -2,10 +2,10 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Item;
use App\User;
use DB;
use Illuminate\Http\Request;
class TagController extends Controller
{
@@ -13,6 +13,7 @@ class TagController extends Controller
{
$this->middleware('allowed');
}
/**
* Display a listing of the resource.
*
@@ -20,11 +21,11 @@ class TagController extends Controller
*/
public function index(Request $request)
{
$trash = (bool)$request->input('trash');
$trash = (bool) $request->input('trash');
$data['apps'] = Item::ofType('tag')->where('id', '>', 0)->orderBy('title', 'asc')->get();
$data['trash'] = Item::ofType('tag')->where('id', '>', 0)->onlyTrashed()->get();
if($trash) {
if ($trash) {
return view('tags.trash', $data);
} else {
return view('tags.list', $data);
@@ -39,6 +40,7 @@ class TagController extends Controller
public function create()
{
$data = [];
return view('tags.create', $data);
}
@@ -54,10 +56,10 @@ class TagController extends Controller
'title' => 'required|max:255',
]);
if($request->hasFile('file')) {
if ($request->hasFile('file')) {
$path = $request->file('file')->store('icons');
$request->merge([
'icon' => $path
'icon' => $path,
]);
}
@@ -69,12 +71,13 @@ class TagController extends Controller
$request->merge([
'type' => '1',
'url' => $slug,
'user_id' => $current_user->id
'user_id' => $current_user->id,
]);
//die(print_r($request->all()));
Item::create($request->all());
$route = route('dash', []);
return redirect($route)
->with('success', __('app.alert.success.tag_created'));
}
@@ -92,6 +95,7 @@ class TagController extends Controller
$data['apps'] = $item->children()->pinned()->orderBy('order', 'asc')->get();
$data['tag'] = $item->id;
$data['all_apps'] = $item->children;
return view('welcome', $data);
}
@@ -108,7 +112,7 @@ class TagController extends Controller
// show the edit form and pass the nerd
return view('tags.edit')
->with('item', $item);
->with('item', $item);
}
/**
@@ -124,24 +128,25 @@ class TagController extends Controller
'title' => 'required|max:255',
]);
if($request->hasFile('file')) {
if ($request->hasFile('file')) {
$path = $request->file('file')->store('icons');
$request->merge([
'icon' => $path
'icon' => $path,
]);
}
$slug = str_slug($request->title, '-');
// set item type to tag
$request->merge([
'url' => $slug
'url' => $slug,
]);
Item::find($id)->update($request->all());
$route = route('dash', []);
return redirect($route)
->with('success',__('app.alert.success.tag_updated'));
->with('success', __('app.alert.success.tag_updated'));
}
/**
@@ -153,18 +158,19 @@ class TagController extends Controller
public function destroy(Request $request, $id)
{
//
$force = (bool)$request->input('force');
if($force) {
$force = (bool) $request->input('force');
if ($force) {
Item::withTrashed()
->where('id', $id)
->forceDelete();
} else {
Item::find($id)->delete();
}
$route = route('tags.index', []);
return redirect($route)
->with('success',__('app.alert.success.item_deleted'));
->with('success', __('app.alert.success.item_deleted'));
}
/**
@@ -178,10 +184,11 @@ class TagController extends Controller
//
Item::withTrashed()
->where('id', $id)
->restore();
->restore();
$route = route('tags.index', []);
return redirect($route)
->with('success',__('app.alert.success.item_restored'));
->with('success', __('app.alert.success.item_restored'));
}
public function add($tag, $item)
@@ -189,14 +196,15 @@ class TagController extends Controller
$output = 0;
$tag = Item::find($tag);
$item = Item::find($item);
if($tag && $item) {
if ($tag && $item) {
// only add items, not cats
if((int)$item->type === 0) {
if ((int) $item->type === 0) {
$tag->children()->attach($item);
return 1;
}
}
return $output;
}
}

View File

@@ -2,11 +2,11 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str;
class UserController extends Controller
{
@@ -14,6 +14,7 @@ class UserController extends Controller
{
$this->middleware('allowed')->except(['selectUser']);
}
/**
* Display a listing of the resource.
*
@@ -22,6 +23,7 @@ class UserController extends Controller
public function index()
{
$data['users'] = User::all();
return view('users.index', $data);
}
@@ -33,6 +35,7 @@ class UserController extends Controller
public function create()
{
$data = [];
return view('users.create', $data);
}
@@ -40,8 +43,8 @@ class UserController extends Controller
{
Auth::logout();
$data['users'] = User::all();
return view('userselect', $data);
return view('userselect', $data);
}
/**
@@ -56,7 +59,7 @@ class UserController extends Controller
'username' => 'required|max:255|unique:users',
'email' => 'required|email',
'password' => 'nullable|confirmed',
'password_confirmation' => 'nullable'
'password_confirmation' => 'nullable',
]);
$user = new User;
@@ -65,24 +68,25 @@ class UserController extends Controller
$user->public_front = $request->input('public_front');
$password = $request->input('password');
if(!empty($password)) {
if (! empty($password)) {
$user->password = bcrypt($password);
}
if($request->hasFile('file')) {
if ($request->hasFile('file')) {
$path = $request->file('file')->store('avatars');
$user->avatar = $path;
}
if ((bool)$request->input('autologin_allow') === true) {
$user->autologin = (string)Str::uuid();
if ((bool) $request->input('autologin_allow') === true) {
$user->autologin = (string) Str::uuid();
}
$user->save();
$route = route('dash', []);
return redirect($route)
->with('success',__('app.alert.success.user_updated'));
->with('success', __('app.alert.success.user_updated'));
}
/**
@@ -105,8 +109,8 @@ class UserController extends Controller
public function edit(User $user)
{
$data['user'] = $user;
return view('users.edit', $data);
return view('users.edit', $data);
}
/**
@@ -122,28 +126,28 @@ class UserController extends Controller
'username' => 'required|max:255|unique:users,username,'.$user->id,
'email' => 'required|email',
'password' => 'nullable|confirmed',
'password_confirmation' => 'nullable'
'password_confirmation' => 'nullable',
]);
//die(print_r($request->all()));
//die(print_r($request->all()));
$user->username = $request->input('username');
$user->email = $request->input('email');
$user->public_front = $request->input('public_front');
$password = $request->input('password');
if(!empty($password)) {
if (! empty($password)) {
$user->password = bcrypt($password);
} elseif($password == 'null') {
} elseif ($password == 'null') {
$user->password = null;
}
if($request->hasFile('file')) {
if ($request->hasFile('file')) {
$path = $request->file('file')->store('avatars');
$user->avatar = $path;
}
if ((bool)$request->input('autologin_allow') === true) {
$user->autologin = (is_null($user->autologin)) ? (string)Str::uuid() : $user->autologin;
if ((bool) $request->input('autologin_allow') === true) {
$user->autologin = (is_null($user->autologin)) ? (string) Str::uuid() : $user->autologin;
} else {
$user->autologin = null;
}
@@ -151,9 +155,9 @@ class UserController extends Controller
$user->save();
$route = route('dash', []);
return redirect($route)
->with('success',__('app.alert.success.user_updated'));
return redirect($route)
->with('success', __('app.alert.success.user_updated'));
}
/**
@@ -164,12 +168,12 @@ class UserController extends Controller
*/
public function destroy(User $user)
{
if($user->id !== 1) {
if ($user->id !== 1) {
$user->delete();
$route = route('dash', []);
return redirect($route)
->with('success',__('app.alert.success.user_deleted'));
return redirect($route)
->with('success', __('app.alert.success.user_deleted'));
}
}
}

View File

@@ -2,9 +2,9 @@
namespace App\Http\Middleware;
use App\User;
use Closure;
use Illuminate\Support\Facades\Auth;
use App\User;
use Illuminate\Support\Facades\Route;
use Session;
@@ -22,27 +22,32 @@ class CheckAllowed
$route = Route::currentRouteName();
$current_user = User::currentUser();
if(str_is('users*', $route)) {
if($current_user->id !== 1) {
if (str_is('users*', $route)) {
if ($current_user->id !== 1) {
return redirect()->route('dash');
}
}
if($route == 'dash') {
if ($route == 'dash') {
//print_r(User::all());
//die("here".var_dump($current_user->password));
if((bool)$current_user->public_front === true) return $next($request);
if ((bool) $current_user->public_front === true) {
return $next($request);
}
}
if(empty($current_user->password)) return $next($request);
if (empty($current_user->password)) {
return $next($request);
}
// Check if user is logged in as $current_user
if (Auth::check()) {
$loggedin_user = Auth::user();
if($loggedin_user->id === $current_user->id) return $next($request);
if ($loggedin_user->id === $current_user->id) {
return $next($request);
}
}
return Auth::authenticate();
}
}

View File

@@ -2,8 +2,8 @@
namespace App\Http\Middleware;
use Illuminate\Http\Request;
use Fideloper\Proxy\TrustProxies as Middleware;
use Illuminate\Http\Request;
class TrustProxies extends Middleware
{
@@ -12,7 +12,7 @@ class TrustProxies extends Middleware
*
* @var array
*/
protected $proxies = ['192.168.0.0/16', '172.16.0.0/12','10.0.0.0/8', '127.0.0.1'];
protected $proxies = ['192.168.0.0/16', '172.16.0.0/12', '10.0.0.0/8', '127.0.0.1'];
/**
* The current proxy header mappings.

View File

@@ -54,5 +54,4 @@ class VerifyCsrfToken extends Middleware
{
return EncryptCookies::serialized('HEIMDALL-XSRF-TOKEN');
}
}

View File

@@ -2,13 +2,13 @@
namespace App;
use Illuminate\Database\Eloquent\Model;
use Symfony\Component\ClassLoader\ClassMapGenerator;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Builder;
use App\User;
use App\ItemTag;
use App\Application;
use App\ItemTag;
use App\User;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Symfony\Component\ClassLoader\ClassMapGenerator;
class Item extends Model
{
@@ -20,7 +20,7 @@ class Item extends Model
static::addGlobalScope('user_id', function (Builder $builder) {
$current_user = User::currentUser();
if($current_user) {
if ($current_user) {
$builder->where('user_id', $current_user->id)->orWhere('user_id', 0);
} else {
$builder->where('user_id', 0);
@@ -30,7 +30,7 @@ class Item extends Model
//
protected $fillable = [
'title', 'url', 'colour', 'icon', 'appdescription', 'description', 'pinned', 'order', 'type', 'class', 'user_id', 'appid'
'title', 'url', 'colour', 'icon', 'appdescription', 'description', 'pinned', 'order', 'type', 'class', 'user_id', 'appid',
];
/**
@@ -54,31 +54,31 @@ class Item extends Model
public static function checkConfig($config)
{
// die(print_r($config));
if(empty($config)) {
if (empty($config)) {
$config = null;
} else {
$config = json_encode($config);
}
return $config;
}
public function tags()
{
$id = $this->id;
$tags = ItemTag::select('tag_id')->where('item_id', $id)->pluck('tag_id')->toArray();
$tagdetails = Item::select('id', 'title', 'url', 'pinned')->whereIn('id', $tags)->get();
$tagdetails = self::select('id', 'title', 'url', 'pinned')->whereIn('id', $tags)->get();
//print_r($tags);
if(in_array(0, $tags)) {
$details = new Item([
"id" => 0,
"title" => __('app.dashboard'),
"url" => '',
"pinned" => 0
if (in_array(0, $tags)) {
$details = new self([
'id' => 0,
'title' => __('app.dashboard'),
'url' => '',
'pinned' => 0,
]);
$tagdetails->prepend($details);
}
return $tagdetails;
}
@@ -86,6 +86,7 @@ class Item extends Model
{
return $this->belongsToMany('App\Item', 'item_tag', 'item_id', 'tag_id');
}
public function children()
{
return $this->belongsToMany('App\Item', 'item_tag', 'tag_id', 'item_id');
@@ -93,7 +94,7 @@ class Item extends Model
public function getLinkAttribute()
{
if((int)$this->type === 1) {
if ((int) $this->type === 1) {
return url('tag/'.$this->url);
} else {
return $this->url;
@@ -102,7 +103,7 @@ class Item extends Model
public function getDroppableAttribute()
{
if((int)$this->type === 1) {
if ((int) $this->type === 1) {
return ' droppable';
} else {
return '';
@@ -113,24 +114,25 @@ class Item extends Model
{
$target = Setting::fetch('window_target');
if((int)$this->type === 1 || $target === 'current') {
if ((int) $this->type === 1 || $target === 'current') {
return '';
} else {
return ' target="' . $target . '"';
return ' target="'.$target.'"';
}
}
public function getLinkIconAttribute()
{
if((int)$this->type === 1) {
if ((int) $this->type === 1) {
return 'fa-tag';
} else {
return 'fa-arrow-alt-to-right';
}
}
public function getLinkTypeAttribute()
{
if((int)$this->type === 1) {
if ((int) $this->type === 1) {
return 'tags';
} else {
return 'items';
@@ -141,13 +143,13 @@ class Item extends Model
{
$explode = explode('\\', $class);
$name = end($explode);
return $name;
}
public function scopeOfType($query, $type)
{
switch($type) {
switch ($type) {
case 'item':
$typeid = 0;
break;
@@ -172,77 +174,81 @@ class Item extends Model
public static function isEnhanced($class)
{
if($class === null || $class === 'null') return false;
if ($class === null || $class === 'null') {
return false;
}
$app = new $class;
return (bool)($app instanceof \App\EnhancedApps);
return (bool) ($app instanceof \App\EnhancedApps);
}
public static function isSearchProvider($class)
{
$app = new $class;
return ((bool)($app instanceof \App\SearchInterface)) ? $app : false;
return ((bool) ($app instanceof \App\SearchInterface)) ? $app : false;
}
public function enabled()
{
if($this->enhanced()) {
if ($this->enhanced()) {
$config = $this->getconfig();
if($config) {
if ($config) {
return (bool) $config->enabled;
}
}
return false;
}
public function getconfig()
{
// $explode = explode('\\', $this->class);
if(!isset($this->description) || empty($this->description)) {
if (! isset($this->description) || empty($this->description)) {
$config = new \stdClass;
// $config->name = end($explode);
$config->enabled = false;
$config->override_url = null;
$config->apikey = null;
return $config;
}
$config = json_decode($this->description);
// $config->name = end($explode);
$config->url = $this->url;
if(isset($config->override_url) && !empty($config->override_url)) {
if (isset($config->override_url) && ! empty($config->override_url)) {
$config->url = $config->override_url;
} else {
$config->override_url = null;
}
return $config;
}
public static function applicationDetails($class)
{
if(!empty($class)) {
if (! empty($class)) {
$name = self::nameFromClass($class);
$application = Application::where('name', $name)->first();
if($application) return $application;
if ($application) {
return $application;
}
}
return false;
}
public static function getApplicationDescription($class)
{
$details = self::applicationDetails($class);
if($details !== false) {
if ($details !== false) {
return $details->description.' - '.$details->license;
}
return '';
}
@@ -252,7 +258,5 @@ class Item extends Model
public function user()
{
return $this->belongsTo('App\User');
}
}
}

View File

@@ -6,5 +6,4 @@ use Illuminate\Database\Eloquent\Relations\Pivot;
class ItemTag extends Pivot
{
}
}

View File

@@ -2,15 +2,15 @@
namespace App\Jobs;
use App\Application;
use App\Item;
use App\SupportedApps;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Storage;
use App\Application;
use App\SupportedApps;
use App\Item;
class ProcessApps implements ShouldQueue
{
@@ -38,18 +38,17 @@ class ProcessApps implements ShouldQueue
Storage::disk('local')->put('supportedapps.json', $json);
foreach($localapps as $app) {
foreach ($localapps as $app) {
$app->class = $app->class();
$app->save();
}
$items = Item::whereNotNull('class')->get();
foreach($items as $item) {
if(!file_exists(app_path('SupportedApps/'.Item::nameFromClass($item->class)))) {
foreach ($items as $item) {
if (! file_exists(app_path('SupportedApps/'.Item::nameFromClass($item->class)))) {
$app = Application::where('class', $item->class)->first();
Application::getApp($app->appid);
}
}
}
}

View File

@@ -2,13 +2,13 @@
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Artisan;
use Schema;
use App\Setting;
use App\User;
use App\Application;
use App\Jobs\ProcessApps;
use App\Setting;
use App\User;
use Artisan;
use Illuminate\Support\ServiceProvider;
use Schema;
class AppServiceProvider extends ServiceProvider
{
@@ -19,36 +19,33 @@ class AppServiceProvider extends ServiceProvider
*/
public function boot()
{
if(!is_file(base_path('.env'))) {
if (! is_file(base_path('.env'))) {
copy(base_path('.env.example'), base_path('.env'));
}
$this->genKey();
if(!is_file(database_path('app.sqlite'))) {
if (! is_file(database_path('app.sqlite'))) {
// first time setup
touch(database_path('app.sqlite'));
Artisan::call('migrate', array('--path' => 'database/migrations', '--force' => true, '--seed' => true));
Artisan::call('migrate', ['--path' => 'database/migrations', '--force' => true, '--seed' => true]);
//Cache
//Artisan::call('config:cache');
//Artisan::call('route:cache');
}
if(is_file(database_path('app.sqlite'))) {
if(Schema::hasTable('settings')) {
if (is_file(database_path('app.sqlite'))) {
if (Schema::hasTable('settings')) {
// check version to see if an upgrade is needed
$db_version = Setting::_fetch('version');
$app_version = config('app.version');
if(version_compare($app_version, $db_version) == 1) { // app is higher than db, so need to run migrations etc
Artisan::call('migrate', array('--path' => 'database/migrations', '--force' => true, '--seed' => true));
if (version_compare($app_version, $db_version) == 1) { // app is higher than db, so need to run migrations etc
Artisan::call('migrate', ['--path' => 'database/migrations', '--force' => true, '--seed' => true]);
}
} else {
Artisan::call('migrate', array('--path' => 'database/migrations', '--force' => true, '--seed' => true));
Artisan::call('migrate', ['--path' => 'database/migrations', '--force' => true, '--seed' => true]);
}
}
if(!is_file(public_path('storage/.gitignore'))) {
if (! is_file(public_path('storage/.gitignore'))) {
Artisan::call('storage:link');
\Session::put('current_user', null);
}
@@ -56,38 +53,33 @@ class AppServiceProvider extends ServiceProvider
$lang = Setting::fetch('language');
\App::setLocale($lang);
$applications = Application::all();
if($applications->count() <= 0) {
if ($applications->count() <= 0) {
if (class_exists('ZipArchive')) {
ProcessApps::dispatch();
} else {
die("You are missing php-zip");
die('You are missing php-zip');
}
}
// User specific settings need to go here as session isn't available at this point in the app
view()->composer('*', function ($view)
{
if(isset($_SERVER['HTTP_AUTHORIZATION']) && !empty($_SERVER['HTTP_AUTHORIZATION'])) {
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) =
view()->composer('*', function ($view) {
if (isset($_SERVER['HTTP_AUTHORIZATION']) && ! empty($_SERVER['HTTP_AUTHORIZATION'])) {
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) =
explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
}
if(!\Auth::check()) {
if(isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])
&& !empty($_SERVER['PHP_AUTH_USER']) && !empty($_SERVER['PHP_AUTH_PW'])) {
if (! \Auth::check()) {
if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])
&& ! empty($_SERVER['PHP_AUTH_USER']) && ! empty($_SERVER['PHP_AUTH_PW'])) {
$credentials = ['username' => $_SERVER['PHP_AUTH_USER'], 'password' => $_SERVER['PHP_AUTH_PW']];
if (\Auth::attempt($credentials, true)) {
// Authentication passed...
$user = \Auth::user();
//\Session::put('current_user', $user);
session(['current_user' => $user]);
session(['current_user' => $user]);
}
}
elseif(isset($_SERVER['REMOTE_USER']) && !empty($_SERVER['REMOTE_USER'])) {
} elseif (isset($_SERVER['REMOTE_USER']) && ! empty($_SERVER['REMOTE_USER'])) {
$user = User::where('username', $_SERVER['REMOTE_USER'])->first();
if ($user) {
\Auth::login($user, true);
@@ -96,52 +88,44 @@ class AppServiceProvider extends ServiceProvider
}
}
$alt_bg = '';
if($bg_image = Setting::fetch('background_image')) {
if ($bg_image = Setting::fetch('background_image')) {
$alt_bg = ' style="background-image: url(storage/'.$bg_image.')"';
}
$allusers = User::all();
$current_user = User::currentUser();
$view->with('alt_bg', $alt_bg );
$view->with('allusers', $allusers );
$view->with('current_user', $current_user );
});
$view->with('alt_bg', $alt_bg);
$view->with('allusers', $allusers);
$view->with('current_user', $current_user);
});
$this->app['view']->addNamespace('SupportedApps', app_path('SupportedApps'));
if (env('FORCE_HTTPS') === true) {
\URL::forceScheme('https');
}
if(env('APP_URL') != 'http://localhost') {
if (env('APP_URL') != 'http://localhost') {
\URL::forceRootUrl(env('APP_URL'));
}
}
/**
/**
* Generate app key if missing and .env exists
*
* @return void
*/
public function genKey()
{
if(is_file(base_path('.env'))) {
if(empty(env('APP_KEY'))) {
Artisan::call('key:generate', array('--force' => true, '--no-interaction' => true));
if (is_file(base_path('.env'))) {
if (empty(env('APP_KEY'))) {
Artisan::call('key:generate', ['--force' => true, '--no-interaction' => true]);
}
}
}
/**
* Register any application services.
*

View File

@@ -2,8 +2,8 @@
namespace App\Providers;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
class AuthServiceProvider extends ServiceProvider
{

View File

@@ -2,8 +2,8 @@
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Broadcast;
use Illuminate\Support\ServiceProvider;
class BroadcastServiceProvider extends ServiceProvider
{

View File

@@ -2,8 +2,8 @@
namespace App\Providers;
use Illuminate\Support\Facades\Event;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Event;
class EventServiceProvider extends ServiceProvider
{

View File

@@ -2,8 +2,8 @@
namespace App\Providers;
use Illuminate\Support\Facades\Route;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Route;
class RouteServiceProvider extends ServiceProvider
{

View File

@@ -1,44 +1,49 @@
<?php namespace App;
<?php
namespace App;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Client;
use App\Item;
use App\Setting;
use Form;
use Cache;
use Form;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
use Yaml;
abstract class Search
{
/**
* List of all search providers
*
* @return Array
*
* @return array
*/
public static function providers()
{
$providers = self::standardProviders();
$providers = $providers + self::appProviders();
return collect($providers);
}
/**
* Gets details for a single provider
*
* @return Object
*
* @return object
*/
public static function providerDetails($provider)
{
$providers = self::providers();
if(!isset($providers[$provider])) return false;
return (object)$providers[$provider] ?? false;
if (! isset($providers[$provider])) {
return false;
}
return (object) $providers[$provider] ?? false;
}
/**
* Array of the standard providers
*
* @return Array
*
* @return array
*/
public static function standardProviders()
{
@@ -46,7 +51,7 @@ abstract class Search
// print_r($providers);
$providers = Yaml::parseFile(storage_path('app/searchproviders.yaml'));
$all = [];
foreach($providers as $key => $provider) {
foreach ($providers as $key => $provider) {
$all[$key] = $provider;
$all[$key]['type'] = 'standard';
}
@@ -57,16 +62,18 @@ abstract class Search
/**
* Loops through users apps to see if app is a search provider, might be worth
* looking into caching this at some point
*
* @return Array
*
* @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) {
foreach ($userapps as $app) {
if (empty($app->class)) {
continue;
}
if (($provider = Item::isSearchProvider($app->class)) !== false) {
$name = Item::nameFromClass($app->class);
$providers[$app->id] = [
'id' => $app->id,
@@ -76,17 +83,17 @@ abstract class Search
'name' => $app->title,
'colour' => $app->colour,
'icon' => $app->icon,
'description' => $app->description
'description' => $app->description,
];
}
}
return $providers;
}
/**
* Outputs the search form
*
*
* @return html
*/
public static function form()
@@ -96,15 +103,16 @@ abstract class 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 ((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) {
if ((bool) $homepage_search && (bool) $search_provider) {
if ((bool) $user_search_provider) {
$name = 'app.options.'.$user_search_provider;
$provider = self::providerDetails($user_search_provider);
@@ -112,8 +120,8 @@ abstract class Search
$output .= '<form action="'.url('search').'"'.getLinkTargetAttribute().' method="get">';
$output .= '<div id="search-container" class="input-container">';
$output .= '<select name="provider">';
foreach(self::providers() as $key => $searchprovider) {
$selected = ((string)$key === (string)$user_search_provider) ? ' selected="selected"' : '';
foreach (self::providers() as $key => $searchprovider) {
$selected = ((string) $key === (string) $user_search_provider) ? ' selected="selected"' : '';
$output .= '<option value="'.$key.'"'.$selected.'>'.$searchprovider['name'].'</option>';
}
$output .= '</select>';
@@ -124,8 +132,7 @@ abstract class Search
$output .= '</div>';
}
}
return $output;
}
}

View File

@@ -1,10 +1,11 @@
<?php namespace App;
<?php
namespace App;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
interface SearchInterface
{
public function getResults($query, $providerdetails);
}
}

View File

@@ -2,13 +2,13 @@
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Input;
use Form;
use Illuminate\Support\Facades\Auth;
use App\User;
use App\Search;
use App\User;
use Form;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Input;
class Setting extends Model
{
@@ -20,7 +20,7 @@ class Setting extends Model
protected $table = 'settings';
protected $fillable = [
'id', 'group_id', 'key', 'type', 'options', 'label', 'value', 'order', 'system'
'id', 'group_id', 'key', 'type', 'options', 'label', 'value', 'order', 'system',
];
/**
@@ -50,37 +50,37 @@ class Setting extends Model
public function getListValueAttribute()
{
if((bool)$this->system === true) {
if ((bool) $this->system === true) {
$value = self::_fetch($this->key);
} else {
$value = self::fetch($this->key);
}
$this->value = $value;
switch($this->type) {
switch ($this->type) {
case 'image':
if(!empty($this->value)) {
if (! empty($this->value)) {
$value = '<a href="'.asset('storage/'.$this->value).'" title="'.__('app.settings.view').'" target="_blank">'.__('app.settings.view').'</a>';
} else {
$value = __('app.options.none');
}
}
break;
case 'boolean':
if((bool)$this->value === true) {
if ((bool) $this->value === true) {
$value = __('app.options.yes');
} else {
$value = __('app.options.no');
}
}
break;
case 'select':
if(!empty($this->value) && $this->value !== 'none') {
$options = (array)json_decode($this->options);
if($this->key === 'search_provider') {
if (! empty($this->value) && $this->value !== 'none') {
$options = (array) json_decode($this->options);
if ($this->key === 'search_provider') {
$options = Search::providers()->pluck('name', 'id')->toArray();
}
}
$value = __($options[$this->value]);
} else {
$value = __('app.options.none');
}
}
break;
default:
$value = __($this->value);
@@ -88,32 +88,33 @@ class Setting extends Model
}
return $value;
}
public function getEditValueAttribute()
{
if((bool)$this->system === true) {
if ((bool) $this->system === true) {
$value = self::_fetch($this->key);
} else {
$value = self::fetch($this->key);
}
$this->value = $value;
switch($this->type) {
switch ($this->type) {
case 'image':
$value = '';
if(isset($this->value) && !empty($this->value)) {
if (isset($this->value) && ! empty($this->value)) {
$value .= '<a class="setting-view-image" href="'.asset('storage/'.$this->value).'" title="'.__('app.settings.view').'" target="_blank"><img src="'.asset('storage/'.$this->value).'" /></a>';
}
$value .= Form::file('value', ['class' => 'form-control']);
if(isset($this->value) && !empty($this->value)) {
if (isset($this->value) && ! empty($this->value)) {
$value .= '<a class="settinglink" href="'.route('settings.clear', $this->id).'" title="'.__('app.settings.remove').'">'.__('app.settings.reset').'</a>';
}
break;
case 'boolean':
$checked = false;
if(isset($this->value) && (bool)$this->value === true) $checked = true;
if (isset($this->value) && (bool) $this->value === true) {
$checked = true;
}
$set_checked = ($checked) ? ' checked="checked"' : '';
$value = '
<input type="hidden" name="value" value="0" />
@@ -125,10 +126,10 @@ class Setting extends Model
break;
case 'select':
$options = json_decode($this->options);
if($this->key === 'search_provider') {
if ($this->key === 'search_provider') {
$options = Search::providers()->pluck('name', 'id');
}
foreach($options as $key => $opt) {
foreach ($options as $key => $opt) {
$options->$key = __($opt);
}
$value = Form::select('value', $options, null, ['class' => 'form-control']);
@@ -142,7 +143,6 @@ class Setting extends Model
}
return $value;
}
public function group()
@@ -150,7 +150,6 @@ class Setting extends Model
return $this->belongsTo('App\SettingGroup', 'group_id');
}
/**
* @param string $key
*
@@ -159,53 +158,54 @@ class Setting extends Model
public static function fetch($key)
{
$user = self::user();
return self::_fetch($key, $user);
}
/**
* @param string $key
*
* @return mixed
*/
public static function _fetch($key, $user=null)
public static function _fetch($key, $user = null)
{
#$cachekey = ($user === null) ? $key : $key.'-'.$user->id;
#if (Setting::cached($cachekey)) {
# return Setting::$cache[$cachekey];
#} else {
$find = self::where('key', '=', $key)->first();
//$cachekey = ($user === null) ? $key : $key.'-'.$user->id;
//if (Setting::cached($cachekey)) {
// return Setting::$cache[$cachekey];
//} else {
$find = self::where('key', '=', $key)->first();
if (!is_null($find)) {
if((bool)$find->system === true) { // if system variable use global value
if (! is_null($find)) {
if ((bool) $find->system === true) { // if system variable use global value
$value = $find->value;
} else { // not system variable so use user specific value
// check if user specified value has been set
//print_r($user);
$usersetting = $user->settings()->where('id', $find->id)->first();
//print_r($user->settings);
//die(var_dump($usersetting));
//->pivot->value;
//echo "user: ".$user->id." --- ".$usersettings;
if (isset($usersetting) && ! empty($usersetting)) {
$value = $usersetting->pivot->uservalue;
} else { // if not get default from base setting
//$user->settings()->save($find, ['value' => $find->value]);
//$has_setting = $user->settings()->where('id', $find->id)->exists();
//if($has_setting) {
// $user->settings()->updateExistingPivot($find->id, ['uservalue' => (string)$find->value]);
//} else {
// $user->settings()->save($find, ['uservalue' => (string)$find->value]);
//}
$value = $find->value;
} else { // not system variable so use user specific value
// check if user specified value has been set
//print_r($user);
$usersetting = $user->settings()->where('id', $find->id)->first();
//print_r($user->settings);
//die(var_dump($usersetting));
//->pivot->value;
//echo "user: ".$user->id." --- ".$usersettings;
if(isset($usersetting) && !empty($usersetting)) {
$value = $usersetting->pivot->uservalue;
} else { // if not get default from base setting
//$user->settings()->save($find, ['value' => $find->value]);
#$has_setting = $user->settings()->where('id', $find->id)->exists();
#if($has_setting) {
# $user->settings()->updateExistingPivot($find->id, ['uservalue' => (string)$find->value]);
#} else {
# $user->settings()->save($find, ['uservalue' => (string)$find->value]);
#}
$value = $find->value;
}
}
#Setting::add($cachekey, $value);
return $value;
} else {
return false;
}
#}
//Setting::add($cachekey, $value);
return $value;
} else {
return false;
}
//}
}
/**
@@ -214,7 +214,7 @@ class Setting extends Model
*/
public static function add($key, $value)
{
Setting::$cache[$key] = $value;
self::$cache[$key] = $value;
}
/**
@@ -224,10 +224,9 @@ class Setting extends Model
*/
public static function cached($key)
{
return array_key_exists($key, Setting::$cache);
return array_key_exists($key, self::$cache);
}
/**
* The users that belong to the setting.
*/
@@ -240,6 +239,4 @@ class Setting extends Model
{
return User::currentUser();
}
}

View File

@@ -1,34 +1,37 @@
<?php namespace App;
<?php
namespace App;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Support\Facades\Log;
abstract class SupportedApps
{
protected $jar = false;
protected $method = 'GET';
protected $error;
public function appTest($url, $attrs = [], $overridevars=false)
public function appTest($url, $attrs = [], $overridevars = false)
{
if(empty($this->config->url)) {
return (object)[
if (empty($this->config->url)) {
return (object) [
'code' => 404,
'status' => 'No URL has been specified',
'response' => 'No URL has been specified',
];
];
}
$res = $this->execute($url, $attrs);
if($res == null) {
return (object)[
if ($res == null) {
return (object) [
'code' => null,
'status' => $this->error,
'response' => 'Connection failed',
];
}
switch($res->getStatusCode()) {
switch ($res->getStatusCode()) {
case 200:
$status = 'Successfully communicated with the API';
break;
@@ -42,21 +45,22 @@ abstract class SupportedApps
$status = 'Something went wrong... Code: '.$res->getStatusCode();
break;
}
return (object)[
return (object) [
'code' => $res->getStatusCode(),
'status' => $status,
'response' => $res->getBody(),
];
}
public function execute($url, $attrs = [], $overridevars=false, $overridemethod=false)
public function execute($url, $attrs = [], $overridevars = false, $overridemethod = false)
{
$res = null;
$vars = ($overridevars !== false) ?
$overridevars : [
'http_errors' => false,
'timeout' => 15,
'http_errors' => false,
'timeout' => 15,
'connect_timeout' => 15,
];
@@ -65,35 +69,34 @@ abstract class SupportedApps
$method = ($overridemethod !== false) ? $overridemethod : $this->method;
try {
return $client->request($method, $url, $attrs);
return $client->request($method, $url, $attrs);
} catch (\GuzzleHttp\Exception\ConnectException $e) {
Log::error("Connection refused");
Log::error('Connection refused');
Log::debug($e->getMessage());
$this->error = "Connection refused - ".(string) $e->getMessage();
$this->error = 'Connection refused - '.(string) $e->getMessage();
} catch (\GuzzleHttp\Exception\ServerException $e) {
Log::debug($e->getMessage());
$this->error = (string) $e->getResponse()->getBody();
}
$this->error = 'General error connecting with API';
return $res;
}
public function login()
{
}
public function normaliseurl($url, $addslash=true)
public function normaliseurl($url, $addslash = true)
{
$url = rtrim($url, '/');
if($addslash) $url .= '/';
if ($addslash) {
$url .= '/';
}
return $url;
}
public function getLiveStats($status, $data)
{
$className = get_class($this);
@@ -101,8 +104,9 @@ abstract class SupportedApps
$name = end($explode);
$html = view('SupportedApps::'.$name.'.livestats', $data)->with('data', $data)->render();
return json_encode(['status' => $status, 'html' => $html]);
//return
//return
}
public static function getList()
@@ -110,14 +114,17 @@ abstract class SupportedApps
// $list_url = 'https://apps.heimdall.site/list';
$list_url = config('app.appsource').'list.json';
$client = new Client(['http_errors' => false, 'timeout' => 15, 'connect_timeout' => 15]);
return $client->request('GET', $list_url);
}
public static function configValue($item=null, $key=null)
public static function configValue($item = null, $key = null)
{
if(isset($item) && !empty($item)) {
if (isset($item) && ! empty($item)) {
return $item->getconfig()->$key;
} else return null;
} else {
return null;
}
}
public static function getFiles($app)
@@ -127,7 +134,7 @@ abstract class SupportedApps
$client = new Client(['http_errors' => false, 'timeout' => 60, 'connect_timeout' => 15]);
$res = $client->request('GET', $zipurl);
if(!file_exists(app_path('SupportedApps'))) {
if (! file_exists(app_path('SupportedApps'))) {
mkdir(app_path('SupportedApps'), 0777, true);
}
@@ -146,7 +153,7 @@ abstract class SupportedApps
}
public static function saveApp($details, $app)
{
{
$app->appid = $details->appid;
$app->name = $details->name;
$app->sha = $details->sha ?? null;
@@ -156,12 +163,12 @@ abstract class SupportedApps
$appclass = $app->class();
$application = new $appclass;
$enhanced = (bool)($application instanceof \App\EnhancedApps);
$enhanced = (bool) ($application instanceof \App\EnhancedApps);
$app->class = $appclass;
$app->enhanced = $enhanced;
$app->tile_background = $details->tile_background;
$app->save();
return $app;
}
}
return $app;
}
}

View File

@@ -2,8 +2,8 @@
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
@@ -49,15 +49,13 @@ class User extends Authenticatable
if ($current_user) { // if logged in, set this user
return $current_user;
} else { // not logged in, get first user
$user = User::where('public_front',true)->first();
if(!$user) {
$user = User::first();
$user = self::where('public_front', true)->first();
if (! $user) {
$user = self::first();
}
session(['current_user' => $user]);
return $user;
}
}
}