Compare commits

..

77 Commits

Author SHA1 Message Date
Chris
effafe7b2d update version number 2018-02-12 14:48:25 +00:00
Chris
a2aac1f33c Recreate storage symlink if lost 2018-02-12 14:47:12 +00:00
KodeStar
7c30f0c236 Update readme.md 2018-02-12 13:56:01 +00:00
KodeStar
39c71b6f26 Merge pull request #40 from Futos/jdownloader
feat: added Jdownloader to supported Apps - Closes #26
2018-02-12 13:30:04 +00:00
Futos
bc5c1ebb1e Merge branch 'master' into jdownloader 2018-02-12 14:28:56 +01:00
KodeStar
800470f7fa Merge pull request #39 from Futos/openhab
feat: added OpenHAB to supported Apps - Closes #30
2018-02-12 13:27:35 +00:00
KodeStar
a0195e2e08 Merge pull request #37 from Futos/mcmyadmin
feat: added Mcmyadmin as a supported App - Closes #27
2018-02-12 13:27:21 +00:00
Futos
f60aee8072 Merge branch 'master' into mcmyadmin 2018-02-12 14:25:43 +01:00
Futos
92b54d18a9 Merge branch 'master' into openhab 2018-02-12 14:25:04 +01:00
Futos
aeae6a6ebe Merge branch 'master' into jdownloader 2018-02-12 14:23:37 +01:00
KodeStar
cf674629cb Update readme.md 2018-02-12 13:04:01 +00:00
KodeStar
650ba498e1 Update readme.md 2018-02-12 12:11:04 +00:00
KodeStar
8cbd6b7001 Update readme.md 2018-02-12 10:02:34 +00:00
KodeStar
096ceb47ea Merge pull request #38 from Futos/plexrequests
feat: added Plexrequests as a supported App - Closes #29
2018-02-11 23:40:02 +00:00
KodeStar
d0708ea8fb Merge pull request #36 from Futos/traefik
feat: added Traefik as a supported App, also sorted lines alphabetically closes #28
2018-02-11 23:39:17 +00:00
Futos
d299e1dbb9 feat: added Jdownloader to supported Apps - Closes #26 2018-02-11 14:22:06 +01:00
Futos
ee96a2c625 feat: added OpenHAB to supported Apps - Closes #30 2018-02-11 14:09:54 +01:00
Futos
4c8477c4a9 feat: added Plexrequests as a supported App 2018-02-11 14:00:36 +01:00
Futos
aa97c8fd3a feat: added Mcmyadmin as a supported App - Closes #27 2018-02-11 13:41:17 +01:00
Futos
995eb6b557 feat: added Traefik as a supported App, also sorted lines alphabetically 2018-02-11 13:12:42 +01:00
KodeStar
7f0a33e36a Update readme.md 2018-02-11 00:50:13 +00:00
KodeStar
2100075972 Update readme.md 2018-02-10 23:39:30 +00:00
KodeStar
6735401302 Update readme.md 2018-02-10 23:36:09 +00:00
KodeStar
443e18e84f Change background colour for 2 added apps 2018-02-10 22:27:52 +00:00
KodeStar
679313e58c Merge pull request #23 from Futos/plexpy
feat: added Plexpy to supported Apps
2018-02-10 22:14:32 +00:00
KodeStar
3b817c20fa Merge pull request #22 from Futos/nextcloud
feat: added Nextcloud to supported Apps
2018-02-10 22:14:01 +00:00
KodeStar
5baedc39bc fix issue in some peoples browsers where input is bigger than it should be for some reason 2018-02-10 20:23:47 +00:00
Futos
11177b73a5 feat: added Plexpy to supported Apps 2018-02-09 22:06:19 +01:00
Futos
83263c0b1b feat: added Nextcloud to supported Apps 2018-02-09 21:42:47 +01:00
Futos
076d51c6eb feat: added Nextcloud to Readme 2018-02-09 21:41:50 +01:00
KodeStar
18e1d962b8 Update readme.md 2018-02-09 20:18:18 +00:00
KodeStar
989989bda7 fix uploads 2018-02-09 17:24:05 +00:00
KodeStar
5c5f204545 changed date 2018-02-09 16:35:06 +00:00
KodeStar
40e7431b98 Merge pull request #21 from linuxserver/v1.3
V1.3
2018-02-09 16:32:01 +00:00
KodeStar
6a933ffc1d Added turkish to languages 2018-02-09 16:25:45 +00:00
Chris
a79d47f161 Fix sliding checkbox in settings 2018-02-09 15:14:54 +00:00
Chris
887e5c9d49 some updates to the default colours and styling 2018-02-09 14:55:45 +00:00
Chris
309eb4ac33 update readme 2018-02-09 14:05:46 +00:00
Chris
67f4590942 added favicon and readme header 2018-02-09 14:04:18 +00:00
Chris
fcadb2443e added default image 2018-02-09 12:38:38 +00:00
Chris
9776825506 styling for test button 2018-02-09 11:30:26 +00:00
Chris
ee089d0761 Move hidden input outside of sliding checkbox to fix edge 2018-02-09 11:08:04 +00:00
Chris
19e739196c Fix dataonly for upgrades from older versions of database 2018-02-09 08:40:13 +00:00
Chris
a6484b801c Merge branch 'master' into v1.3 2018-02-09 08:28:42 +00:00
Chris
d07fb5ea99 fix undefined $view 2018-02-09 08:28:20 +00:00
KodeStar
095c4f5181 make gap between icon and text slightly smaller 2018-02-09 00:10:22 +00:00
KodeStar
0c7842a3d6 allow enabled apps to be disabled 2018-02-09 00:05:37 +00:00
KodeStar
01ac523e60 change pinhole default colour 2018-02-08 23:59:41 +00:00
KodeStar
6feff6441e updated change log 2018-02-08 23:50:35 +00:00
KodeStar
7229d32e8b Added pinhole to enhanced list 2018-02-08 23:45:37 +00:00
KodeStar
bbd85d2516 Some fixes 2018-02-08 22:51:12 +00:00
KodeStar
803ab459b1 fixed error message on incorrect api key 2018-02-08 22:25:40 +00:00
KodeStar
256648e682 fixes to sabnzbd app 2018-02-08 22:17:19 +00:00
KodeStar
758599804c Added Sabnzbd support 2018-02-08 22:02:28 +00:00
KodeStar
b2dd3f803e don't try to get live stats for items that haven't been configured 2018-02-08 20:58:07 +00:00
KodeStar
912c6512fb change it to start at 5 seconds so if nothing is happening it doesn't start spamming 2018-02-08 20:02:26 +00:00
KodeStar
fff44f4681 fixes for saving non config items 2018-02-08 20:00:24 +00:00
KodeStar
79f4a6cc07 Change code to wind down checks when no doing anything 2018-02-08 19:50:01 +00:00
KodeStar
b910a933fb changed error message 2018-02-08 19:28:23 +00:00
KodeStar
e0d08c60d0 more detail in error message 2018-02-08 19:24:30 +00:00
KodeStar
33394c2f07 remove gitignore mix 2018-02-08 19:11:12 +00:00
KodeStar
4fc2bbd1af fixes for nzbget 2018-02-08 18:53:52 +00:00
KodeStar
e4e815dc40 ignore mix manifest 2018-02-08 17:48:33 +00:00
Chris
482831b9f9 first working(ish) app! 2018-02-08 15:50:53 +00:00
Chris
30aea8e361 updated dependencies + working api connection 2018-02-08 14:21:29 +00:00
KodeStar
dfc3c2194c Merge pull request #20 from aptalca/TR
Add Turkish language
2018-02-08 10:14:03 +00:00
aptalca
7376aef136 formatting 2018-02-07 18:08:12 -05:00
aptalca
18a45863bd formatting 2018-02-07 18:07:24 -05:00
aptalca
9c5cf150e7 formatting 2018-02-07 18:06:47 -05:00
aptalca
c08dcab1d8 formatting 2018-02-07 18:05:47 -05:00
aptalca
c9d9d50fa0 Create validation.php in Turkish 2018-02-07 18:03:46 -05:00
KodeStar
9bb0304620 Update files for next version 2018-02-07 22:33:58 +00:00
aptalca
528b317552 Create passwords.php in Turkish 2018-02-07 17:21:41 -05:00
aptalca
3d8483f9bb Create pagination.php in Turkish 2018-02-07 17:17:28 -05:00
aptalca
6d1d723df2 Create auth.php inTurkish 2018-02-07 17:16:20 -05:00
aptalca
3a93b4f0e1 Create app.php in Turkish 2018-02-07 17:11:15 -05:00
aptalca
f7286bb38f Create app.php 2018-02-07 16:52:47 -05:00
274 changed files with 22391 additions and 871 deletions

View File

@@ -1,10 +1,42 @@
# Release Notes
## v1.1.2 (2018-02-05)
## v1.3.0 (2018-02-09)
### Added
- guzzlehttp/guzzle as a dependency
- Variable polling, so interval is increased when an app is idle and decreased when it's active
- Turkish language translation
- Added Sabnzbd enhanced application
### Changed
- Updated composer dependencies
- Added live stats to Nzbget supported application
- Changed Pihole to an enhanced application
- Changed NZBGet to an enhanced application
### Fixed
- Fixed autocomplete being hard to see
- Fixed checkboxes not working on edge
## v1.2.0 (2018-02-07)
### Added
- Translation support
- Initial "Supported" application support
- Finnish translation
- Swedish translation
- German translation
- French translation
- Spanish translation
- Duplicati supported application
- Emby supported application
- Nzbget supported application
- Pfsense supported application
- Pihole supported application
- Plex supported application
- Portainer supported application
- Unifi supported application
### Changed
- button layout and behaviour

12
app/Helper.php Normal file
View File

@@ -0,0 +1,12 @@
<?php
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);
}

View File

@@ -139,19 +139,17 @@ class ItemController extends Controller
]);
}
$config = json_encode($request->input('config'));
if($config) {
$request->merge([
'description' => $config
]);
}
$config = Item::checkConfig($request->input('config'));
$request->merge([
'description' => $config
]);
//die(print_r($request->input('config')));
Item::create($request->all());
return redirect()->route('dash')
->with('success', __('alert.success.item_created'));
->with('success', __('app.alert.success.item_created'));
}
/**
@@ -194,7 +192,7 @@ class ItemController extends Controller
'title' => 'required|max:255',
'url' => 'required',
]);
//die(print_r($request->all()));
if($request->hasFile('file')) {
$path = $request->file('file')->store('icons');
$request->merge([
@@ -202,11 +200,15 @@ class ItemController extends Controller
]);
}
$config = Item::checkConfig($request->input('config'));
$request->merge([
'description' => $config
]);
Item::find($id)->update($request->all());
return redirect()->route('dash')
->with('success',__('alert.success.item_updated'));
->with('success',__('app.alert.success.item_updated'));
}
/**
@@ -228,7 +230,7 @@ class ItemController extends Controller
}
return redirect()->route('items.index')
->with('success',__('alert.success.item_deleted'));
->with('success',__('app.alert.success.item_deleted'));
}
/**
@@ -244,7 +246,17 @@ class ItemController extends Controller
->where('id', $id)
->restore();
return redirect()->route('items.index')
->with('success',__('alert.success.item_restored'));
->with('success',__('app.alert.success.item_restored'));
}
public function isSupportedAppByKey($app)
{
$output = false;
$all_supported = Item::supportedList();
if(array_key_exists($app, $all_supported)) {
$output = new $all_supported[$app];
}
return $output;
}
/**
@@ -254,16 +266,53 @@ class ItemController extends Controller
*/
public function appload(Request $request)
{
$output = [];
$app = $request->input('app');
if($app) {
$all_supported = Item::supportedList();
$app_details = new $all_supported[$app];
if(($app_details = $this->isSupportedAppByKey($app)) !== false) {
// basic details
$output['icon'] = $app_details->icon();
$output['colour'] = $app_details->defaultColour();
// live details
if($app_details instanceof \App\SupportedApps\Contracts\Livestats) {
$output['config'] = $app_details->configDetails();
} else {
$output['config'] = null;
}
}
$output['icon'] = $app_details->icon();
$output['colour'] = $app_details->defaultColour();
$output['config'] = $app_details->configDetails();
return json_encode($output);
}
public function testConfig(Request $request)
{
$data = $request->input('data');
//$url = $data[array_search('url', array_column($data, 'name'))]['value'];
$app = $data['type'];
$app_details = new $app();
$app_details->config = (object)$data;
$app_details->testConfig();
}
public function getStats($id)
{
$item = Item::find($id);
$config = json_decode($item->description);
if(isset($config->type)) {
$config->url = $item->url;
if(isset($config->override_url) && !empty($config->override_url)) {
$config->url = $config->override_url;
}
$app_details = new $config->type;
$app_details->config = $config;
echo $app_details->executeConfig();
}
}
}

View File

@@ -14,6 +14,8 @@ class VerifyCsrfToken extends Middleware
protected $except = [
//
'order',
'appload'
'appload',
'test_config',
//'get_stats'
];
}

View File

@@ -28,12 +28,20 @@ class Item extends Model
return [
'Duplicati' => \App\SupportedApps\Duplicati::class,
'Emby' => \App\SupportedApps\Emby::class,
'Jdownloader' => \App\SupportedApps\Jdownloader::class,
'Mcmyadmin' => \App\SupportedApps\Mcmyadmin::class,
'NZBGet' => \App\SupportedApps\Nzbget::class,
'pFsense' => \App\SupportedApps\Pfsense::class,
'Nextcloud' => \App\SupportedApps\Nextcloud::class,
'Openhab' => \App\SupportedApps\Openhab::class,
'Pihole' => \App\SupportedApps\Pihole::class,
'Plex' => \App\SupportedApps\Plex::class,
'UniFi' => \App\SupportedApps\Unifi::class,
'Plexpy' => \App\SupportedApps\Plexpy::class,
'Plexrequests' => \App\SupportedApps\Plexrequests::class,
'Portainer' => \App\SupportedApps\Portainer::class,
'Sabnzbd' => \App\SupportedApps\Sabnzbd::class,
'Traefik' => \App\SupportedApps\Traefik::class,
'UniFi' => \App\SupportedApps\Unifi::class,
'pFsense' => \App\SupportedApps\Pfsense::class,
];
}
public static function supportedOptions()
@@ -55,15 +63,42 @@ class Item extends Model
public function getConfigAttribute()
{
$output = null;
$view = null;
if(isset($this->description) && !empty($this->description)){
$output = json_decode($this->description);
$output = is_object($output) ? $output : new \stdClass();
if(isset($output->type) && !empty($output->type)) {
$class = $output->type;
$sap = new $class();
$view = $sap->configDetails();
$output->view = $view;
}
$output->view = $view;
if(!isset($output->dataonly)) $output->dataonly = '0';
}
return (object)$output;
}
public static function checkConfig($config)
{
if(empty($config)) {
$config = null;
} else {
$store = false;
//die(var_dump($config));
foreach($config as $key => $check) {
if($key == 'type') continue;
if($key == 'dataonly') continue;
if(!empty($check) && $check != '0') {
$store = true;
break;
}
}
//die(var_dump($store))
$config['enabled'] = ($store) ? true : false;
$config = json_encode($config);
}
return $config;
}
}

View File

@@ -26,7 +26,6 @@ class AppServiceProvider extends ServiceProvider
// first time setup
touch(database_path('app.sqlite'));
Artisan::call('migrate', array('--path' => 'database/migrations', '--force' => true, '--seed' => true));
Artisan::call('storage:link');
//Cache
//Artisan::call('config:cache');
//Artisan::call('route:cache');
@@ -50,6 +49,9 @@ class AppServiceProvider extends ServiceProvider
\App::setLocale($lang);
}
if(!is_file(public_path('storage'))) {
Artisan::call('storage:link');
}
view()->share('alt_bg', $alt_bg);
}

View File

@@ -97,8 +97,8 @@ class Setting extends Model
if(isset($this->value) && (bool)$this->value === true) $checked = true;
$set_checked = ($checked) ? ' checked="checked"' : '';
$value = '
<input type="hidden" name="value" value="0" />
<label class="switch">
<input type="hidden" name="value" value="0" />
<input type="checkbox" name="value" value="1"'.$set_checked.' />
<span class="slider round"></span>
</label>';

View File

@@ -5,7 +5,5 @@ interface Applications {
public function defaultColour();
public function icon();
public function configDetails();
}

View File

@@ -0,0 +1,11 @@
<?php namespace App\SupportedApps\Contracts;
interface Livestats {
public function configDetails();
public function testConfig();
public function executeConfig();
}

View File

@@ -3,14 +3,10 @@
class Duplicati implements Contracts\Applications {
public function defaultColour()
{
return '#222';
return '#2c3744';
}
public function icon()
{
return 'supportedapps/duplicati.png';
}
public function configDetails()
{
return null;
}
}

View File

@@ -9,8 +9,4 @@ class Emby implements Contracts\Applications {
{
return 'supportedapps/emby.png';
}
public function configDetails()
{
return null;
}
}

View File

@@ -0,0 +1,12 @@
<?php namespace App\SupportedApps;
class Jdownloader implements Contracts\Applications {
public function defaultColour()
{
return '#2b494f';
}
public function icon()
{
return 'supportedapps/jdownloader.png';
}
}

View File

@@ -0,0 +1,12 @@
<?php namespace App\SupportedApps;
class Mcmyadmin implements Contracts\Applications {
public function defaultColour()
{
return '#30404b';
}
public function icon()
{
return 'supportedapps/mcmyadmin.png';
}
}

View File

@@ -0,0 +1,12 @@
<?php namespace App\SupportedApps;
class Nextcloud implements Contracts\Applications {
public function defaultColour()
{
return '#0e2c3e';
}
public function icon()
{
return 'supportedapps/nextcloud.png';
}
}

View File

@@ -1,10 +1,15 @@
<?php namespace App\SupportedApps;
class Nzbget implements Contracts\Applications {
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Client;
class Nzbget implements Contracts\Applications, Contracts\Livestats {
public $config;
public function defaultColour()
{
return '#124019';
return '#253827';
}
public function icon()
{
@@ -12,8 +17,64 @@ class Nzbget implements Contracts\Applications {
}
public function configDetails()
{
//return 'nzbget';
return null;
return 'nzbget';
}
public function testConfig()
{
$res = $this->buildRequest('status');
switch($res->getStatusCode()) {
case 200:
echo 'Successfully connected to the API';
break;
case 401:
echo 'Failed: Invalid credentials';
break;
case 404:
echo 'Failed: Please make sure your URL is correct and that there is a trailing slash';
break;
default:
echo 'Something went wrong... Code: '.$res->getStatusCode();
break;
}
}
public function executeConfig()
{
$output = '';
$res = $this->buildRequest('status');
$data = json_decode($res->getBody());
//$data->result->RemainingSizeMB = '10000000';
//$data->result->DownloadRate = '100000000';
$size = $data->result->RemainingSizeMB;
$rate = $data->result->DownloadRate;
$queue_size = format_bytes($size*1000*1000, false, ' <span>', '</span>');
$current_speed = format_bytes($rate, false, ' <span>');
if($size > 0 || $rate > 0) {
$output = '
<ul class="livestats">
<li><span class="title">Queue</span><strong>'.$queue_size.'</strong></li>
<li><span class="title">Speed</span><strong>'.$current_speed.'/s</span></strong></li>
</ul>
';
}
return $output;
}
public function buildRequest($endpoint)
{
$config = $this->config;
$url = $config->url;
$username = $config->username;
$password = $config->password;
$rebuild_url = str_replace('http://', 'http://'.$username.':'.$password.'@', $url);
$rebuild_url = str_replace('https://', 'https://'.$username.':'.$password.'@', $rebuild_url);
$api_url = $rebuild_url.'jsonrpc/'.$endpoint;
$client = new Client(['http_errors' => false]);
$res = $client->request('GET', $api_url);
return $res;
}
}

View File

@@ -0,0 +1,12 @@
<?php namespace App\SupportedApps;
class Openhab implements Contracts\Applications {
public function defaultColour()
{
return '#b7b7b7';
}
public function icon()
{
return 'supportedapps/openhab.png';
}
}

View File

@@ -3,14 +3,10 @@
class Pfsense implements Contracts\Applications {
public function defaultColour()
{
return '#222';
return '#4e4742';
}
public function icon()
{
return 'supportedapps/pfsense.png';
}
public function configDetails()
{
return null;
}
}

View File

@@ -1,16 +1,70 @@
<?php namespace App\SupportedApps;
class Pihole implements Contracts\Applications {
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Client;
class Pihole implements Contracts\Applications, Contracts\Livestats {
public function defaultColour()
{
return '#222';
return '#352222';
}
public function icon()
{
return 'supportedapps/pihole.png';
}
public function configDetails()
{
return null;
return 'pihole';
}
public function testConfig()
{
$res = $this->buildRequest();
switch($res->getStatusCode()) {
case 200:
echo 'Successfully connected to the API';
break;
case 401:
echo 'Failed: Invalid credentials';
break;
case 404:
echo 'Failed: Please make sure your URL is correct and that there is a trailing slash';
break;
default:
echo 'Something went wrong... Code: '.$res->getStatusCode();
break;
}
}
public function executeConfig()
{
$output = '';
$res = $this->buildRequest();
$data = json_decode($res->getBody());
$output = '
<ul class="livestats">
<li><span class="title">Domains<br />Blocked</span><strong>'.$data->domains_being_blocked.'</strong></li>
<li><span class="title">Blocked<br />Today</span><strong>'.$data->ads_blocked_today.'</span></strong></li>
</ul>
';
return $output;
}
public function buildRequest()
{
$config = $this->config;
$url = $config->url;
$api_url = $url.'admin/api.php';
//die( $api_url.' --- ');
$client = new Client(['http_errors' => false]);
$res = $client->request('GET', $api_url);
return $res;
}
}

View File

@@ -9,8 +9,4 @@ class Plex implements Contracts\Applications {
{
return 'supportedapps/plex.png';
}
public function configDetails()
{
return null;
}
}

View File

@@ -0,0 +1,12 @@
<?php namespace App\SupportedApps;
class Plexpy implements Contracts\Applications {
public function defaultColour()
{
return '#2d2208';
}
public function icon()
{
return 'supportedapps/plexpy.png';
}
}

View File

@@ -0,0 +1,12 @@
<?php namespace App\SupportedApps;
class Plexrequests implements Contracts\Applications {
public function defaultColour()
{
return '#845c2c';
}
public function icon()
{
return 'supportedapps/plexrequests.png';
}
}

View File

@@ -3,14 +3,10 @@
class Portainer implements Contracts\Applications {
public function defaultColour()
{
return '#222';
return '#283f44';
}
public function icon()
{
return 'supportedapps/portainer.png';
}
public function configDetails()
{
return null;
}
}

View File

@@ -0,0 +1,82 @@
<?php namespace App\SupportedApps;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Client;
class Sabnzbd implements Contracts\Applications, Contracts\Livestats {
public $config;
public function defaultColour()
{
return '#3e3924';
}
public function icon()
{
return 'supportedapps/sabnzbd.png';
}
public function configDetails()
{
return 'sabnzbd';
}
public function testConfig()
{
$res = $this->buildRequest('queue');
switch($res->getStatusCode()) {
case 200:
$data = json_decode($res->getBody());
if(isset($data->error) && !empty($data->error)) {
echo 'Failed: '.$data->error;
} else {
echo 'Successfully connected to the API';
}
break;
case 401:
echo 'Failed: Invalid credentials';
break;
case 404:
echo 'Failed: Please make sure your URL is correct and that there is a trailing slash';
break;
default:
echo 'Something went wrong... Code: '.$res->getStatusCode();
break;
}
}
public function executeConfig()
{
$output = '';
$res = $this->buildRequest('queue');
$data = json_decode($res->getBody());
//$data->result->RemainingSizeMB = '10000000';
//$data->result->DownloadRate = '100000000';
$size = $data->queue->mbleft;
$rate = $data->queue->kbpersec;
$queue_size = format_bytes($size*1000*1000, false, ' <span>', '</span>');
$current_speed = format_bytes($rate*1000, false, ' <span>');
if($size > 0 || $rate > 0) {
$output = '
<ul class="livestats">
<li><span class="title">Queue</span><strong>'.$queue_size.'</strong></li>
<li><span class="title">Speed</span><strong>'.$current_speed.'/s</span></strong></li>
</ul>
';
}
return $output;
}
public function buildRequest($endpoint)
{
$config = $this->config;
$url = $config->url;
$apikey = $config->apikey;
$api_url = $url.'api?output=json&apikey='.$apikey.'&mode='.$endpoint;
//die( $api_url.' --- ');
$client = new Client(['http_errors' => false]);
$res = $client->request('GET', $api_url);
return $res;
}
}

View File

@@ -0,0 +1,12 @@
<?php namespace App\SupportedApps;
class Traefik implements Contracts\Applications {
public function defaultColour()
{
return '#427d8c';
}
public function icon()
{
return 'supportedapps/traefik.png';
}
}

View File

@@ -3,14 +3,10 @@
class Unifi implements Contracts\Applications {
public function defaultColour()
{
return '#222';
return '#363840';
}
public function icon()
{
return 'supportedapps/unifi.png';
}
public function configDetails()
{
return null;
}
}

View File

@@ -7,6 +7,7 @@
"require": {
"php": ">=7.0.0",
"fideloper/proxy": "~3.3",
"guzzlehttp/guzzle": "^6.3",
"laravel/framework": "5.5.*",
"laravel/tinker": "~1.0",
"laravelcollective/html": "^5.5"
@@ -23,6 +24,9 @@
"database/seeds",
"database/factories"
],
"files": [
"app/Helper.php"
],
"psr-4": {
"App\\": "app/"
}

446
composer.lock generated
View File

@@ -4,7 +4,8 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"content-hash": "2e42f992455e9f27258038e27b67f5a6",
"hash": "6973e08d9c0d6b713429fd693ccce7e8",
"content-hash": "ab6533331102493e1757f58bb2b94824",
"packages": [
{
"name": "dnoegel/php-xdg-base-dir",
@@ -37,24 +38,24 @@
"MIT"
],
"description": "implementation of xdg base directory specification for php",
"time": "2014-10-24T07:27:01+00:00"
"time": "2014-10-24 07:27:01"
},
{
"name": "doctrine/inflector",
"version": "v1.3.0",
"version": "v1.2.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
"reference": "5527a48b7313d15261292c149e55e26eae771b0a"
"reference": "e11d84c6e018beedd929cff5220969a3c6d1d462"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a",
"reference": "5527a48b7313d15261292c149e55e26eae771b0a",
"url": "https://api.github.com/repos/doctrine/inflector/zipball/e11d84c6e018beedd929cff5220969a3c6d1d462",
"reference": "e11d84c6e018beedd929cff5220969a3c6d1d462",
"shasum": ""
},
"require": {
"php": "^7.1"
"php": "^7.0"
},
"require-dev": {
"phpunit/phpunit": "^6.2"
@@ -62,7 +63,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.3.x-dev"
"dev-master": "1.2.x-dev"
}
},
"autoload": {
@@ -104,7 +105,7 @@
"singularize",
"string"
],
"time": "2018-01-09T20:05:19+00:00"
"time": "2017-07-22 12:18:28"
},
{
"name": "doctrine/lexer",
@@ -158,7 +159,7 @@
"lexer",
"parser"
],
"time": "2014-09-09T13:34:57+00:00"
"time": "2014-09-09 13:34:57"
},
{
"name": "egulias/email-validator",
@@ -215,7 +216,7 @@
"validation",
"validator"
],
"time": "2017-11-15T23:40:40+00:00"
"time": "2017-11-15 23:40:40"
},
{
"name": "erusev/parsedown",
@@ -260,7 +261,7 @@
"markdown",
"parser"
],
"time": "2017-11-14T20:44:03+00:00"
"time": "2017-11-14 20:44:03"
},
{
"name": "fideloper/proxy",
@@ -317,7 +318,188 @@
"proxy",
"trusted proxy"
],
"time": "2017-06-15T17:19:42+00:00"
"time": "2017-06-15 17:19:42"
},
{
"name": "guzzlehttp/guzzle",
"version": "6.3.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
"reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699",
"reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699",
"shasum": ""
},
"require": {
"guzzlehttp/promises": "^1.0",
"guzzlehttp/psr7": "^1.4",
"php": ">=5.5"
},
"require-dev": {
"ext-curl": "*",
"phpunit/phpunit": "^4.0 || ^5.0",
"psr/log": "^1.0"
},
"suggest": {
"psr/log": "Required for using the Log middleware"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "6.2-dev"
}
},
"autoload": {
"files": [
"src/functions_include.php"
],
"psr-4": {
"GuzzleHttp\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
}
],
"description": "Guzzle is a PHP HTTP client library",
"homepage": "http://guzzlephp.org/",
"keywords": [
"client",
"curl",
"framework",
"http",
"http client",
"rest",
"web service"
],
"time": "2017-06-22 18:50:49"
},
{
"name": "guzzlehttp/promises",
"version": "v1.3.1",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
"reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
"reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
"shasum": ""
},
"require": {
"php": ">=5.5.0"
},
"require-dev": {
"phpunit/phpunit": "^4.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Promise\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
}
],
"description": "Guzzle promises library",
"keywords": [
"promise"
],
"time": "2016-12-20 10:07:11"
},
{
"name": "guzzlehttp/psr7",
"version": "1.4.2",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
"reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
"shasum": ""
},
"require": {
"php": ">=5.4.0",
"psr/http-message": "~1.0"
},
"provide": {
"psr/http-message-implementation": "1.0"
},
"require-dev": {
"phpunit/phpunit": "~4.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Psr7\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "Tobias Schultze",
"homepage": "https://github.com/Tobion"
}
],
"description": "PSR-7 message implementation that also provides common utility methods",
"keywords": [
"http",
"message",
"request",
"response",
"stream",
"uri",
"url"
],
"time": "2017-03-20 17:10:46"
},
{
"name": "jakub-onderka/php-console-color",
@@ -360,7 +542,7 @@
"homepage": "http://www.acci.cz"
}
],
"time": "2014-04-08T15:00:19+00:00"
"time": "2014-04-08 15:00:19"
},
{
"name": "jakub-onderka/php-console-highlighter",
@@ -404,20 +586,20 @@
"homepage": "http://www.acci.cz/"
}
],
"time": "2015-04-20T18:58:01+00:00"
"time": "2015-04-20 18:58:01"
},
{
"name": "laravel/framework",
"version": "v5.5.33",
"version": "v5.5.34",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "ef7880e665390f999f4def7c9f78133636f973cf"
"reference": "1de7c0aec13eadbdddc2d1ba4019b064b2c6b966"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/ef7880e665390f999f4def7c9f78133636f973cf",
"reference": "ef7880e665390f999f4def7c9f78133636f973cf",
"url": "https://api.github.com/repos/laravel/framework/zipball/1de7c0aec13eadbdddc2d1ba4019b064b2c6b966",
"reference": "1de7c0aec13eadbdddc2d1ba4019b064b2c6b966",
"shasum": ""
},
"require": {
@@ -538,7 +720,7 @@
"framework",
"laravel"
],
"time": "2018-01-30T15:06:13+00:00"
"time": "2018-02-06 15:36:55"
},
{
"name": "laravel/tinker",
@@ -601,7 +783,7 @@
"laravel",
"psysh"
],
"time": "2017-12-18T16:25:11+00:00"
"time": "2017-12-18 16:25:11"
},
{
"name": "laravelcollective/html",
@@ -666,7 +848,7 @@
],
"description": "HTML and Form Builders for the Laravel Framework",
"homepage": "http://laravelcollective.com",
"time": "2017-08-31T14:46:03+00:00"
"time": "2017-08-31 14:46:03"
},
{
"name": "league/flysystem",
@@ -750,7 +932,7 @@
"sftp",
"storage"
],
"time": "2018-01-27T16:03:56+00:00"
"time": "2018-01-27 16:03:56"
},
{
"name": "monolog/monolog",
@@ -828,7 +1010,7 @@
"logging",
"psr-3"
],
"time": "2017-06-19T01:22:40+00:00"
"time": "2017-06-19 01:22:40"
},
{
"name": "mtdowling/cron-expression",
@@ -872,7 +1054,7 @@
"cron",
"schedule"
],
"time": "2017-01-23T04:29:33+00:00"
"time": "2017-01-23 04:29:33"
},
{
"name": "nesbot/carbon",
@@ -925,7 +1107,7 @@
"datetime",
"time"
],
"time": "2017-01-16T07:55:07+00:00"
"time": "2017-01-16 07:55:07"
},
{
"name": "nikic/php-parser",
@@ -976,7 +1158,7 @@
"parser",
"php"
],
"time": "2018-01-25T21:31:33+00:00"
"time": "2018-01-25 21:31:33"
},
{
"name": "paragonie/random_compat",
@@ -1024,7 +1206,7 @@
"pseudorandom",
"random"
],
"time": "2017-09-27T21:40:39+00:00"
"time": "2017-09-27 21:40:39"
},
{
"name": "psr/container",
@@ -1073,7 +1255,57 @@
"container-interop",
"psr"
],
"time": "2017-02-14T16:28:37+00:00"
"time": "2017-02-14 16:28:37"
},
{
"name": "psr/http-message",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-message.git",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Http\\Message\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interface for HTTP messages",
"homepage": "https://github.com/php-fig/http-message",
"keywords": [
"http",
"http-message",
"psr",
"psr-7",
"request",
"response"
],
"time": "2016-08-06 14:39:51"
},
{
"name": "psr/log",
@@ -1120,7 +1352,7 @@
"psr",
"psr-3"
],
"time": "2016-10-10T12:19:37+00:00"
"time": "2016-10-10 12:19:37"
},
{
"name": "psr/simple-cache",
@@ -1168,7 +1400,7 @@
"psr-16",
"simple-cache"
],
"time": "2017-01-02T13:31:39+00:00"
"time": "2017-01-02 13:31:39"
},
{
"name": "psy/psysh",
@@ -1240,7 +1472,7 @@
"interactive",
"shell"
],
"time": "2017-12-28T16:14:16+00:00"
"time": "2017-12-28 16:14:16"
},
{
"name": "ramsey/uuid",
@@ -1320,7 +1552,7 @@
"identifier",
"uuid"
],
"time": "2018-01-20T00:28:24+00:00"
"time": "2018-01-20 00:28:24"
},
{
"name": "swiftmailer/swiftmailer",
@@ -1375,7 +1607,7 @@
"mail",
"mailer"
],
"time": "2017-09-30T22:39:41+00:00"
"time": "2017-09-30 22:39:41"
},
{
"name": "symfony/console",
@@ -1444,29 +1676,29 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
"time": "2018-01-29T09:03:43+00:00"
"time": "2018-01-29 09:03:43"
},
{
"name": "symfony/css-selector",
"version": "v4.0.4",
"version": "v3.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
"reference": "f97600434e3141ef3cbb9ea42cf500fba88022b7"
"reference": "e66394bc7610e69279bfdb3ab11b4fe65403f556"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/f97600434e3141ef3cbb9ea42cf500fba88022b7",
"reference": "f97600434e3141ef3cbb9ea42cf500fba88022b7",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/e66394bc7610e69279bfdb3ab11b4fe65403f556",
"reference": "e66394bc7610e69279bfdb3ab11b4fe65403f556",
"shasum": ""
},
"require": {
"php": "^7.1.3"
"php": "^5.5.9|>=7.0.8"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.0-dev"
"dev-master": "3.4-dev"
}
},
"autoload": {
@@ -1497,7 +1729,7 @@
],
"description": "Symfony CssSelector Component",
"homepage": "https://symfony.com",
"time": "2018-01-03T07:38:00+00:00"
"time": "2018-01-03 07:37:34"
},
{
"name": "symfony/debug",
@@ -1553,34 +1785,34 @@
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
"time": "2018-01-18T22:16:57+00:00"
"time": "2018-01-18 22:16:57"
},
{
"name": "symfony/event-dispatcher",
"version": "v4.0.4",
"version": "v3.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "74d33aac36208c4d6757807d9f598f0133a3a4eb"
"reference": "26b87b6bca8f8f797331a30b76fdae5342dc26ca"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/74d33aac36208c4d6757807d9f598f0133a3a4eb",
"reference": "74d33aac36208c4d6757807d9f598f0133a3a4eb",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/26b87b6bca8f8f797331a30b76fdae5342dc26ca",
"reference": "26b87b6bca8f8f797331a30b76fdae5342dc26ca",
"shasum": ""
},
"require": {
"php": "^7.1.3"
"php": "^5.5.9|>=7.0.8"
},
"conflict": {
"symfony/dependency-injection": "<3.4"
"symfony/dependency-injection": "<3.3"
},
"require-dev": {
"psr/log": "~1.0",
"symfony/config": "~3.4|~4.0",
"symfony/dependency-injection": "~3.4|~4.0",
"symfony/expression-language": "~3.4|~4.0",
"symfony/stopwatch": "~3.4|~4.0"
"symfony/config": "~2.8|~3.0|~4.0",
"symfony/dependency-injection": "~3.3|~4.0",
"symfony/expression-language": "~2.8|~3.0|~4.0",
"symfony/stopwatch": "~2.8|~3.0|~4.0"
},
"suggest": {
"symfony/dependency-injection": "",
@@ -1589,7 +1821,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.0-dev"
"dev-master": "3.4-dev"
}
},
"autoload": {
@@ -1616,7 +1848,7 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
"time": "2018-01-03T07:38:00+00:00"
"time": "2018-01-03 07:37:34"
},
{
"name": "symfony/finder",
@@ -1665,7 +1897,7 @@
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
"time": "2018-01-03T07:37:34+00:00"
"time": "2018-01-03 07:37:34"
},
{
"name": "symfony/http-foundation",
@@ -1719,7 +1951,7 @@
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
"time": "2018-01-29T09:03:43+00:00"
"time": "2018-01-29 09:03:43"
},
{
"name": "symfony/http-kernel",
@@ -1807,7 +2039,7 @@
],
"description": "Symfony HttpKernel Component",
"homepage": "https://symfony.com",
"time": "2018-01-29T12:29:46+00:00"
"time": "2018-01-29 12:29:46"
},
{
"name": "symfony/polyfill-mbstring",
@@ -1866,7 +2098,7 @@
"portable",
"shim"
],
"time": "2018-01-30T19:27:44+00:00"
"time": "2018-01-30 19:27:44"
},
{
"name": "symfony/polyfill-php70",
@@ -1925,7 +2157,7 @@
"portable",
"shim"
],
"time": "2018-01-30T19:27:44+00:00"
"time": "2018-01-30 19:27:44"
},
{
"name": "symfony/process",
@@ -1974,7 +2206,7 @@
],
"description": "Symfony Process Component",
"homepage": "https://symfony.com",
"time": "2018-01-29T09:03:43+00:00"
"time": "2018-01-29 09:03:43"
},
{
"name": "symfony/routing",
@@ -2052,7 +2284,7 @@
"uri",
"url"
],
"time": "2018-01-16T18:03:57+00:00"
"time": "2018-01-16 18:03:57"
},
{
"name": "symfony/translation",
@@ -2120,7 +2352,7 @@
],
"description": "Symfony Translation Component",
"homepage": "https://symfony.com",
"time": "2018-01-18T22:16:57+00:00"
"time": "2018-01-18 22:16:57"
},
{
"name": "symfony/var-dumper",
@@ -2189,7 +2421,7 @@
"debug",
"dump"
],
"time": "2018-01-29T09:03:43+00:00"
"time": "2018-01-29 09:03:43"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
@@ -2236,7 +2468,7 @@
],
"description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.",
"homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
"time": "2017-11-27T11:13:29+00:00"
"time": "2017-11-27 11:13:29"
},
{
"name": "vlucas/phpdotenv",
@@ -2286,38 +2518,38 @@
"env",
"environment"
],
"time": "2016-09-01T10:05:43+00:00"
"time": "2016-09-01 10:05:43"
}
],
"packages-dev": [
{
"name": "doctrine/instantiator",
"version": "1.1.0",
"version": "1.0.5",
"source": {
"type": "git",
"url": "https://github.com/doctrine/instantiator.git",
"reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda"
"reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
"reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
"reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
"shasum": ""
},
"require": {
"php": "^7.1"
"php": ">=5.3,<8.0-DEV"
},
"require-dev": {
"athletic/athletic": "~0.1.8",
"ext-pdo": "*",
"ext-phar": "*",
"phpunit/phpunit": "^6.2.3",
"squizlabs/php_codesniffer": "^3.0.2"
"phpunit/phpunit": "~4.0",
"squizlabs/php_codesniffer": "~2.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.2.x-dev"
"dev-master": "1.0.x-dev"
}
},
"autoload": {
@@ -2342,7 +2574,7 @@
"constructor",
"instantiate"
],
"time": "2017-07-22T11:58:36+00:00"
"time": "2015-06-14 21:17:01"
},
{
"name": "filp/whoops",
@@ -2403,7 +2635,7 @@
"throwable",
"whoops"
],
"time": "2017-11-23T18:22:44+00:00"
"time": "2017-11-23 18:22:44"
},
{
"name": "fzaninotto/faker",
@@ -2453,7 +2685,7 @@
"faker",
"fixtures"
],
"time": "2017-08-15T16:48:10+00:00"
"time": "2017-08-15 16:48:10"
},
{
"name": "hamcrest/hamcrest-php",
@@ -2501,7 +2733,7 @@
"keywords": [
"test"
],
"time": "2016-01-20T08:20:44+00:00"
"time": "2016-01-20 08:20:44"
},
{
"name": "mockery/mockery",
@@ -2566,7 +2798,7 @@
"test double",
"testing"
],
"time": "2017-10-06T16:20:43+00:00"
"time": "2017-10-06 16:20:43"
},
{
"name": "myclabs/deep-copy",
@@ -2611,7 +2843,7 @@
"object",
"object graph"
],
"time": "2017-10-19T19:58:43+00:00"
"time": "2017-10-19 19:58:43"
},
{
"name": "phar-io/manifest",
@@ -2666,7 +2898,7 @@
}
],
"description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
"time": "2017-03-05T18:14:27+00:00"
"time": "2017-03-05 18:14:27"
},
{
"name": "phar-io/version",
@@ -2713,7 +2945,7 @@
}
],
"description": "Library for handling version information and constraints",
"time": "2017-03-05T17:38:23+00:00"
"time": "2017-03-05 17:38:23"
},
{
"name": "phpdocumentor/reflection-common",
@@ -2767,7 +2999,7 @@
"reflection",
"static analysis"
],
"time": "2017-09-11T18:02:19+00:00"
"time": "2017-09-11 18:02:19"
},
{
"name": "phpdocumentor/reflection-docblock",
@@ -2818,7 +3050,7 @@
}
],
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
"time": "2017-11-30T07:14:17+00:00"
"time": "2017-11-30 07:14:17"
},
{
"name": "phpdocumentor/type-resolver",
@@ -2865,7 +3097,7 @@
"email": "me@mikevanriel.com"
}
],
"time": "2017-07-14T14:27:02+00:00"
"time": "2017-07-14 14:27:02"
},
{
"name": "phpspec/prophecy",
@@ -2928,7 +3160,7 @@
"spy",
"stub"
],
"time": "2017-11-24T13:59:53+00:00"
"time": "2017-11-24 13:59:53"
},
{
"name": "phpunit/php-code-coverage",
@@ -2991,7 +3223,7 @@
"testing",
"xunit"
],
"time": "2017-12-06T09:29:45+00:00"
"time": "2017-12-06 09:29:45"
},
{
"name": "phpunit/php-file-iterator",
@@ -3038,7 +3270,7 @@
"filesystem",
"iterator"
],
"time": "2017-11-27T13:52:08+00:00"
"time": "2017-11-27 13:52:08"
},
{
"name": "phpunit/php-text-template",
@@ -3079,7 +3311,7 @@
"keywords": [
"template"
],
"time": "2015-06-21T13:50:34+00:00"
"time": "2015-06-21 13:50:34"
},
{
"name": "phpunit/php-timer",
@@ -3128,7 +3360,7 @@
"keywords": [
"timer"
],
"time": "2017-02-26T11:10:40+00:00"
"time": "2017-02-26 11:10:40"
},
{
"name": "phpunit/php-token-stream",
@@ -3177,7 +3409,7 @@
"keywords": [
"tokenizer"
],
"time": "2017-11-27T05:48:46+00:00"
"time": "2017-11-27 05:48:46"
},
{
"name": "phpunit/phpunit",
@@ -3261,7 +3493,7 @@
"testing",
"xunit"
],
"time": "2018-02-01T05:57:37+00:00"
"time": "2018-02-01 05:57:37"
},
{
"name": "phpunit/phpunit-mock-objects",
@@ -3320,7 +3552,7 @@
"mock",
"xunit"
],
"time": "2018-01-06T05:45:45+00:00"
"time": "2018-01-06 05:45:45"
},
{
"name": "sebastian/code-unit-reverse-lookup",
@@ -3365,7 +3597,7 @@
],
"description": "Looks up which function or method a line of code belongs to",
"homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
"time": "2017-03-04T06:30:41+00:00"
"time": "2017-03-04 06:30:41"
},
{
"name": "sebastian/comparator",
@@ -3429,7 +3661,7 @@
"compare",
"equality"
],
"time": "2018-02-01T13:46:46+00:00"
"time": "2018-02-01 13:46:46"
},
{
"name": "sebastian/diff",
@@ -3481,7 +3713,7 @@
"keywords": [
"diff"
],
"time": "2017-08-03T08:09:46+00:00"
"time": "2017-08-03 08:09:46"
},
{
"name": "sebastian/environment",
@@ -3531,7 +3763,7 @@
"environment",
"hhvm"
],
"time": "2017-07-01T08:51:00+00:00"
"time": "2017-07-01 08:51:00"
},
{
"name": "sebastian/exporter",
@@ -3598,7 +3830,7 @@
"export",
"exporter"
],
"time": "2017-04-03T13:19:02+00:00"
"time": "2017-04-03 13:19:02"
},
{
"name": "sebastian/global-state",
@@ -3649,7 +3881,7 @@
"keywords": [
"global state"
],
"time": "2017-04-27T15:39:26+00:00"
"time": "2017-04-27 15:39:26"
},
{
"name": "sebastian/object-enumerator",
@@ -3696,7 +3928,7 @@
],
"description": "Traverses array structures and object graphs to enumerate all referenced objects",
"homepage": "https://github.com/sebastianbergmann/object-enumerator/",
"time": "2017-08-03T12:35:26+00:00"
"time": "2017-08-03 12:35:26"
},
{
"name": "sebastian/object-reflector",
@@ -3741,7 +3973,7 @@
],
"description": "Allows reflection of object attributes, including inherited and non-public ones",
"homepage": "https://github.com/sebastianbergmann/object-reflector/",
"time": "2017-03-29T09:07:27+00:00"
"time": "2017-03-29 09:07:27"
},
{
"name": "sebastian/recursion-context",
@@ -3794,7 +4026,7 @@
],
"description": "Provides functionality to recursively process PHP variables",
"homepage": "http://www.github.com/sebastianbergmann/recursion-context",
"time": "2017-03-03T06:23:57+00:00"
"time": "2017-03-03 06:23:57"
},
{
"name": "sebastian/resource-operations",
@@ -3836,7 +4068,7 @@
],
"description": "Provides a list of PHP built-in functions that operate on resources",
"homepage": "https://www.github.com/sebastianbergmann/resource-operations",
"time": "2015-07-28T20:34:47+00:00"
"time": "2015-07-28 20:34:47"
},
{
"name": "sebastian/version",
@@ -3879,7 +4111,7 @@
],
"description": "Library that helps with managing the version number of Git-hosted PHP projects",
"homepage": "https://github.com/sebastianbergmann/version",
"time": "2016-10-03T07:35:21+00:00"
"time": "2016-10-03 07:35:21"
},
{
"name": "symfony/thanks",
@@ -3922,7 +4154,7 @@
}
],
"description": "Give thanks (in the form of a GitHub ⭐) to your fellow PHP package maintainers (not limited to Symfony components)!",
"time": "2018-01-26T10:44:34+00:00"
"time": "2018-01-26 10:44:34"
},
{
"name": "theseer/tokenizer",
@@ -3962,7 +4194,7 @@
}
],
"description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
"time": "2017-04-07T12:08:54+00:00"
"time": "2017-04-07 12:08:54"
},
{
"name": "webmozart/assert",
@@ -4012,7 +4244,7 @@
"check",
"validate"
],
"time": "2018-01-29T19:49:41+00:00"
"time": "2018-01-29 19:49:41"
}
],
"aliases": [],

View File

@@ -14,7 +14,7 @@ return [
*/
'name' => env('APP_NAME', 'Heimdall'),
'version' => '1.2.0',
'version' => '1.3.2',
/*
|--------------------------------------------------------------------------

View File

@@ -117,6 +117,7 @@ class SettingsSeeder extends Seeder
'fr' => 'Français (French)',
'sv' => 'Svenska (Swedish)',
'es' => 'Español (Spanish)',
'tr' => 'Türkçe (Turkish)',
]);
if($languages = Setting::find(5)) {
$languages->options = $language_options;

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
public/apple-icon-57x57.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

BIN
public/apple-icon-60x60.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
public/apple-icon-72x72.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

BIN
public/apple-icon-76x76.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
public/apple-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

2
public/browserconfig.xml Normal file
View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig><msapplication><tile><square70x70logo src="/ms-icon-70x70.png"/><square150x150logo src="/ms-icon-150x150.png"/><square310x310logo src="/ms-icon-310x310.png"/><TileColor>#ffffff</TileColor></tile></msapplication></browserconfig>

88
public/css/app.css vendored
View File

@@ -519,8 +519,6 @@ body {
border-radius: 6px;
padding: 15px;
padding-right: 55px;
-webkit-box-shadow: 0 0 20px 2px rgba(0, 0, 0, 0.3);
box-shadow: 0 0 20px 2px rgba(0, 0, 0, 0.3);
color: white;
overflow: hidden;
position: relative;
@@ -533,6 +531,10 @@ body {
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
border: 1px solid #333333;
border: 1px solid #4a4a4a;
border: 1px solid rgba(76, 76, 76, 0.4);
background-clip: padding-box;
}
.item:after {
@@ -567,6 +569,10 @@ body {
font-size: 16px;
}
.item .details {
width: 100%;
}
.text-center {
text-align: center !important;
}
@@ -661,6 +667,10 @@ body {
color: #2f313a;
}
.homesearch {
height: 51px;
}
.module-actions {
display: -webkit-box;
display: -ms-flexbox;
@@ -756,7 +766,7 @@ div.create .input select {
.app-icon {
max-width: 60px;
margin-right: 20px;
margin-right: 15px;
}
.sidenav {
@@ -873,14 +883,16 @@ input:checked + .slider:before {
@-webkit-keyframes autofill {
to {
background: #f5f5f5;
color: #fff;
color: #2f313a;
font-weight: bold;
}
}
@keyframes autofill {
to {
background: #f5f5f5;
color: #fff;
color: #2f313a;
font-weight: bold;
}
}
@@ -1070,6 +1082,17 @@ hr {
font-size: 16px;
}
.btn.test {
font-size: 16px;
font-weight: 500;
border-top-right-radius: 5px;
border-bottom-right-radius: 5px;
color: white;
text-transform: uppercase;
padding: 8px 50px;
background: #207774;
}
.upload-btn-wrapper input[type=file] {
font-size: 100px;
position: absolute;
@@ -1091,6 +1114,61 @@ hr {
margin-right: 15px;
}
.ui-helper-hidden-accessible {
display: none;
}
.livestats-container .livestats {
margin: 5px 0px -5px;
padding: 0;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
list-style: none;
-webkit-box-pack: justify;
-ms-flex-pack: justify;
justify-content: space-between;
width: 100%;
}
.livestats-container .livestats li {
text-align: center;
margin: 0;
line-height: 1;
}
.livestats-container .livestats span {
display: block;
text-transform: uppercase;
font-size: 11px;
font-weight: 500;
opacity: 0.5;
line-height: 1;
}
.livestats-container .livestats strong {
display: block;
line-height: 1;
}
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus
input:-webkit-autofill,
textarea:-webkit-autofill,
textarea:-webkit-autofill:hover
textarea:-webkit-autofill:focus,
select:-webkit-autofill,
select:-webkit-autofill:hover,
select:-webkit-autofill:focus {
border: inherit;
-webkit-text-fill-color: inherit;
-webkit-box-shadow: inherit;
-webkit-transition: inherit;
transition: inherit;
color: #2f313a !important;
}
/*! Huebee v2.0.0
http://huebee.buzz
---------------------------------------------- */

BIN
public/favicon-16x16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
public/favicon-32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
public/favicon-96x96.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 0 B

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

49
public/js/app.js vendored
View File

@@ -15,7 +15,33 @@ $.when( $.ready ).then(function() {
{
$('.message-container').fadeOut();
}, 3500);
}
if($('.livestats-container').length) {
$('.livestats-container').each(function(index){
var id = $(this).data('id');
var dataonly = $(this).data('dataonly');
var increaseby = (dataonly == 1) ? 20000 : 1000;
var container = $(this);
var max_timer = 30000;
var timer = 5000;
(function worker() {
$.ajax({
url: '/get_stats/'+id,
success: function(data) {
container.html(data);
if(data != '') timer = increaseby;
else {
if(timer < max_timer) timer += 2000;
}
},
complete: function() {
// Schedule the next request when the current one's complete
setTimeout(worker, timer);
}
});
})();
});
}
@@ -65,6 +91,29 @@ $.when( $.ready ).then(function() {
var app = $('#app');
app.removeClass('sidebar');
}).on('click', '#test_config', function(e) {
e.preventDefault();
var apiurl = $('#create input[name=url]').val();
var override_url = $('#create input[name=override_url]');
if(override_url.length && override_url.val() != '') {
apiurl = override_url;
}
var data = {};
data['url'] = apiurl;
$('input.config-item').each(function(index){
var config = $(this).data('config');
data[config] = $(this).val();
})
$.post(
'/test_config',
{ data }, function(data) {
alert(data);
}
);
});
$('#pinlist').on('click', 'a', function(e) {
e.preventDefault();

41
public/manifest.json Normal file
View File

@@ -0,0 +1,41 @@
{
"name": "App",
"icons": [
{
"src": "\/android-icon-36x36.png",
"sizes": "36x36",
"type": "image\/png",
"density": "0.75"
},
{
"src": "\/android-icon-48x48.png",
"sizes": "48x48",
"type": "image\/png",
"density": "1.0"
},
{
"src": "\/android-icon-72x72.png",
"sizes": "72x72",
"type": "image\/png",
"density": "1.5"
},
{
"src": "\/android-icon-96x96.png",
"sizes": "96x96",
"type": "image\/png",
"density": "2.0"
},
{
"src": "\/android-icon-144x144.png",
"sizes": "144x144",
"type": "image\/png",
"density": "3.0"
},
{
"src": "\/android-icon-192x192.png",
"sizes": "192x192",
"type": "image\/png",
"density": "4.0"
}
]
}

View File

@@ -1,4 +1,4 @@
{
"/css/app.css": "/css/app.css?id=4f5b9f5ba0f1f57405c8",
"/js/app.js": "/js/app.js?id=559585a774e3f088503a"
"/css/app.css": "/css/app.css?id=a571eeda02c71a01f251",
"/js/app.js": "/js/app.js?id=b38be2e595ece6fcef81"
}

BIN
public/ms-icon-144x144.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
public/ms-icon-150x150.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
public/ms-icon-310x310.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
public/ms-icon-70x70.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@@ -1,20 +1,49 @@
![alt text](https://i.imgur.com/aUpMns5.jpg)
![alt text](https://i.imgur.com/iuV8w3y.png)
## About
Heimdall is a way to organise all those links to your most used web sites and web applications in a simple way.
As the name suggests Heimdall Application Dashboard is a dashboard for all your web applications. It doesn't need to be limited to applications though, you can add links to anything you like.
Simplicity is the key to Heimdall.
Heimdall is an elegant solution to organise all your web applications. Its dedicated to this purpose so you wont lose your links in a sea of bookmarks.
Why not use it as your browser start page? It even has the ability to include a search bar using either Google, Bing or DuckDuckGo.
![alt text](https://i.imgur.com/MrC4QpN.gif)
## Video
If you want to see a quick video of it in use, go to https://drive.google.com/file/d/1cijXgmjem_q2OfKMp36qVuXRiyOzvhWC/view
If you want to see a quick video of it in use, go to https://youtu.be/GXnnMAxPzMc
## Supported applications
You can use the app to link to any site or application, but Foundation apps will auto fill in the icon for the app and supply a default color for the tile. In addition Enhanced apps allow you provide details to an apps API, allowing you to view live stats directly on the dashboad. For example, the NZBGet and Sabnzbd Enhanced apps will display the queue size and download speed while something is downloading.
**Enhanced**
- NZBGet
- Sabnzbd
**Foundation**
- Duplicati
- Emby
- Jdownloader
- Mcmyadmin
- NZBGet
- Nextcloud
- Openhab
- Pihole
- Plex
- Plexpy
- Plexrequests
- Portainer
- Sabnzbd
- Traefik
- UniFi
- pFsense
## Installing
Apart from the Laravel dependencies, namely PHP >= 7.0.0, OpenSSL PHP Extension, PDO PHP Extension, Mbstring PHP Extension, Tokenizer PHP Extension and XML PHP Extension, the only other thing Heimdall needs is sqlite support.
Installation is as simple as cloning the repository somewhere, or downloading and extracting the zip/tar and pointing your httpd document root to it. For simple testing you could just go to the folder and type `php artisan serve`
There is also a docker at https://hub.docker.com/r/linuxserver/heimdall/ and instructions on how to use it at https://github.com/linuxserver/docker-heimdall/blob/master/READMETEMPLATE.md
## Languages
The app has been translated into several languages, however the quality of the translations could do with work, if you would like to improve them or help with other translations they are stored in /resources/lang/
@@ -30,6 +59,7 @@ Currently added languages are
- French
- Swedish
- Spanish
- Turkish
## Web Server Configuration
@@ -68,6 +98,13 @@ If there are any other locations which might interefere with any of the folders
- Icons - [FonteAwesome 5](https://fontawesome.com/)
- Javascript - [jQuery](https://jquery.com/)
- Colour picker - [Huebee](http://huebee.buzz/)
- Everyone at Linuxserver.io that has helped with the app and let's not forget IronicBadger for the following question that started it all:
```
you know, i would love something like this landing page for all my servers apps
that gives me the ability to pin favourites
and / or search
@Stark @Kode do either of you think you'd be able to rustle something like this up ?
```
## License

View File

@@ -6,7 +6,33 @@ $.when( $.ready ).then(function() {
{
$('.message-container').fadeOut();
}, 3500);
}
if($('.livestats-container').length) {
$('.livestats-container').each(function(index){
var id = $(this).data('id');
var dataonly = $(this).data('dataonly');
var increaseby = (dataonly == 1) ? 20000 : 1000;
var container = $(this);
var max_timer = 30000;
var timer = 5000;
(function worker() {
$.ajax({
url: '/get_stats/'+id,
success: function(data) {
container.html(data);
if(data != '') timer = increaseby;
else {
if(timer < max_timer) timer += 2000;
}
},
complete: function() {
// Schedule the next request when the current one's complete
setTimeout(worker, timer);
}
});
})();
});
}
@@ -56,6 +82,29 @@ $.when( $.ready ).then(function() {
var app = $('#app');
app.removeClass('sidebar');
}).on('click', '#test_config', function(e) {
e.preventDefault();
var apiurl = $('#create input[name=url]').val();
var override_url = $('#create input[name=override_url]');
if(override_url.length && override_url.val() != '') {
apiurl = override_url;
}
var data = {};
data['url'] = apiurl;
$('input.config-item').each(function(index){
var config = $(this).data('config');
data[config] = $(this).val();
})
$.post(
'/test_config',
{ data }, function(data) {
alert(data);
}
);
});
$('#pinlist').on('click', 'a', function(e) {
e.preventDefault();

View File

@@ -232,7 +232,7 @@ body {
padding: 15px;
padding-right: 55px;
//border: 2px solid rgba(0,0,0,0.4);
box-shadow: 0 0 20px 2px rgba(0,0,0,0.3);
//box-shadow: 0 0 15px 1px rgba(35, 35, 35, 0.44);
color: white;
overflow: hidden;
position: relative;
@@ -240,6 +240,11 @@ body {
outline: 1px solid transparent;
display: flex;
align-items: center;
border: 1px solid #333333;
border: 1px solid rgb(74, 74, 74);
border: 1px solid rgba(76, 76, 76, 0.4);
-webkit-background-clip: padding-box;
background-clip: padding-box;
&:after {
content: "";
position: absolute;
@@ -268,6 +273,9 @@ body {
.title {
font-size: 16px;
}
.details {
width: 100%;
}
}
.text-center {
text-align: center!important;
@@ -349,6 +357,9 @@ body {
}
}
}
.homesearch {
height: 51px;
}
.module-actions {
display: flex;
justify-content:space-between;
@@ -418,7 +429,7 @@ div.create {
.app-icon {
max-width: 60px;
margin-right: 20px;
margin-right: 15px;
}
.sidenav {
@@ -519,13 +530,15 @@ div.create {
@-webkit-keyframes autofill {
to {
background:#f5f5f5;
color:#fff;
color:$app-text;
font-weight: bold;
}
}
@keyframes autofill {
to {
background:#f5f5f5;
color:#fff;
color:$app-text;
font-weight: bold;
}
}
@@ -701,7 +714,18 @@ hr {
padding: 8px 12px;
border-radius: 8px;
font-size: 16px;
}
&.test {
font-size: 16px;
font-weight: 500;
border-top-right-radius: 5px;
border-bottom-right-radius: 5px;
color: white;
text-transform: uppercase;
padding: 8px 50px;
background: #207774;
}
}
.upload-btn-wrapper input[type=file] {
font-size: 100px;
@@ -717,4 +741,55 @@ hr {
img {
margin-right: 15px;
}
}
}
.ui-helper-hidden-accessible {
display: none;
}
.livestats-container {
.livestats {
margin: 5px 0px -5px;
padding: 0;
display: flex;
list-style: none;
justify-content: space-between;
width: 100%;
li {
text-align: center;
margin: 0;
line-height: 1;
}
span {
display: block;
text-transform: uppercase;
font-size: 11px;
font-weight: 500;
opacity: 0.5;
line-height: 1;
}
strong {
display: block;
line-height: 1;
}
}
}
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus
input:-webkit-autofill,
textarea:-webkit-autofill,
textarea:-webkit-autofill:hover
textarea:-webkit-autofill:focus,
select:-webkit-autofill,
select:-webkit-autofill:hover,
select:-webkit-autofill:focus {
border: inherit;
-webkit-text-fill-color: inherit;
-webkit-box-shadow: inherit;
transition: inherit;
color: $app-text!important;
}

View File

@@ -59,6 +59,8 @@ return [
'apps.username' => 'Username',
'apps.password' => 'Password',
'apps.config' => 'Config',
'apps.apikey' => 'Api Key',
'apps.enable' => 'Enable',
'url' => 'Url',
'title' => 'Title',

78
resources/lang/tr/app.php Normal file
View File

@@ -0,0 +1,78 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| App Language Lines
|--------------------------------------------------------------------------
|
*/
'settings.system' => 'Sistem',
'settings.appearance' => 'Görünüm',
'settings.miscellaneous' => 'Çeşitli',
'settings.version' => 'Versiyon',
'settings.background_image' => 'Arkaplan Resmi',
'settings.homepage_search' => 'Anasayfa Arama',
'settings.search_provider' => 'Arama Motoru',
'settings.language' => 'Dil',
'settings.reset' => 'Varsayılana Geri Dön',
'settings.remove' => 'Sil',
'settings.search' => 'ara',
'settings.no_items' => 'Öğe bulunamadı',
'settings.label' => 'Etiket',
'settings.value' => 'Değer',
'settings.edit' => 'Düzenle',
'settings.view' => 'Görüntüle',
'options.none' => '- ayarlanmadı -',
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.yes' => 'Evet',
'options.no' => 'Hayır',
'buttons.save' => 'Kaydet',
'buttons.cancel' => 'İptal',
'buttons.add' => 'Ekle',
'buttons.upload' => 'Dosya yükle',
'dash.pin_item' => 'Ana panele iğnele',
'dash.no_apps' => 'Ana panele iğneli öğeler, :link1 or :link2',
'dash.link1' => 'Yeni uygulama ekle',
'dash.link2' => 'Ana panele iğnele',
'dash.pinned_items' => 'İğnelenen öğeler',
'apps.app_list' => 'Uygulama listesi',
'apps.view_trash' => 'Çöpü görüntüle',
'apps.add_application' => 'Uygulama ekle',
'apps.application_name' => 'Uygulama adı',
'apps.colour' => 'Renk',
'apps.icon' => 'İkon',
'apps.pinned' => 'İğneli',
'apps.title' => 'Başlık',
'apps.hex' => 'Hex değeri',
'apps.username' => 'Kullanıcı adı',
'apps.password' => 'Şifre',
'apps.config' => 'Yapılandırma',
'url' => 'Adres',
'title' => 'Başlık',
'delete' => 'Sil',
'optional' => 'İsteğe bağlı',
'restore' => 'Eski haline getir',
'alert.success.item_created' => 'Öğe yaratıldı',
'alert.success.item_updated' => 'Öğe güncellendi',
'alert.success.item_deleted' => 'Öğe silindi',
'alert.success.item_restored' => 'Öğe eski haline getirildi',
'alert.success.setting_updated' => 'Ayarlama kaydedildi',
'alert.error.not_exist' => 'Böyle bir seçenek yok.',
];

View File

@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used during authentication for various
| messages that we need to display to the user. You are free to modify
| these language lines according to your application's requirements.
|
*/
'failed' => 'Kimlik bilgileri doğru değil.',
'throttle' => 'Çok fazla girişim. :seconds saniye sonra tekrar deneyin.',
];

View File

@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; Önceki',
'next' => 'Sonraki &raquo;',
];

View File

@@ -0,0 +1,22 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Password Reset Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are the default lines which match reasons
| that are given by the password broker for a password update attempt
| has failed, such as for an invalid token or invalid new password.
|
*/
'password' => 'Şifre en az altı karakter olmalı ve onaylamasına uymalıdır.',
'reset' => 'Şifreniz sıfırlandı!',
'sent' => 'Şifre sıfırlama bağlantısı eposta adresinize yollandı!',
'token' => 'Şifre sıfırlama simgesi geçerli değil.',
'user' => "Adresle ilişkili kullanıcı adı bulunamadı.",
];

View File

@@ -0,0 +1,121 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
'accepted' => ':attribute kabul edilmelidir.',
'active_url' => ':attribute geçerli bir adres değil.',
'after' => ':attribute :date tarihinden sonra olmalıdır.',
'after_or_equal' => ':attribute :date ile aynı veya daha sonra tarihte olmalıdır.',
'alpha' => ':attribute sadece harf içerebilir.',
'alpha_dash' => ':attribute sadece harf, rakam, veya tire içerebilir.',
'alpha_num' => ':attribute sadece harf ve rakam içerebilir.',
'array' => ':attribute dizi olmalıdır.',
'before' => ':attribute :date tarihinden önce olmalıdır.',
'before_or_equal' => ':attribute :date ile aynı ya da daha önce tarihte olmalıdır.',
'between' => [
'numeric' => ':attribute :min ile :max arasında olmalıdır.',
'file' => ':attribute :min ile :max kilobayt arasında olmalıdır.',
'string' => ':attribute :min ile :max arasında karakter içermelidir.',
'array' => ':attribute :min ile :max arasi öğe içermelidir.',
],
'boolean' => ':attribute alanı doğru ya da yanlış olmalıdır.',
'confirmed' => ':attribute onaylamasına uymuyor.',
'date' => ':attribute geçerli bir tarih değil.',
'date_format' => ':attribute :format düzenine uymuyor.',
'different' => ':attribute ve :other farklı olmalı.',
'digits' => ':attribute :digits haneli olmalıdır.',
'digits_between' => ':attribute :min ile :max arası haneli olmalıdır.',
'dimensions' => ':attribute resim boyutları geçersiz.',
'distinct' => ':attribute alan değeri zaten mevcut.',
'email' => ':attribute geçerli bir eposta adresi olmalıdır.',
'exists' => 'Seçili :attribute geçersiz.',
'file' => ':attribute dosya olmalıdır.',
'filled' => ':attribute alanı değer içermelidir.',
'image' => ':attribute resim olmalıdır.',
'in' => 'Seçili :attribute geçersiz.',
'in_array' => ':attribute :other içinde bulunmalıdır.',
'integer' => ':attribute tamsayı olmalıdır.',
'ip' => ':attribute geçerli IP adresi olmalıdır.',
'ipv4' => ':attribute geçerli IPv4 adresi olmalıdır.',
'ipv6' => ':attribute geçerli IPv6 adresi olmalıdır.',
'json' => ':attribute geçerli JSON dizesi olmalıdır.',
'max' => [
'numeric' => ':attribute :max sayısından küçük olmalıdır.',
'file' => ':attribute :max kilobayttan küçük olmalıdır.',
'string' => ':attribute :max haneden az olmalıdır.',
'array' => ':attribute :max öğeden az içermelidir.',
],
'mimes' => 'Geçerli :attribute dosya tipi: :values.',
'mimetypes' => 'Geçerli :attribute dosya tipi: :values.',
'min' => [
'numeric' => ':attribute en az :min olmalıdır.',
'file' => ':attribute en az :min kilobayt olmalıdır.',
'string' => ':attribute en az :min haneli olmalıdır.',
'array' => ':attribute en az :min öğe içermelidir.',
],
'not_in' => 'Seçili :attribute geçersiz.',
'numeric' => ':attribute sayı olmalıdır.',
'present' => ':attribute alanı dolu olmalı.',
'regex' => ':attribute düzeni geçersiz.',
'required' => ':attribute alanı gereklidir.',
'required_if' => ':other :value ise :attribute alanı gereklidir.',
'required_unless' => ':other :values içinde değilse :attribute alanı gereklidir.',
'required_with' => ':values dolu ise :attribute alanı gereklidir.',
'required_with_all' => ':values dolu ise :attribute alanı gereklidir.',
'required_without' => ':values boş ise :attribute alanı gereklidir.',
'required_without_all' => ':values değerlerinin tamamı boş ise :attribute alanı gereklidir.',
'same' => ':attribute ve :other aynı olmalı.',
'size' => [
'numeric' => ':attribute :size olmalıdır.',
'file' => ':attribute :size kilobayt olmalıdır.',
'string' => ':attribute :size haneli olmalıdır.',
'array' => ':attribute :size öğe içermelidir.',
],
'string' => ':attribute dize olmalıdır.',
'timezone' => ':attribute geçerli bir zaman dilimi olmalıdır.',
'unique' => ':attribute zaten kullanımda.',
'uploaded' => ':attribute yüklenemedi.',
'url' => ':attribute düzeni geçersiz.',
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
|
*/
'attributes' => [],
];

View File

@@ -6,7 +6,23 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{ config('app.name') }}</title>
<link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
<link rel="icon" type="image/png" sizes="192x192" href="/android-icon-192x192.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/manifest.json">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="/ms-icon-144x144.png">
<meta name="theme-color" content="#ffffff">
<link rel="stylesheet" href="{{ mix('css/app.css') }}" type="text/css" />
</head>

View File

@@ -3,10 +3,14 @@
@if($app->icon)
<img class="app-icon" src="{{ asset('storage/'.$app->icon) }}" />
@else
<i class="fas fa-app-store-ios"></i>
<img class="app-icon" src="{{ asset('img/heimdall-icon-small.png') }}" />
@endif
<div class="title">{{ $app->title }}</div>
<div class="details">
<div class="title">{{ $app->title }}</div>
@if(isset($app->config->enabled) && ((bool)$app->config->enabled === true))
<div data-id="{{ $app->id }}" data-dataonly="{{ $app->config->dataonly or '0' }}" class="livestats-container"></div>
@endif
</div>
<a class="link" href="{{ $app->url }}"><i class="fas fa-arrow-alt-to-right"></i></a>
</div>
<a class="item-edit" href="{{ route('items.edit', $app->id) }}"><i class="fas fa-pencil"></i></a>

View File

@@ -2,7 +2,7 @@
@section('content')
{!! Form::open(array('route' => 'items.store', 'files' => true, 'method'=>'POST')) !!}
{!! Form::open(array('route' => 'items.store', 'id' => 'itemform', 'files' => true, 'method'=>'POST')) !!}
@include('items.form')
{!! Form::close() !!}

View File

@@ -2,7 +2,7 @@
@section('content')
{!! Form::model($item, ['method' => 'PATCH', 'files' => true, 'route' => ['items.update', $item->id]]) !!}
{!! Form::model($item, ['method' => 'PATCH', 'id' => 'itemform', 'files' => true, 'route' => ['items.update', $item->id]]) !!}
@include('items.form')
{!! Form::close() !!}

View File

@@ -6,32 +6,28 @@
<a href="{{ route('items.index') }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
</div>
</header>
<div class="create">
<div id="create" class="create">
{!! csrf_field() !!}
<!--<div class="input">
<label>Application name</label>
{!! Form::select('supported', \App\Item::supportedOptions(), array('placeholder' => 'Title','class' => 'form-control')) !!}
</div>-->
<div class="input">
<label>{{ __('app.apps.application_name') }} *</label>
{!! Form::text('title', null, array('placeholder' => __('app.apps.title'), 'id' => 'appname', 'class' => 'form-control')) !!}
<hr />
<label>{{ strtoupper(__('app.url')) }}</label>
{!! Form::text('url', null, array('placeholder' => __('app.url'),'class' => 'form-control')) !!}
{!! Form::text('url', null, array('placeholder' => __('app.url'), 'id' => 'appurl', 'class' => 'form-control')) !!}
</div>
<div class="input">
<label>{{ __('app.apps.colour') }} *</label>
{!! Form::text('colour', null, array('placeholder' => __('app.apps.hex'),'class' => 'form-control color-picker')) !!}
<hr />
<label>{{ __('app.apps.pinned') }}</label>
{!! Form::hidden('pinned', '0') !!}
<label class="switch">
<?php
$checked = false;
if(isset($item->pinned) && (bool)$item->pinned === true) $checked = true;
$set_checked = ($checked) ? ' checked="checked"' : '';
?>
{!! Form::hidden('pinned', '0') !!}
?>
<input type="checkbox" name="pinned" value="1"<?php echo $set_checked;?> />
<span class="slider round"></span>
</label>
@@ -51,7 +47,7 @@
</div>
<div class="upload-btn-wrapper">
<button class="btn">{{ __('app.buttons.upload')}} </button>
<input type="file" name="myfile" />
<input type="file" name="file" />
</div>
</div>
</div>

View File

@@ -1,12 +1,15 @@
<h2>{{ __('app.apps.config') }} ({{ __('app.optional') }})</h2>
<div class="items">
<input type="hidden" name="config[type]" value="\App\SupportedApps\Nzbget" />
<input type="hidden" data-config="type" class="config-item" name="config[type]" value="\App\SupportedApps\Nzbget" />
<div class="input">
<label>{{ __('app.apps.username') }}</label>
{!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'class' => 'form-control')) !!}
{!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!}
</div>
<div class="input">
<label>{{ __('app.apps.password') }}</label>
{!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'class' => 'form-control')) !!}
{!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!}
</div>
<div class="input">
<button style="margin-top: 32px;" class="btn test" id="test_config">Test</button>
</div>
</div>

View File

@@ -0,0 +1,21 @@
<h2>{{ __('app.apps.config') }} ({{ __('app.optional') }})</h2>
<div class="items">
<input type="hidden" data-config="type" class="config-item" name="config[type]" value="\App\SupportedApps\Pihole" />
<input type="hidden" data-config="dataonly" class="config-item" name="config[dataonly]" value="1" />
<div class="input">
<label>{{ __('app.apps.enable') }}</label>
{!! Form::hidden('config[enabled]', '0') !!}
<label class="switch">
<?php
$checked = false;
if(isset($item->config->enabled) && (bool)$item->config->enabled === true) $checked = true;
$set_checked = ($checked) ? ' checked="checked"' : '';
?>
<input type="checkbox" name="config[enabled]" value="1"<?php echo $set_checked;?> />
<span class="slider round"></span>
</label>
</div>
<div class="input">
<button style="margin-top: 32px;" class="btn test" id="test_config">Test</button>
</div>
</div>

View File

@@ -0,0 +1,11 @@
<h2>{{ __('app.apps.config') }} ({{ __('app.optional') }})</h2>
<div class="items">
<input type="hidden" data-config="type" class="config-item" name="config[type]" value="\App\SupportedApps\Sabnzbd" />
<div class="input">
<label>{{ __('app.apps.apikey') }}</label>
{!! Form::text('config[apikey]', null, array('placeholder' => __('app.apps.apikey'), 'data-config' => 'apikey', 'class' => 'form-control config-item')) !!}
</div>
<div class="input">
<button style="margin-top: 32px;" class="btn test" id="test_config">Test</button>
</div>
</div>

View File

@@ -23,6 +23,8 @@ Route::get('items/pintoggle/{id}/{ajax?}', 'ItemController@pinToggle')->name('it
Route::post('order', 'ItemController@setOrder')->name('items.order');
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('view/{name_view}', function ($name_view) {
return view('supportedapps.'.$name_view);

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

View File

@@ -30,8 +30,15 @@ return array(
'App\\Setting' => $baseDir . '/app/Setting.php',
'App\\SettingGroup' => $baseDir . '/app/SettingGroup.php',
'App\\SupportedApps\\Contracts\\Applications' => $baseDir . '/app/SupportedApps/Contracts/Applications.php',
'App\\SupportedApps\\Contracts\\Livestats' => $baseDir . '/app/SupportedApps/Contracts/Livestats.php',
'App\\SupportedApps\\Duplicati' => $baseDir . '/app/SupportedApps/Duplicati.php',
'App\\SupportedApps\\Emby' => $baseDir . '/app/SupportedApps/Emby.php',
'App\\SupportedApps\\Nzbget' => $baseDir . '/app/SupportedApps/Nzbget.php',
'App\\SupportedApps\\Pfsense' => $baseDir . '/app/SupportedApps/Pfsense.php',
'App\\SupportedApps\\Pihole' => $baseDir . '/app/SupportedApps/Pihole.php',
'App\\SupportedApps\\Plex' => $baseDir . '/app/SupportedApps/Plex.php',
'App\\SupportedApps\\Portainer' => $baseDir . '/app/SupportedApps/Portainer.php',
'App\\SupportedApps\\Unifi' => $baseDir . '/app/SupportedApps/Unifi.php',
'App\\User' => $baseDir . '/app/User.php',
'ArithmeticError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php',
'AssertionError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/AssertionError.php',
@@ -598,6 +605,74 @@ return array(
'File_Iterator' => $vendorDir . '/phpunit/php-file-iterator/src/Iterator.php',
'File_Iterator_Facade' => $vendorDir . '/phpunit/php-file-iterator/src/Facade.php',
'File_Iterator_Factory' => $vendorDir . '/phpunit/php-file-iterator/src/Factory.php',
'GuzzleHttp\\Client' => $vendorDir . '/guzzlehttp/guzzle/src/Client.php',
'GuzzleHttp\\ClientInterface' => $vendorDir . '/guzzlehttp/guzzle/src/ClientInterface.php',
'GuzzleHttp\\Cookie\\CookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/CookieJar.php',
'GuzzleHttp\\Cookie\\CookieJarInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php',
'GuzzleHttp\\Cookie\\FileCookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php',
'GuzzleHttp\\Cookie\\SessionCookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php',
'GuzzleHttp\\Cookie\\SetCookie' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/SetCookie.php',
'GuzzleHttp\\Exception\\BadResponseException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/BadResponseException.php',
'GuzzleHttp\\Exception\\ClientException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ClientException.php',
'GuzzleHttp\\Exception\\ConnectException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ConnectException.php',
'GuzzleHttp\\Exception\\GuzzleException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/GuzzleException.php',
'GuzzleHttp\\Exception\\RequestException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/RequestException.php',
'GuzzleHttp\\Exception\\SeekException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/SeekException.php',
'GuzzleHttp\\Exception\\ServerException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ServerException.php',
'GuzzleHttp\\Exception\\TooManyRedirectsException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php',
'GuzzleHttp\\Exception\\TransferException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/TransferException.php',
'GuzzleHttp\\HandlerStack' => $vendorDir . '/guzzlehttp/guzzle/src/HandlerStack.php',
'GuzzleHttp\\Handler\\CurlFactory' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlFactory.php',
'GuzzleHttp\\Handler\\CurlFactoryInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php',
'GuzzleHttp\\Handler\\CurlHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlHandler.php',
'GuzzleHttp\\Handler\\CurlMultiHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php',
'GuzzleHttp\\Handler\\EasyHandle' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/EasyHandle.php',
'GuzzleHttp\\Handler\\MockHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/MockHandler.php',
'GuzzleHttp\\Handler\\Proxy' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/Proxy.php',
'GuzzleHttp\\Handler\\StreamHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/StreamHandler.php',
'GuzzleHttp\\MessageFormatter' => $vendorDir . '/guzzlehttp/guzzle/src/MessageFormatter.php',
'GuzzleHttp\\Middleware' => $vendorDir . '/guzzlehttp/guzzle/src/Middleware.php',
'GuzzleHttp\\Pool' => $vendorDir . '/guzzlehttp/guzzle/src/Pool.php',
'GuzzleHttp\\PrepareBodyMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php',
'GuzzleHttp\\Promise\\AggregateException' => $vendorDir . '/guzzlehttp/promises/src/AggregateException.php',
'GuzzleHttp\\Promise\\CancellationException' => $vendorDir . '/guzzlehttp/promises/src/CancellationException.php',
'GuzzleHttp\\Promise\\Coroutine' => $vendorDir . '/guzzlehttp/promises/src/Coroutine.php',
'GuzzleHttp\\Promise\\EachPromise' => $vendorDir . '/guzzlehttp/promises/src/EachPromise.php',
'GuzzleHttp\\Promise\\FulfilledPromise' => $vendorDir . '/guzzlehttp/promises/src/FulfilledPromise.php',
'GuzzleHttp\\Promise\\Promise' => $vendorDir . '/guzzlehttp/promises/src/Promise.php',
'GuzzleHttp\\Promise\\PromiseInterface' => $vendorDir . '/guzzlehttp/promises/src/PromiseInterface.php',
'GuzzleHttp\\Promise\\PromisorInterface' => $vendorDir . '/guzzlehttp/promises/src/PromisorInterface.php',
'GuzzleHttp\\Promise\\RejectedPromise' => $vendorDir . '/guzzlehttp/promises/src/RejectedPromise.php',
'GuzzleHttp\\Promise\\RejectionException' => $vendorDir . '/guzzlehttp/promises/src/RejectionException.php',
'GuzzleHttp\\Promise\\TaskQueue' => $vendorDir . '/guzzlehttp/promises/src/TaskQueue.php',
'GuzzleHttp\\Promise\\TaskQueueInterface' => $vendorDir . '/guzzlehttp/promises/src/TaskQueueInterface.php',
'GuzzleHttp\\Psr7\\AppendStream' => $vendorDir . '/guzzlehttp/psr7/src/AppendStream.php',
'GuzzleHttp\\Psr7\\BufferStream' => $vendorDir . '/guzzlehttp/psr7/src/BufferStream.php',
'GuzzleHttp\\Psr7\\CachingStream' => $vendorDir . '/guzzlehttp/psr7/src/CachingStream.php',
'GuzzleHttp\\Psr7\\DroppingStream' => $vendorDir . '/guzzlehttp/psr7/src/DroppingStream.php',
'GuzzleHttp\\Psr7\\FnStream' => $vendorDir . '/guzzlehttp/psr7/src/FnStream.php',
'GuzzleHttp\\Psr7\\InflateStream' => $vendorDir . '/guzzlehttp/psr7/src/InflateStream.php',
'GuzzleHttp\\Psr7\\LazyOpenStream' => $vendorDir . '/guzzlehttp/psr7/src/LazyOpenStream.php',
'GuzzleHttp\\Psr7\\LimitStream' => $vendorDir . '/guzzlehttp/psr7/src/LimitStream.php',
'GuzzleHttp\\Psr7\\MessageTrait' => $vendorDir . '/guzzlehttp/psr7/src/MessageTrait.php',
'GuzzleHttp\\Psr7\\MultipartStream' => $vendorDir . '/guzzlehttp/psr7/src/MultipartStream.php',
'GuzzleHttp\\Psr7\\NoSeekStream' => $vendorDir . '/guzzlehttp/psr7/src/NoSeekStream.php',
'GuzzleHttp\\Psr7\\PumpStream' => $vendorDir . '/guzzlehttp/psr7/src/PumpStream.php',
'GuzzleHttp\\Psr7\\Request' => $vendorDir . '/guzzlehttp/psr7/src/Request.php',
'GuzzleHttp\\Psr7\\Response' => $vendorDir . '/guzzlehttp/psr7/src/Response.php',
'GuzzleHttp\\Psr7\\ServerRequest' => $vendorDir . '/guzzlehttp/psr7/src/ServerRequest.php',
'GuzzleHttp\\Psr7\\Stream' => $vendorDir . '/guzzlehttp/psr7/src/Stream.php',
'GuzzleHttp\\Psr7\\StreamDecoratorTrait' => $vendorDir . '/guzzlehttp/psr7/src/StreamDecoratorTrait.php',
'GuzzleHttp\\Psr7\\StreamWrapper' => $vendorDir . '/guzzlehttp/psr7/src/StreamWrapper.php',
'GuzzleHttp\\Psr7\\UploadedFile' => $vendorDir . '/guzzlehttp/psr7/src/UploadedFile.php',
'GuzzleHttp\\Psr7\\Uri' => $vendorDir . '/guzzlehttp/psr7/src/Uri.php',
'GuzzleHttp\\Psr7\\UriNormalizer' => $vendorDir . '/guzzlehttp/psr7/src/UriNormalizer.php',
'GuzzleHttp\\Psr7\\UriResolver' => $vendorDir . '/guzzlehttp/psr7/src/UriResolver.php',
'GuzzleHttp\\RedirectMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/RedirectMiddleware.php',
'GuzzleHttp\\RequestOptions' => $vendorDir . '/guzzlehttp/guzzle/src/RequestOptions.php',
'GuzzleHttp\\RetryMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/RetryMiddleware.php',
'GuzzleHttp\\TransferStats' => $vendorDir . '/guzzlehttp/guzzle/src/TransferStats.php',
'GuzzleHttp\\UriTemplate' => $vendorDir . '/guzzlehttp/guzzle/src/UriTemplate.php',
'Hamcrest\\Arrays\\IsArray' => $vendorDir . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArray.php',
'Hamcrest\\Arrays\\IsArrayContaining' => $vendorDir . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArrayContaining.php',
'Hamcrest\\Arrays\\IsArrayContainingInAnyOrder' => $vendorDir . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArrayContainingInAnyOrder.php',
@@ -2386,6 +2461,13 @@ return array(
'Psr\\Container\\ContainerExceptionInterface' => $vendorDir . '/psr/container/src/ContainerExceptionInterface.php',
'Psr\\Container\\ContainerInterface' => $vendorDir . '/psr/container/src/ContainerInterface.php',
'Psr\\Container\\NotFoundExceptionInterface' => $vendorDir . '/psr/container/src/NotFoundExceptionInterface.php',
'Psr\\Http\\Message\\MessageInterface' => $vendorDir . '/psr/http-message/src/MessageInterface.php',
'Psr\\Http\\Message\\RequestInterface' => $vendorDir . '/psr/http-message/src/RequestInterface.php',
'Psr\\Http\\Message\\ResponseInterface' => $vendorDir . '/psr/http-message/src/ResponseInterface.php',
'Psr\\Http\\Message\\ServerRequestInterface' => $vendorDir . '/psr/http-message/src/ServerRequestInterface.php',
'Psr\\Http\\Message\\StreamInterface' => $vendorDir . '/psr/http-message/src/StreamInterface.php',
'Psr\\Http\\Message\\UploadedFileInterface' => $vendorDir . '/psr/http-message/src/UploadedFileInterface.php',
'Psr\\Http\\Message\\UriInterface' => $vendorDir . '/psr/http-message/src/UriInterface.php',
'Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/Psr/Log/AbstractLogger.php',
'Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/Psr/Log/InvalidArgumentException.php',
'Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/Psr/Log/LogLevel.php',
@@ -2812,6 +2894,7 @@ return array(
'Symfony\\Component\\Debug\\FatalErrorHandler\\FatalErrorHandlerInterface' => $vendorDir . '/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php',
'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedFunctionFatalErrorHandler' => $vendorDir . '/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php',
'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedMethodFatalErrorHandler' => $vendorDir . '/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php',
'Symfony\\Component\\EventDispatcher\\ContainerAwareEventDispatcher' => $vendorDir . '/symfony/event-dispatcher/ContainerAwareEventDispatcher.php',
'Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcher' => $vendorDir . '/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php',
'Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcherInterface' => $vendorDir . '/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php',
'Symfony\\Component\\EventDispatcher\\Debug\\WrappedListener' => $vendorDir . '/symfony/event-dispatcher/Debug/WrappedListener.php',

View File

@@ -13,7 +13,11 @@ return array(
'2c102faa651ef8ea5874edb585946bce' => $vendorDir . '/swiftmailer/swiftmailer/lib/swift_required.php',
'e7223560d890eab89cda23685e711e2c' => $vendorDir . '/psy/psysh/src/Psy/functions.php',
'6124b4c8570aa390c21fafd04a26c69f' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php',
'a0edc8309cc5e1d60e3047b5df6b7052' => $vendorDir . '/guzzlehttp/psr7/src/functions_include.php',
'f18cc91337d49233e5754e93f3ed9ec3' => $vendorDir . '/laravelcollective/html/src/helpers.php',
'f0906e6318348a765ffb6eb24e0d0938' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/helpers.php',
'58571171fd5812e6e447dce228f52f4d' => $vendorDir . '/laravel/framework/src/Illuminate/Support/helpers.php',
'f18cc91337d49233e5754e93f3ed9ec3' => $vendorDir . '/laravelcollective/html/src/helpers.php',
'37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
'e617b14322a074392076a2f38eaf6115' => $baseDir . '/app/Helper.php',
);

View File

@@ -30,12 +30,16 @@ return array(
'Psy\\' => array($vendorDir . '/psy/psysh/src/Psy'),
'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'),
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'),
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
'PhpParser\\' => array($vendorDir . '/nikic/php-parser/lib/PhpParser'),
'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
'League\\Flysystem\\' => array($vendorDir . '/league/flysystem/src'),
'Laravel\\Tinker\\' => array($vendorDir . '/laravel/tinker/src'),
'Illuminate\\' => array($vendorDir . '/laravel/framework/src/Illuminate'),
'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'),
'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),
'Fideloper\\Proxy\\' => array($vendorDir . '/fideloper/proxy/src'),
'Faker\\' => array($vendorDir . '/fzaninotto/faker/src/Faker'),
'Egulias\\EmailValidator\\' => array($vendorDir . '/egulias/email-validator/EmailValidator'),

View File

@@ -14,9 +14,13 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'2c102faa651ef8ea5874edb585946bce' => __DIR__ . '/..' . '/swiftmailer/swiftmailer/lib/swift_required.php',
'e7223560d890eab89cda23685e711e2c' => __DIR__ . '/..' . '/psy/psysh/src/Psy/functions.php',
'6124b4c8570aa390c21fafd04a26c69f' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php',
'a0edc8309cc5e1d60e3047b5df6b7052' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/functions_include.php',
'f18cc91337d49233e5754e93f3ed9ec3' => __DIR__ . '/..' . '/laravelcollective/html/src/helpers.php',
'f0906e6318348a765ffb6eb24e0d0938' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/helpers.php',
'58571171fd5812e6e447dce228f52f4d' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/helpers.php',
'f18cc91337d49233e5754e93f3ed9ec3' => __DIR__ . '/..' . '/laravelcollective/html/src/helpers.php',
'37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',
'e617b14322a074392076a2f38eaf6115' => __DIR__ . '/../..' . '/app/Helper.php',
);
public static $prefixLengthsPsr4 = array (
@@ -64,6 +68,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'Psy\\' => 4,
'Psr\\SimpleCache\\' => 16,
'Psr\\Log\\' => 8,
'Psr\\Http\\Message\\' => 17,
'Psr\\Container\\' => 14,
'PhpParser\\' => 10,
),
@@ -80,6 +85,12 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
array (
'Illuminate\\' => 11,
),
'G' =>
array (
'GuzzleHttp\\Psr7\\' => 16,
'GuzzleHttp\\Promise\\' => 19,
'GuzzleHttp\\' => 11,
),
'F' =>
array (
'Fideloper\\Proxy\\' => 16,
@@ -207,6 +218,10 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
array (
0 => __DIR__ . '/..' . '/psr/log/Psr/Log',
),
'Psr\\Http\\Message\\' =>
array (
0 => __DIR__ . '/..' . '/psr/http-message/src',
),
'Psr\\Container\\' =>
array (
0 => __DIR__ . '/..' . '/psr/container/src',
@@ -231,6 +246,18 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
array (
0 => __DIR__ . '/..' . '/laravel/framework/src/Illuminate',
),
'GuzzleHttp\\Psr7\\' =>
array (
0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src',
),
'GuzzleHttp\\Promise\\' =>
array (
0 => __DIR__ . '/..' . '/guzzlehttp/promises/src',
),
'GuzzleHttp\\' =>
array (
0 => __DIR__ . '/..' . '/guzzlehttp/guzzle/src',
),
'Fideloper\\Proxy\\' =>
array (
0 => __DIR__ . '/..' . '/fideloper/proxy/src',
@@ -341,8 +368,15 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'App\\Setting' => __DIR__ . '/../..' . '/app/Setting.php',
'App\\SettingGroup' => __DIR__ . '/../..' . '/app/SettingGroup.php',
'App\\SupportedApps\\Contracts\\Applications' => __DIR__ . '/../..' . '/app/SupportedApps/Contracts/Applications.php',
'App\\SupportedApps\\Contracts\\Livestats' => __DIR__ . '/../..' . '/app/SupportedApps/Contracts/Livestats.php',
'App\\SupportedApps\\Duplicati' => __DIR__ . '/../..' . '/app/SupportedApps/Duplicati.php',
'App\\SupportedApps\\Emby' => __DIR__ . '/../..' . '/app/SupportedApps/Emby.php',
'App\\SupportedApps\\Nzbget' => __DIR__ . '/../..' . '/app/SupportedApps/Nzbget.php',
'App\\SupportedApps\\Pfsense' => __DIR__ . '/../..' . '/app/SupportedApps/Pfsense.php',
'App\\SupportedApps\\Pihole' => __DIR__ . '/../..' . '/app/SupportedApps/Pihole.php',
'App\\SupportedApps\\Plex' => __DIR__ . '/../..' . '/app/SupportedApps/Plex.php',
'App\\SupportedApps\\Portainer' => __DIR__ . '/../..' . '/app/SupportedApps/Portainer.php',
'App\\SupportedApps\\Unifi' => __DIR__ . '/../..' . '/app/SupportedApps/Unifi.php',
'App\\User' => __DIR__ . '/../..' . '/app/User.php',
'ArithmeticError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php',
'AssertionError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/AssertionError.php',
@@ -909,6 +943,74 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'File_Iterator' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Iterator.php',
'File_Iterator_Facade' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Facade.php',
'File_Iterator_Factory' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Factory.php',
'GuzzleHttp\\Client' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Client.php',
'GuzzleHttp\\ClientInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/ClientInterface.php',
'GuzzleHttp\\Cookie\\CookieJar' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/CookieJar.php',
'GuzzleHttp\\Cookie\\CookieJarInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php',
'GuzzleHttp\\Cookie\\FileCookieJar' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php',
'GuzzleHttp\\Cookie\\SessionCookieJar' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php',
'GuzzleHttp\\Cookie\\SetCookie' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/SetCookie.php',
'GuzzleHttp\\Exception\\BadResponseException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/BadResponseException.php',
'GuzzleHttp\\Exception\\ClientException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ClientException.php',
'GuzzleHttp\\Exception\\ConnectException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ConnectException.php',
'GuzzleHttp\\Exception\\GuzzleException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/GuzzleException.php',
'GuzzleHttp\\Exception\\RequestException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/RequestException.php',
'GuzzleHttp\\Exception\\SeekException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/SeekException.php',
'GuzzleHttp\\Exception\\ServerException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ServerException.php',
'GuzzleHttp\\Exception\\TooManyRedirectsException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php',
'GuzzleHttp\\Exception\\TransferException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/TransferException.php',
'GuzzleHttp\\HandlerStack' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/HandlerStack.php',
'GuzzleHttp\\Handler\\CurlFactory' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlFactory.php',
'GuzzleHttp\\Handler\\CurlFactoryInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php',
'GuzzleHttp\\Handler\\CurlHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlHandler.php',
'GuzzleHttp\\Handler\\CurlMultiHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php',
'GuzzleHttp\\Handler\\EasyHandle' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/EasyHandle.php',
'GuzzleHttp\\Handler\\MockHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/MockHandler.php',
'GuzzleHttp\\Handler\\Proxy' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/Proxy.php',
'GuzzleHttp\\Handler\\StreamHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/StreamHandler.php',
'GuzzleHttp\\MessageFormatter' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/MessageFormatter.php',
'GuzzleHttp\\Middleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Middleware.php',
'GuzzleHttp\\Pool' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Pool.php',
'GuzzleHttp\\PrepareBodyMiddleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php',
'GuzzleHttp\\Promise\\AggregateException' => __DIR__ . '/..' . '/guzzlehttp/promises/src/AggregateException.php',
'GuzzleHttp\\Promise\\CancellationException' => __DIR__ . '/..' . '/guzzlehttp/promises/src/CancellationException.php',
'GuzzleHttp\\Promise\\Coroutine' => __DIR__ . '/..' . '/guzzlehttp/promises/src/Coroutine.php',
'GuzzleHttp\\Promise\\EachPromise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/EachPromise.php',
'GuzzleHttp\\Promise\\FulfilledPromise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/FulfilledPromise.php',
'GuzzleHttp\\Promise\\Promise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/Promise.php',
'GuzzleHttp\\Promise\\PromiseInterface' => __DIR__ . '/..' . '/guzzlehttp/promises/src/PromiseInterface.php',
'GuzzleHttp\\Promise\\PromisorInterface' => __DIR__ . '/..' . '/guzzlehttp/promises/src/PromisorInterface.php',
'GuzzleHttp\\Promise\\RejectedPromise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/RejectedPromise.php',
'GuzzleHttp\\Promise\\RejectionException' => __DIR__ . '/..' . '/guzzlehttp/promises/src/RejectionException.php',
'GuzzleHttp\\Promise\\TaskQueue' => __DIR__ . '/..' . '/guzzlehttp/promises/src/TaskQueue.php',
'GuzzleHttp\\Promise\\TaskQueueInterface' => __DIR__ . '/..' . '/guzzlehttp/promises/src/TaskQueueInterface.php',
'GuzzleHttp\\Psr7\\AppendStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/AppendStream.php',
'GuzzleHttp\\Psr7\\BufferStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/BufferStream.php',
'GuzzleHttp\\Psr7\\CachingStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/CachingStream.php',
'GuzzleHttp\\Psr7\\DroppingStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/DroppingStream.php',
'GuzzleHttp\\Psr7\\FnStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/FnStream.php',
'GuzzleHttp\\Psr7\\InflateStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/InflateStream.php',
'GuzzleHttp\\Psr7\\LazyOpenStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/LazyOpenStream.php',
'GuzzleHttp\\Psr7\\LimitStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/LimitStream.php',
'GuzzleHttp\\Psr7\\MessageTrait' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/MessageTrait.php',
'GuzzleHttp\\Psr7\\MultipartStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/MultipartStream.php',
'GuzzleHttp\\Psr7\\NoSeekStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/NoSeekStream.php',
'GuzzleHttp\\Psr7\\PumpStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/PumpStream.php',
'GuzzleHttp\\Psr7\\Request' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Request.php',
'GuzzleHttp\\Psr7\\Response' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Response.php',
'GuzzleHttp\\Psr7\\ServerRequest' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/ServerRequest.php',
'GuzzleHttp\\Psr7\\Stream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Stream.php',
'GuzzleHttp\\Psr7\\StreamDecoratorTrait' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/StreamDecoratorTrait.php',
'GuzzleHttp\\Psr7\\StreamWrapper' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/StreamWrapper.php',
'GuzzleHttp\\Psr7\\UploadedFile' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/UploadedFile.php',
'GuzzleHttp\\Psr7\\Uri' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Uri.php',
'GuzzleHttp\\Psr7\\UriNormalizer' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/UriNormalizer.php',
'GuzzleHttp\\Psr7\\UriResolver' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/UriResolver.php',
'GuzzleHttp\\RedirectMiddleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/RedirectMiddleware.php',
'GuzzleHttp\\RequestOptions' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/RequestOptions.php',
'GuzzleHttp\\RetryMiddleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/RetryMiddleware.php',
'GuzzleHttp\\TransferStats' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/TransferStats.php',
'GuzzleHttp\\UriTemplate' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/UriTemplate.php',
'Hamcrest\\Arrays\\IsArray' => __DIR__ . '/..' . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArray.php',
'Hamcrest\\Arrays\\IsArrayContaining' => __DIR__ . '/..' . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArrayContaining.php',
'Hamcrest\\Arrays\\IsArrayContainingInAnyOrder' => __DIR__ . '/..' . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/IsArrayContainingInAnyOrder.php',
@@ -2697,6 +2799,13 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'Psr\\Container\\ContainerExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerExceptionInterface.php',
'Psr\\Container\\ContainerInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerInterface.php',
'Psr\\Container\\NotFoundExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/NotFoundExceptionInterface.php',
'Psr\\Http\\Message\\MessageInterface' => __DIR__ . '/..' . '/psr/http-message/src/MessageInterface.php',
'Psr\\Http\\Message\\RequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/RequestInterface.php',
'Psr\\Http\\Message\\ResponseInterface' => __DIR__ . '/..' . '/psr/http-message/src/ResponseInterface.php',
'Psr\\Http\\Message\\ServerRequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/ServerRequestInterface.php',
'Psr\\Http\\Message\\StreamInterface' => __DIR__ . '/..' . '/psr/http-message/src/StreamInterface.php',
'Psr\\Http\\Message\\UploadedFileInterface' => __DIR__ . '/..' . '/psr/http-message/src/UploadedFileInterface.php',
'Psr\\Http\\Message\\UriInterface' => __DIR__ . '/..' . '/psr/http-message/src/UriInterface.php',
'Psr\\Log\\AbstractLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/AbstractLogger.php',
'Psr\\Log\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/log/Psr/Log/InvalidArgumentException.php',
'Psr\\Log\\LogLevel' => __DIR__ . '/..' . '/psr/log/Psr/Log/LogLevel.php',
@@ -3123,6 +3232,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'Symfony\\Component\\Debug\\FatalErrorHandler\\FatalErrorHandlerInterface' => __DIR__ . '/..' . '/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php',
'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedFunctionFatalErrorHandler' => __DIR__ . '/..' . '/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php',
'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedMethodFatalErrorHandler' => __DIR__ . '/..' . '/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php',
'Symfony\\Component\\EventDispatcher\\ContainerAwareEventDispatcher' => __DIR__ . '/..' . '/symfony/event-dispatcher/ContainerAwareEventDispatcher.php',
'Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcher' => __DIR__ . '/..' . '/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php',
'Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcherInterface' => __DIR__ . '/..' . '/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php',
'Symfony\\Component\\EventDispatcher\\Debug\\WrappedListener' => __DIR__ . '/..' . '/symfony/event-dispatcher/Debug/WrappedListener.php',

File diff suppressed because it is too large Load Diff

View File

@@ -13,7 +13,7 @@
{"name": "Johannes Schmitt", "email": "schmittjoh@gmail.com"}
],
"require": {
"php": "^7.1"
"php": "^7.0"
},
"require-dev": {
"phpunit/phpunit": "^6.2"
@@ -22,11 +22,11 @@
"psr-4": { "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" }
},
"autoload-dev": {
"psr-4": { "Doctrine\\Tests\\Common\\Inflector\\": "tests/Doctrine/Tests/Common/Inflector" }
"psr-4": { "Doctrine\\Tests\\Common\\Inflector\\": "tests/Doctrine/Common/Inflector" }
},
"extra": {
"branch-alias": {
"dev-master": "1.3.x-dev"
"dev-master": "1.2.x-dev"
}
}
}

View File

@@ -38,7 +38,7 @@ class Inflector
/**
* Plural inflector rules.
*
* @var string[][]
* @var array
*/
private static $plural = array(
'rules' => array(
@@ -53,7 +53,6 @@ class Inflector
'/(?:([^f])fe|([lr])f)$/i' => '\1\2ves',
'/sis$/i' => 'ses',
'/([ti])um$/i' => '\1a',
'/(c)riterion$/i' => '\1riteria',
'/(p)erson$/i' => '\1eople',
'/(m)an$/i' => '\1en',
'/(c)hild$/i' => '\1hildren',
@@ -101,7 +100,6 @@ class Inflector
'ganglion' => 'ganglions',
'genie' => 'genies',
'genus' => 'genera',
'goose' => 'geese',
'graffito' => 'graffiti',
'hippopotamus' => 'hippopotami',
'hoof' => 'hoofs',
@@ -140,7 +138,6 @@ class Inflector
'tornado' => 'tornadoes',
'trilby' => 'trilbys',
'turf' => 'turfs',
'valve' => 'valves',
'volcano' => 'volcanoes',
)
);
@@ -148,7 +145,7 @@ class Inflector
/**
* Singular inflector rules.
*
* @var string[][]
* @var array
*/
private static $singular = array(
'rules' => array(
@@ -177,11 +174,9 @@ class Inflector
'/(hive)s$/i' => '\1',
'/(drive)s$/i' => '\1',
'/(dive)s$/i' => '\1',
'/(olive)s$/i' => '\1',
'/([^fo])ves$/i' => '\1fe',
'/(^analy)ses$/i' => '\1sis',
'/(analy|diagno|^ba|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i' => '\1\2sis',
'/(c)riteria$/i' => '\1riterion',
'/([ti])a$/i' => '\1um',
'/(p)eople$/i' => '\1\2erson',
'/(m)en$/i' => '\1an',
@@ -201,27 +196,21 @@ class Inflector
'.*pox',
'.*sheep',
'.*ss',
'data',
'police',
'pants',
'clothes',
),
'irregular' => array(
'abuses' => 'abuse',
'avalanches' => 'avalanche',
'caches' => 'cache',
'criteria' => 'criterion',
'curves' => 'curve',
'emphases' => 'emphasis',
'foes' => 'foe',
'geese' => 'goose',
'graves' => 'grave',
'hoaxes' => 'hoax',
'media' => 'medium',
'neuroses' => 'neurosis',
'waves' => 'wave',
'oases' => 'oasis',
'valves' => 'valve',
'caches' => 'cache',
'criteria' => 'criterion',
'curves' => 'curve',
'emphases' => 'emphasis',
'foes' => 'foe',
'hoaxes' => 'hoax',
'media' => 'medium',
'neuroses' => 'neurosis',
'waves' => 'wave',
'oases' => 'oasis',
)
);
@@ -231,18 +220,18 @@ class Inflector
* @var array
*/
private static $uninflected = array(
'.*?media', 'Amoyese', 'audio', 'bison', 'Borghese', 'bream', 'breeches',
'britches', 'buffalo', 'cantus', 'carp', 'chassis', 'clippers', 'cod', 'coitus', 'compensation', 'Congoese',
'contretemps', 'coreopsis', 'corps', 'data', 'debris', 'deer', 'diabetes', 'djinn', 'education', 'eland',
'elk', 'emoji', 'equipment', 'evidence', 'Faroese', 'feedback', 'fish', 'flounder', 'Foochowese',
'Furniture', 'furniture', 'gallows', 'Genevese', 'Genoese', 'Gilbertese', 'gold',
'headquarters', 'herpes', 'hijinks', 'Hottentotese', 'information', 'innings', 'jackanapes', 'jedi',
'Kiplingese', 'knowledge', 'Kongoese', 'love', 'Lucchese', 'Luggage', 'mackerel', 'Maltese', 'metadata',
'mews', 'moose', 'mumps', 'Nankingese', 'news', 'nexus', 'Niasese', 'nutrition', 'offspring',
'Pekingese', 'Piedmontese', 'pincers', 'Pistoiese', 'plankton', 'pliers', 'pokemon', 'police', 'Portuguese',
'proceedings', 'rabies', 'rain', 'rhinoceros', 'rice', 'salmon', 'Sarawakese', 'scissors', 'sea[- ]bass',
'series', 'Shavese', 'shears', 'sheep', 'siemens', 'species', 'staff', 'swine', 'traffic',
'trousers', 'trout', 'tuna', 'us', 'Vermontese', 'Wenchowese', 'wheat', 'whiting', 'wildebeest', 'Yengeese'
'Amoyese', 'bison', 'Borghese', 'bream', 'breeches', 'britches', 'buffalo', 'cantus',
'carp', 'chassis', 'clippers', 'cod', 'coitus', 'Congoese', 'contretemps', 'corps',
'debris', 'diabetes', 'djinn', 'eland', 'elk', 'equipment', 'Faroese', 'flounder',
'Foochowese', 'Furniture', 'gallows', 'Genevese', 'Genoese', 'Gilbertese', 'graffiti',
'headquarters', 'herpes', 'hijinks', 'Hottentotese', 'information', 'innings',
'jackanapes', 'Kiplingese', 'Kongoese', 'Lucchese', 'Luggage', 'mackerel', 'Maltese', '.*?media',
'mews', 'moose', 'mumps', 'Nankingese', 'news', 'nexus', 'Niasese',
'Pekingese', 'Piedmontese', 'pincers', 'Pistoiese', 'pliers', 'Portuguese',
'proceedings', 'rabies', 'rice', 'rhinoceros', 'salmon', 'Sarawakese', 'scissors',
'sea[- ]bass', 'series', 'Shavese', 'shears', 'siemens', 'species', 'staff', 'swine',
'testes', 'trousers', 'trout', 'tuna', 'Vermontese', 'Wenchowese', 'whiting',
'wildebeest', 'Yengeese'
);
/**
@@ -261,24 +250,36 @@ class Inflector
/**
* Converts a word into the format for a Doctrine table name. Converts 'ModelName' to 'model_name'.
*
* @param string $word The word to tableize.
*
* @return string The tableized word.
*/
public static function tableize(string $word) : string
public static function tableize($word)
{
return strtolower(preg_replace('~(?<=\\w)([A-Z])~', '_$1', $word));
}
/**
* Converts a word into the format for a Doctrine class name. Converts 'table_name' to 'TableName'.
*
* @param string $word The word to classify.
*
* @return string The classified word.
*/
public static function classify(string $word) : string
public static function classify($word)
{
return str_replace([' ', '_', '-'], '', ucwords($word, ' _-'));
return str_replace(' ', '', ucwords(strtr($word, '_-', ' ')));
}
/**
* Camelizes a word. This uses the classify() method and turns the first character to lowercase.
*
* @param string $word The word to camelize.
*
* @return string The camelized word.
*/
public static function camelize(string $word) : string
public static function camelize($word)
{
return lcfirst(self::classify($word));
}
@@ -287,7 +288,7 @@ class Inflector
* Uppercases words with configurable delimeters between words.
*
* Takes a string and capitalizes all of the words, like PHP's built-in
* ucwords function. This extends that behavior, however, by allowing the
* ucwords function. This extends that behavior, however, by allowing the
* word delimeters to be configured, rather than only separating on
* whitespace.
*
@@ -308,16 +309,24 @@ class Inflector
*
* @return string The string with all delimeter-separated words capitalized.
*/
public static function ucwords(string $string, string $delimiters = " \n\t\r\0\x0B-") : string
public static function ucwords($string, $delimiters = " \n\t\r\0\x0B-")
{
return ucwords($string, $delimiters);
return preg_replace_callback(
'/[^' . preg_quote($delimiters, '/') . ']+/',
function($matches) {
return ucfirst($matches[0]);
},
$string
);
}
/**
* Clears Inflectors inflected value caches, and resets the inflection
* rules to the initial values.
*
* @return void
*/
public static function reset() : void
public static function reset()
{
if (empty(self::$initialState)) {
self::$initialState = get_class_vars('Inflector');
@@ -326,7 +335,7 @@ class Inflector
}
foreach (self::$initialState as $key => $val) {
if ($key !== 'initialState') {
if ($key != 'initialState') {
self::${$key} = $val;
}
}
@@ -346,14 +355,14 @@ class Inflector
* ));
* }}}
*
* @param string $type The type of inflection, either 'plural' or 'singular'
* @param array|iterable $rules An array of rules to be added.
* @param boolean $reset If true, will unset default inflections for all
* new rules that are being defined in $rules.
* @param string $type The type of inflection, either 'plural' or 'singular'
* @param array $rules An array of rules to be added.
* @param boolean $reset If true, will unset default inflections for all
* new rules that are being defined in $rules.
*
* @return void
*/
public static function rules(string $type, iterable $rules, bool $reset = false) : void
public static function rules($type, $rules, $reset = false)
{
foreach ($rules as $rule => $pattern) {
if ( ! is_array($pattern)) {
@@ -391,7 +400,7 @@ class Inflector
*
* @return string The word in plural form.
*/
public static function pluralize(string $word) : string
public static function pluralize($word)
{
if (isset(self::$cache['pluralize'][$word])) {
return self::$cache['pluralize'][$word];
@@ -411,7 +420,7 @@ class Inflector
}
if (preg_match('/(.*)\\b(' . self::$plural['cacheIrregular'] . ')$/i', $word, $regs)) {
self::$cache['pluralize'][$word] = $regs[1] . $word[0] . substr(self::$plural['merged']['irregular'][strtolower($regs[2])], 1);
self::$cache['pluralize'][$word] = $regs[1] . substr($word, 0, 1) . substr(self::$plural['merged']['irregular'][strtolower($regs[2])], 1);
return self::$cache['pluralize'][$word];
}
@@ -438,7 +447,7 @@ class Inflector
*
* @return string The word in singular form.
*/
public static function singularize(string $word) : string
public static function singularize($word)
{
if (isset(self::$cache['singularize'][$word])) {
return self::$cache['singularize'][$word];
@@ -459,12 +468,12 @@ class Inflector
}
if (!isset(self::$singular['cacheUninflected']) || !isset(self::$singular['cacheIrregular'])) {
self::$singular['cacheUninflected'] = '(?:' . implode('|', self::$singular['merged']['uninflected']) . ')';
self::$singular['cacheIrregular'] = '(?:' . implode('|', array_keys(self::$singular['merged']['irregular'])) . ')';
self::$singular['cacheUninflected'] = '(?:' . join('|', self::$singular['merged']['uninflected']) . ')';
self::$singular['cacheIrregular'] = '(?:' . join('|', array_keys(self::$singular['merged']['irregular'])) . ')';
}
if (preg_match('/(.*)\\b(' . self::$singular['cacheIrregular'] . ')$/i', $word, $regs)) {
self::$cache['singularize'][$word] = $regs[1] . $word[0] . substr(self::$singular['merged']['irregular'][strtolower($regs[2])], 1);
self::$cache['singularize'][$word] = $regs[1] . substr($word, 0, 1) . substr(self::$singular['merged']['irregular'][strtolower($regs[2])], 1);
return self::$cache['singularize'][$word];
}

View File

@@ -0,0 +1,5 @@
phpunit.xml
composer.lock
build
vendor
coverage.clover

View File

@@ -0,0 +1,46 @@
before_commands:
- "composer install --prefer-source"
tools:
external_code_coverage:
timeout: 600
php_code_coverage:
enabled: true
test_command: ./vendor/bin/phpunit
php_code_sniffer:
enabled: true
config:
standard: PSR2
filter:
paths: ["src/*", "tests/*"]
php_cpd:
enabled: true
excluded_dirs: ["build/*", "tests", "vendor"]
php_cs_fixer:
enabled: true
config:
level: all
filter:
paths: ["src/*", "tests/*"]
php_loc:
enabled: true
excluded_dirs: ["build", "tests", "vendor"]
php_mess_detector:
enabled: true
config:
ruleset: phpmd.xml.dist
design_rules: { eval_expression: false }
filter:
paths: ["src/*"]
php_pdepend:
enabled: true
excluded_dirs: ["build", "tests", "vendor"]
php_analyzer:
enabled: true
filter:
paths: ["src/*", "tests/*"]
php_hhvm:
enabled: true
filter:
paths: ["src/*", "tests/*"]
sensiolabs_security_checker: true

View File

@@ -0,0 +1,14 @@
#!/bin/sh
set -x
if [ "$TRAVIS_PHP_VERSION" = 'hhvm' ] || [ "$TRAVIS_PHP_VERSION" = 'hhvm-nightly' ] ; then
curl -sS https://getcomposer.org/installer > composer-installer.php
hhvm composer-installer.php
hhvm -v ResourceLimit.SocketDefaultTimeout=30 -v Http.SlowQueryThreshold=30000 composer.phar update --prefer-source
elif [ "$TRAVIS_PHP_VERSION" = '5.3.3' ] ; then
composer self-update
composer update --prefer-source --no-dev
composer dump-autoload
else
composer self-update
composer update --prefer-source
fi

View File

@@ -0,0 +1,22 @@
language: php
php:
- 5.3.3
- 5.3
- 5.4
- 5.5
- 5.6
- hhvm
before_script:
- ./.travis.install.sh
- if [ $TRAVIS_PHP_VERSION = '5.6' ]; then PHPUNIT_FLAGS="--coverage-clover coverage.clover"; else PHPUNIT_FLAGS=""; fi
script:
- if [ $TRAVIS_PHP_VERSION = '5.3.3' ]; then phpunit; fi
- if [ $TRAVIS_PHP_VERSION != '5.3.3' ]; then ./vendor/bin/phpunit $PHPUNIT_FLAGS; fi
- if [ $TRAVIS_PHP_VERSION != '5.3.3' ]; then ./vendor/bin/phpcs --standard=PSR2 ./src/ ./tests/; fi
- if [[ $TRAVIS_PHP_VERSION != '5.3.3' && $TRAVIS_PHP_VERSION != '5.4.29' && $TRAVIS_PHP_VERSION != '5.5.13' ]]; then php -n ./vendor/bin/athletic -p ./tests/DoctrineTest/InstantiatorPerformance/ -f GroupedFormatter; fi
after_script:
- if [ $TRAVIS_PHP_VERSION = '5.6' ]; then wget https://scrutinizer-ci.com/ocular.phar; php ocular.phar code-coverage:upload --format=php-clover coverage.clover; fi

View File

@@ -27,7 +27,7 @@ itself:
```php
$instantiator = new \Doctrine\Instantiator\Instantiator();
$instance = $instantiator->instantiate(\My\ClassName\Here::class);
$instance = $instantiator->instantiate('My\\ClassName\\Here');
```
## Contributing

View File

@@ -16,13 +16,13 @@
}
],
"require": {
"php": "^7.1"
"php": ">=5.3,<8.0-DEV"
},
"require-dev": {
"ext-phar": "*",
"ext-pdo": "*",
"phpunit/phpunit": "^6.2.3",
"squizlabs/php_codesniffer": "^3.0.2",
"phpunit/phpunit": "~4.0",
"squizlabs/php_codesniffer": "~2.0",
"athletic/athletic": "~0.1.8"
},
"autoload": {
@@ -39,7 +39,7 @@
},
"extra": {
"branch-alias": {
"dev-master": "1.2.x-dev"
"dev-master": "1.0.x-dev"
}
}
}

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8" ?>
<ruleset
name="Instantiator rules"
xmlns="http://pmd.sf.net/ruleset/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd"
>
<rule ref="rulesets/cleancode.xml">
<!-- static access is used for caching purposes -->
<exclude name="StaticAccess"/>
</rule>
<rule ref="rulesets/codesize.xml"/>
<rule ref="rulesets/controversial.xml"/>
<rule ref="rulesets/design.xml"/>
<rule ref="rulesets/naming.xml"/>
<rule ref="rulesets/unusedcode.xml"/>
<rule
name="NPathComplexity"
message="The {0} {1}() has an NPath complexity of {2}. The configured NPath complexity threshold is {3}."
class="PHP_PMD_Rule_Design_NpathComplexity"
>
<properties>
<property name="minimum" description="The npath reporting threshold" value="10"/>
</properties>
</rule>
</ruleset>

Some files were not shown because too many files have changed in this diff Show More