Compare commits
106 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
effafe7b2d | ||
|
|
a2aac1f33c | ||
|
|
7c30f0c236 | ||
|
|
39c71b6f26 | ||
|
|
bc5c1ebb1e | ||
|
|
800470f7fa | ||
|
|
a0195e2e08 | ||
|
|
f60aee8072 | ||
|
|
92b54d18a9 | ||
|
|
aeae6a6ebe | ||
|
|
cf674629cb | ||
|
|
650ba498e1 | ||
|
|
8cbd6b7001 | ||
|
|
096ceb47ea | ||
|
|
d0708ea8fb | ||
|
|
d299e1dbb9 | ||
|
|
ee96a2c625 | ||
|
|
4c8477c4a9 | ||
|
|
aa97c8fd3a | ||
|
|
995eb6b557 | ||
|
|
7f0a33e36a | ||
|
|
2100075972 | ||
|
|
6735401302 | ||
|
|
443e18e84f | ||
|
|
679313e58c | ||
|
|
3b817c20fa | ||
|
|
5baedc39bc | ||
|
|
11177b73a5 | ||
|
|
83263c0b1b | ||
|
|
076d51c6eb | ||
|
|
18e1d962b8 | ||
|
|
989989bda7 | ||
|
|
5c5f204545 | ||
|
|
40e7431b98 | ||
|
|
6a933ffc1d | ||
|
|
a79d47f161 | ||
|
|
887e5c9d49 | ||
|
|
309eb4ac33 | ||
|
|
67f4590942 | ||
|
|
fcadb2443e | ||
|
|
9776825506 | ||
|
|
ee089d0761 | ||
|
|
19e739196c | ||
|
|
a6484b801c | ||
|
|
d07fb5ea99 | ||
|
|
095c4f5181 | ||
|
|
0c7842a3d6 | ||
|
|
01ac523e60 | ||
|
|
6feff6441e | ||
|
|
7229d32e8b | ||
|
|
bbd85d2516 | ||
|
|
803ab459b1 | ||
|
|
256648e682 | ||
|
|
758599804c | ||
|
|
b2dd3f803e | ||
|
|
912c6512fb | ||
|
|
fff44f4681 | ||
|
|
79f4a6cc07 | ||
|
|
b910a933fb | ||
|
|
e0d08c60d0 | ||
|
|
33394c2f07 | ||
|
|
4fc2bbd1af | ||
|
|
e4e815dc40 | ||
|
|
482831b9f9 | ||
|
|
30aea8e361 | ||
|
|
dfc3c2194c | ||
|
|
7376aef136 | ||
|
|
18a45863bd | ||
|
|
9c5cf150e7 | ||
|
|
c08dcab1d8 | ||
|
|
c9d9d50fa0 | ||
|
|
9bb0304620 | ||
|
|
7b5bc24a6d | ||
|
|
1d390d7966 | ||
|
|
528b317552 | ||
|
|
116ff2dd46 | ||
|
|
3d8483f9bb | ||
|
|
6d1d723df2 | ||
|
|
3a93b4f0e1 | ||
|
|
f7286bb38f | ||
|
|
764222c901 | ||
|
|
6409e291be | ||
|
|
cb719be3ad | ||
|
|
dce553c587 | ||
|
|
3ab91cc0e1 | ||
|
|
6adbcb8d1c | ||
|
|
211da7cb09 | ||
|
|
beb12147e0 | ||
|
|
0f3087ab7d | ||
|
|
a5e99545d7 | ||
|
|
a8a7e56da7 | ||
|
|
57ac6bc680 | ||
|
|
70bce9869a | ||
|
|
3e4617e37d | ||
|
|
3a3446151e | ||
|
|
fd5ca1914c | ||
|
|
ade028767a | ||
|
|
983cf98b9e | ||
|
|
3e02d92105 | ||
|
|
0cd8f551a1 | ||
|
|
bd8bac162f | ||
|
|
91ecd03c4e | ||
|
|
5a0321cd4f | ||
|
|
b9d212ed58 | ||
|
|
83f2a81e91 | ||
|
|
3f20fe75c6 |
2
.gitignore
vendored
@@ -8,3 +8,5 @@ Homestead.json
|
||||
Homestead.yaml
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
|
||||
storage/app/public/.DS_Store
|
||||
|
||||
46
CHANGELOG.md
@@ -1,5 +1,51 @@
|
||||
# Release Notes
|
||||
|
||||
## 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
|
||||
|
||||
### Fixed
|
||||
- Bottom of button too short in some browsers
|
||||
- Icon not loading back in when required fields not filled in
|
||||
|
||||
|
||||
## v1.1.0 (2018-02-05)
|
||||
|
||||
### Added
|
||||
|
||||
12
app/Helper.php
Normal 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);
|
||||
}
|
||||
@@ -138,11 +138,18 @@ class ItemController extends Controller
|
||||
'icon' => $path
|
||||
]);
|
||||
}
|
||||
|
||||
$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','Item created successfully');
|
||||
->with('success', __('app.alert.success.item_created'));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -185,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([
|
||||
@@ -193,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','Item updated successfully');
|
||||
->with('success',__('app.alert.success.item_updated'));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -219,7 +230,7 @@ class ItemController extends Controller
|
||||
}
|
||||
|
||||
return redirect()->route('items.index')
|
||||
->with('success','Item deleted successfully');
|
||||
->with('success',__('app.alert.success.item_deleted'));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -235,6 +246,73 @@ class ItemController extends Controller
|
||||
->where('id', $id)
|
||||
->restore();
|
||||
return redirect()->route('items.index')
|
||||
->with('success','Item restored successfully');
|
||||
->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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return details for supported apps
|
||||
*
|
||||
* @return Json
|
||||
*/
|
||||
public function appload(Request $request)
|
||||
{
|
||||
$output = [];
|
||||
$app = $request->input('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;
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ class SettingsController extends Controller
|
||||
]);
|
||||
} else {
|
||||
return redirect()->route('settings.list')->with([
|
||||
'error' => 'This Setting does not exist.',
|
||||
'error' => __('app.alert.error.not_exist'),
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -74,11 +74,11 @@ class SettingsController extends Controller
|
||||
$setting->save();
|
||||
|
||||
return redirect()->route('settings.index')->with([
|
||||
'success' => 'You have successfully edited this Setting!',
|
||||
'success' => __('app.alert.success.setting_updated'),
|
||||
]);
|
||||
} else {
|
||||
return redirect()->route('settings.index')->with([
|
||||
'error' => 'This Setting does not exist.',
|
||||
'error' => __('app.alert.error.not_exist'),
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -95,7 +95,7 @@ class SettingsController extends Controller
|
||||
$setting->save();
|
||||
}
|
||||
return redirect()->route('settings.index')->with([
|
||||
'success' => 'You have successfully edited this Setting!',
|
||||
'success' => __('app.alert.success.setting_updated'),
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
@@ -13,6 +13,9 @@ class VerifyCsrfToken extends Middleware
|
||||
*/
|
||||
protected $except = [
|
||||
//
|
||||
'order'
|
||||
'order',
|
||||
'appload',
|
||||
'test_config',
|
||||
//'get_stats'
|
||||
];
|
||||
}
|
||||
|
||||
60
app/Item.php
@@ -26,8 +26,22 @@ class Item extends Model
|
||||
public static function supportedList()
|
||||
{
|
||||
return [
|
||||
'NZBGet' => App\SupportedApps\Nzbget::class,
|
||||
'Plex' => App\SupportedApps\Plex::class,
|
||||
'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,
|
||||
'Nextcloud' => \App\SupportedApps\Nextcloud::class,
|
||||
'Openhab' => \App\SupportedApps\Openhab::class,
|
||||
'Pihole' => \App\SupportedApps\Pihole::class,
|
||||
'Plex' => \App\SupportedApps\Plex::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()
|
||||
@@ -45,4 +59,46 @@ class Item extends Model
|
||||
{
|
||||
return $query->where('pinned', 1);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
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;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,16 +18,19 @@ class AppServiceProvider extends ServiceProvider
|
||||
{
|
||||
$alt_bg = '';
|
||||
|
||||
if(!is_file(database_path(env('DB_DATABASE')))) {
|
||||
if(!is_file(base_path('.env'))) {
|
||||
touch(base_path('.env'));
|
||||
Artisan::call('key:generate');
|
||||
}
|
||||
if(!is_file(database_path('app.sqlite'))) {
|
||||
// first time setup
|
||||
touch(database_path(env('DB_DATABASE')));
|
||||
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');
|
||||
}
|
||||
if(is_file(database_path(env('DB_DATABASE')))) {
|
||||
if(is_file(database_path('app.sqlite'))) {
|
||||
if(Schema::hasTable('settings')) {
|
||||
if($bg_image = Setting::fetch('background_image')) {
|
||||
$alt_bg = ' style="background-image: url('.asset('storage/'.$bg_image).')"';
|
||||
@@ -42,6 +45,12 @@ class AppServiceProvider extends ServiceProvider
|
||||
} else {
|
||||
Artisan::call('migrate', array('--path' => 'database/migrations', '--force' => true, '--seed' => true));
|
||||
}
|
||||
$lang = Setting::fetch('language');
|
||||
\App::setLocale($lang);
|
||||
|
||||
}
|
||||
if(!is_file(public_path('storage'))) {
|
||||
Artisan::call('storage:link');
|
||||
}
|
||||
view()->share('alt_bg', $alt_bg);
|
||||
|
||||
|
||||
@@ -15,6 +15,10 @@ class Setting extends Model
|
||||
*/
|
||||
protected $table = 'settings';
|
||||
|
||||
protected $fillable = [
|
||||
'id', 'group_id', 'key', 'type', 'options', 'label', 'value', 'order', 'system'
|
||||
];
|
||||
|
||||
/**
|
||||
* Tell the Model this Table doesn't support timestamps.
|
||||
*
|
||||
@@ -45,28 +49,28 @@ class Setting extends Model
|
||||
switch($this->type) {
|
||||
case 'image':
|
||||
if(!empty($this->value)) {
|
||||
$value = '<a href="'.asset('storage/'.$this->value).'" title="View" target="_blank">View</a>';
|
||||
$value = '<a href="'.asset('storage/'.$this->value).'" title="'.__('app.settings.view').'" target="_blank">'.__('app.settings.view').'</a>';
|
||||
} else {
|
||||
$value = '- not set -';
|
||||
$value = __('app.options.none');
|
||||
}
|
||||
break;
|
||||
case 'boolean':
|
||||
if((bool)$this->value === true) {
|
||||
$value = 'Yes';
|
||||
$value = __('app.options.yes');
|
||||
} else {
|
||||
$value = 'No';
|
||||
$value = __('app.options.no');
|
||||
}
|
||||
break;
|
||||
case 'select':
|
||||
if(!empty($this->value) && $this->value !== 'none') {
|
||||
$options = (array)json_decode($this->options);
|
||||
$value = $options[$this->value];
|
||||
$value = __($options[$this->value]);
|
||||
} else {
|
||||
$value = '- not set -';
|
||||
$value = __('app.options.none');
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$value = $this->value;
|
||||
$value = __($this->value);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -80,11 +84,11 @@ class Setting extends Model
|
||||
case 'image':
|
||||
$value = '';
|
||||
if(isset($this->value) && !empty($this->value)) {
|
||||
$value .= '<a class="setting-view-image" href="'.asset('storage/'.$this->value).'" title="View" target="_blank"><img src="'.asset('storage/'.$this->value).'" /></a>';
|
||||
$value .= '<a class="setting-view-image" href="'.asset('storage/'.$this->value).'" title="'.__('app.settings.view').'" target="_blank"><img src="'.asset('storage/'.$this->value).'" /></a>';
|
||||
}
|
||||
$value .= Form::file('value', ['class' => 'form-control']);
|
||||
if(isset($this->value) && !empty($this->value)) {
|
||||
$value .= '<a class="settinglink" href="'.route('settings.clear', $this->id).'" title="Remove">Reset back to default</a>';
|
||||
$value .= '<a class="settinglink" href="'.route('settings.clear', $this->id).'" title="'.__('app.settings.remove').'">'.__('app.settings.reset').'</a>';
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -93,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>';
|
||||
@@ -102,6 +106,9 @@ class Setting extends Model
|
||||
break;
|
||||
case 'select':
|
||||
$options = json_decode($this->options);
|
||||
foreach($options as $key => $opt) {
|
||||
$options->$key = __($opt);
|
||||
}
|
||||
$value = Form::select('value', $options, null, ['class' => 'form-control']);
|
||||
break;
|
||||
default:
|
||||
@@ -199,8 +206,8 @@ class Setting extends Model
|
||||
$output .= '<div class="searchform">';
|
||||
$output .= Form::open(['url' => $url, 'method' => 'get']);
|
||||
$output .= '<div class="input-container">';
|
||||
$output .= Form::text($var, null, ['class' => 'homesearch', 'placeholder' => $name.' search...']);
|
||||
$output .= '<button type="submit">Search</button>';
|
||||
$output .= Form::text($var, null, ['class' => 'homesearch', 'placeholder' => __($name).' '.__('app.settings.search').'...']);
|
||||
$output .= '<button type="submit">'.ucwords(__('app.settings.search')).'</button>';
|
||||
$output .= '</div>';
|
||||
$output .= Form::close();
|
||||
$output .= '</div>';
|
||||
|
||||
@@ -3,5 +3,7 @@
|
||||
interface Applications {
|
||||
|
||||
public function defaultColour();
|
||||
|
||||
public function icon();
|
||||
|
||||
}
|
||||
11
app/SupportedApps/Contracts/Livestats.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php namespace App\SupportedApps\Contracts;
|
||||
|
||||
interface Livestats {
|
||||
|
||||
public function configDetails();
|
||||
|
||||
public function testConfig();
|
||||
|
||||
public function executeConfig();
|
||||
|
||||
}
|
||||
12
app/SupportedApps/Duplicati.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php namespace App\SupportedApps;
|
||||
|
||||
class Duplicati implements Contracts\Applications {
|
||||
public function defaultColour()
|
||||
{
|
||||
return '#2c3744';
|
||||
}
|
||||
public function icon()
|
||||
{
|
||||
return 'supportedapps/duplicati.png';
|
||||
}
|
||||
}
|
||||
12
app/SupportedApps/Emby.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php namespace App\SupportedApps;
|
||||
|
||||
class Emby implements Contracts\Applications {
|
||||
public function defaultColour()
|
||||
{
|
||||
return '#222';
|
||||
}
|
||||
public function icon()
|
||||
{
|
||||
return 'supportedapps/emby.png';
|
||||
}
|
||||
}
|
||||
12
app/SupportedApps/Jdownloader.php
Normal 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';
|
||||
}
|
||||
}
|
||||
12
app/SupportedApps/Mcmyadmin.php
Normal 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';
|
||||
}
|
||||
}
|
||||
12
app/SupportedApps/Nextcloud.php
Normal 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';
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,80 @@
|
||||
<?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 '#ccc';
|
||||
return '#253827';
|
||||
}
|
||||
public function icon()
|
||||
{
|
||||
return 'supportedapps/nzbget.png';
|
||||
}
|
||||
public function configDetails()
|
||||
{
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
12
app/SupportedApps/Openhab.php
Normal 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';
|
||||
}
|
||||
}
|
||||
12
app/SupportedApps/Pfsense.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php namespace App\SupportedApps;
|
||||
|
||||
class Pfsense implements Contracts\Applications {
|
||||
public function defaultColour()
|
||||
{
|
||||
return '#4e4742';
|
||||
}
|
||||
public function icon()
|
||||
{
|
||||
return 'supportedapps/pfsense.png';
|
||||
}
|
||||
}
|
||||
70
app/SupportedApps/Pihole.php
Normal file
@@ -0,0 +1,70 @@
|
||||
<?php namespace App\SupportedApps;
|
||||
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
use GuzzleHttp\Client;
|
||||
|
||||
class Pihole implements Contracts\Applications, Contracts\Livestats {
|
||||
public function defaultColour()
|
||||
{
|
||||
return '#352222';
|
||||
}
|
||||
public function icon()
|
||||
{
|
||||
return 'supportedapps/pihole.png';
|
||||
}
|
||||
|
||||
public function configDetails()
|
||||
{
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -3,6 +3,10 @@
|
||||
class Plex implements Contracts\Applications {
|
||||
public function defaultColour()
|
||||
{
|
||||
return '#ccc';
|
||||
return '#222';
|
||||
}
|
||||
public function icon()
|
||||
{
|
||||
return 'supportedapps/plex.png';
|
||||
}
|
||||
}
|
||||
12
app/SupportedApps/Plexpy.php
Normal 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';
|
||||
}
|
||||
}
|
||||
12
app/SupportedApps/Plexrequests.php
Normal 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';
|
||||
}
|
||||
}
|
||||
12
app/SupportedApps/Portainer.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php namespace App\SupportedApps;
|
||||
|
||||
class Portainer implements Contracts\Applications {
|
||||
public function defaultColour()
|
||||
{
|
||||
return '#283f44';
|
||||
}
|
||||
public function icon()
|
||||
{
|
||||
return 'supportedapps/portainer.png';
|
||||
}
|
||||
}
|
||||
82
app/SupportedApps/Sabnzbd.php
Normal 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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
12
app/SupportedApps/Traefik.php
Normal 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';
|
||||
}
|
||||
}
|
||||
12
app/SupportedApps/Unifi.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php namespace App\SupportedApps;
|
||||
|
||||
class Unifi implements Contracts\Applications {
|
||||
public function defaultColour()
|
||||
{
|
||||
return '#363840';
|
||||
}
|
||||
public function icon()
|
||||
{
|
||||
return 'supportedapps/unifi.png';
|
||||
}
|
||||
}
|
||||
@@ -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
@@ -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": [],
|
||||
|
||||
@@ -14,7 +14,7 @@ return [
|
||||
*/
|
||||
|
||||
'name' => env('APP_NAME', 'Heimdall'),
|
||||
'version' => '1.1.0',
|
||||
'version' => '1.3.2',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@@ -105,7 +105,7 @@ return [
|
||||
|
|
||||
*/
|
||||
|
||||
'key' => env('APP_KEY'),
|
||||
'key' => env('APP_KEY', 'base64:I206O8ibx+GQyRE7BeOxDobn04Mfmyyc5Ptzns/C0mY='),
|
||||
|
||||
'cipher' => 'AES-256-CBC',
|
||||
|
||||
|
||||
@@ -14,29 +14,39 @@ class SettingsSeeder extends Seeder
|
||||
public function run()
|
||||
{
|
||||
// Groups
|
||||
if(!SettingGroup::find(1)) {
|
||||
if(!$setting_group = SettingGroup::find(1)) {
|
||||
$setting_group = new SettingGroup;
|
||||
$setting_group->id = 1;
|
||||
$setting_group->title = 'System';
|
||||
$setting_group->title = 'app.settings.system';
|
||||
$setting_group->order = 0;
|
||||
$setting_group->save();
|
||||
}
|
||||
if(!SettingGroup::find(2)) {
|
||||
$setting_group = new SettingGroup;
|
||||
$setting_group->id = 2;
|
||||
$setting_group->title = 'Appearance';
|
||||
$setting_group->order = 1;
|
||||
} else {
|
||||
$setting_group->title = 'app.settings.system';
|
||||
$setting_group->save();
|
||||
}
|
||||
if(!SettingGroup::find(3)) {
|
||||
if(!$setting_group = SettingGroup::find(2)) {
|
||||
$setting_group = new SettingGroup;
|
||||
$setting_group->id = 2;
|
||||
$setting_group->title = 'app.settings.appearance';
|
||||
$setting_group->order = 1;
|
||||
$setting_group->save();
|
||||
} else {
|
||||
$setting_group->title = 'app.settings.appearance';
|
||||
$setting_group->save();
|
||||
}
|
||||
if(!$setting_group = SettingGroup::find(3)) {
|
||||
$setting_group = new SettingGroup;
|
||||
$setting_group->id = 3;
|
||||
$setting_group->title = 'Miscellaneous';
|
||||
$setting_group->title = 'app.settings.miscellaneous';
|
||||
$setting_group->order = 2;
|
||||
$setting_group->save();
|
||||
} else {
|
||||
$setting_group->title = 'app.settings.miscellaneous';
|
||||
$setting_group->save();
|
||||
}
|
||||
|
||||
if($version = Setting::find(1)) {
|
||||
$version->label = 'app.settings.version';
|
||||
$version->value = config('app.version');
|
||||
$version->save();
|
||||
} else {
|
||||
@@ -45,37 +55,45 @@ class SettingsSeeder extends Seeder
|
||||
$setting->group_id = 1;
|
||||
$setting->key = 'version';
|
||||
$setting->type = 'text';
|
||||
$setting->label = 'Version';
|
||||
$setting->label = 'app.settings.version';
|
||||
$setting->value = config('app.version');
|
||||
$setting->system = true;
|
||||
$setting->save();
|
||||
}
|
||||
|
||||
if(!Setting::find(2)) {
|
||||
if(!$setting = Setting::find(2)) {
|
||||
$setting = new Setting;
|
||||
$setting->id = 2;
|
||||
$setting->group_id = 2;
|
||||
$setting->key = 'background_image';
|
||||
$setting->type = 'image';
|
||||
$setting->label = 'Background Image';
|
||||
$setting->label = 'app.settings.background_image';
|
||||
$setting->save();
|
||||
} else {
|
||||
$setting->label = 'app.settings.background_image';
|
||||
$setting->save();
|
||||
}
|
||||
if(!Setting::find(3)) {
|
||||
if(!$setting = Setting::find(3)) {
|
||||
$setting = new Setting;
|
||||
$setting->id = 3;
|
||||
$setting->group_id = 3;
|
||||
$setting->key = 'homepage_search';
|
||||
$setting->type = 'boolean';
|
||||
$setting->label = 'Homepage Search';
|
||||
$setting->label = 'app.settings.homepage_search';
|
||||
$setting->save();
|
||||
} else {
|
||||
$setting->label = 'app.settings.homepage_search';
|
||||
$setting->save();
|
||||
}
|
||||
if(!Setting::find(4)) {
|
||||
$options = json_encode([
|
||||
'none' => '- not set -',
|
||||
'google' => 'Google',
|
||||
'ddg' => 'DuckDuckGo',
|
||||
'bing' => 'Bing'
|
||||
]);
|
||||
|
||||
$options = json_encode([
|
||||
'none' => 'app.options.none',
|
||||
'google' => 'app.options.google',
|
||||
'ddg' => 'app.options.ddg',
|
||||
'bing' => 'app.options.bing'
|
||||
]);
|
||||
|
||||
if(!$setting = Setting::find(4)) {
|
||||
|
||||
$setting = new Setting;
|
||||
$setting->id = 4;
|
||||
@@ -83,9 +101,39 @@ class SettingsSeeder extends Seeder
|
||||
$setting->key = 'search_provider';
|
||||
$setting->type = 'select';
|
||||
$setting->options = $options;
|
||||
$setting->label = 'Search Provider';
|
||||
$setting->label = 'app.settings.search_provider';
|
||||
$setting->save();
|
||||
} else {
|
||||
$setting->options = $options;
|
||||
$setting->label = 'app.settings.search_provider';
|
||||
$setting->save();
|
||||
}
|
||||
|
||||
|
||||
$language_options = json_encode([
|
||||
'de' => 'Deutsch (German)',
|
||||
'en' => 'English',
|
||||
'fi' => 'Suomi (Finnish)',
|
||||
'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;
|
||||
$languages->save();
|
||||
} else {
|
||||
$setting = new Setting;
|
||||
$setting->id = 5;
|
||||
$setting->group_id = 1;
|
||||
$setting->key = 'language';
|
||||
$setting->type = 'select';
|
||||
$setting->label = 'app.settings.language';
|
||||
$setting->options = $language_options;
|
||||
$setting->value = 'en';
|
||||
$setting->save();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
BIN
public/android-icon-144x144.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/android-icon-192x192.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
public/android-icon-36x36.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
public/android-icon-48x48.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
public/android-icon-72x72.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
public/android-icon-96x96.png
Normal file
|
After Width: | Height: | Size: 7.1 KiB |
BIN
public/apple-icon-114x114.png
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
BIN
public/apple-icon-120x120.png
Normal file
|
After Width: | Height: | Size: 9.1 KiB |
BIN
public/apple-icon-144x144.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/apple-icon-152x152.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/apple-icon-180x180.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/apple-icon-57x57.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
public/apple-icon-60x60.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
public/apple-icon-72x72.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
public/apple-icon-76x76.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
public/apple-icon-precomposed.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/apple-icon.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
2
public/browserconfig.xml
Normal 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>
|
||||
224
public/css/app.css
vendored
@@ -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;
|
||||
@@ -724,7 +734,7 @@ body {
|
||||
}
|
||||
|
||||
div.create {
|
||||
padding: 30px;
|
||||
padding: 30px 15px;
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
@@ -733,7 +743,7 @@ div.create {
|
||||
}
|
||||
|
||||
div.create .input {
|
||||
width: 260px;
|
||||
width: 280px;
|
||||
margin: 20px;
|
||||
}
|
||||
|
||||
@@ -756,7 +766,7 @@ div.create .input select {
|
||||
|
||||
.app-icon {
|
||||
max-width: 60px;
|
||||
margin-right: 20px;
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
.sidenav {
|
||||
@@ -873,7 +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: #2f313a;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -882,6 +901,13 @@ input:-webkit-autofill {
|
||||
-webkit-animation-fill-mode: both;
|
||||
}
|
||||
|
||||
input:autofill {
|
||||
-webkit-animation-name: autofill;
|
||||
animation-name: autofill;
|
||||
-webkit-animation-fill-mode: both;
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
|
||||
button.link {
|
||||
border: none;
|
||||
-webkit-appearance: none;
|
||||
@@ -937,6 +963,7 @@ a.settinglink {
|
||||
-webkit-box-shadow: 0px 0px 5px 0 rgba(0, 0, 0, 0.4);
|
||||
box-shadow: 0px 0px 5px 0 rgba(0, 0, 0, 0.4);
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.searchform input {
|
||||
@@ -949,12 +976,12 @@ a.settinglink {
|
||||
|
||||
.searchform button {
|
||||
position: absolute;
|
||||
right: 14px;
|
||||
top: 14px;
|
||||
right: 0px;
|
||||
top: 0px;
|
||||
border: none;
|
||||
font-size: 16px;
|
||||
padding: 7px 15px;
|
||||
line-height: 37px;
|
||||
line-height: 38px;
|
||||
font-weight: 500;
|
||||
border-top-right-radius: 5px;
|
||||
border-bottom-right-radius: 5px;
|
||||
@@ -963,6 +990,185 @@ a.settinglink {
|
||||
background: #d64d55;
|
||||
}
|
||||
|
||||
.ui-autocomplete {
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
z-index: 1000;
|
||||
float: left;
|
||||
display: none;
|
||||
min-width: 160px;
|
||||
padding: 4px 0;
|
||||
margin: 0 0 10px 25px;
|
||||
list-style: none;
|
||||
background-color: #ffffff;
|
||||
border-color: #ccc;
|
||||
border-color: rgba(0, 0, 0, 0.2);
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-radius: 5px;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
background-clip: padding-box;
|
||||
*border-right-width: 2px;
|
||||
*border-bottom-width: 2px;
|
||||
}
|
||||
|
||||
.ui-menu-item {
|
||||
display: block;
|
||||
padding: 3px 15px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
line-height: 18px;
|
||||
color: #555555;
|
||||
white-space: nowrap;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.ui-state-hover,
|
||||
.ui-state-active {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
#appimage img {
|
||||
max-width: 150px;
|
||||
}
|
||||
|
||||
#sapconfig {
|
||||
display: none;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#sapconfig h2 {
|
||||
background: #f2f3f6;
|
||||
padding: 18px 25px;
|
||||
margin-left: -15px;
|
||||
width: calc(100% + 30px);
|
||||
/* margin-right: -30px; */
|
||||
border-top: 1px solid #dbdce3;
|
||||
border-bottom: 1px solid #dbdce3;
|
||||
font-size: 18px;
|
||||
color: #5b5b5b;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
#sapconfig .items {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
hr {
|
||||
margin: 23px 0 18px;
|
||||
height: 0;
|
||||
border-style: none;
|
||||
border-width: 0;
|
||||
border-top: 1px solid #eaeaea;
|
||||
border-bottom: 1px solid #fff;
|
||||
}
|
||||
|
||||
.upload-btn-wrapper {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.btn {
|
||||
border: none;
|
||||
color: white;
|
||||
background-color: #d64d55;
|
||||
padding: 8px 12px;
|
||||
border-radius: 8px;
|
||||
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;
|
||||
left: 0;
|
||||
top: 0;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.icon-container {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.icon-container img {
|
||||
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
|
After Width: | Height: | Size: 1.3 KiB |
BIN
public/favicon-32x32.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
public/favicon-96x96.png
Normal file
|
After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 0 B After Width: | Height: | Size: 1.1 KiB |
BIN
public/img/heimdall-icon-small.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
54
public/js/app.js
vendored
@@ -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);
|
||||
}
|
||||
});
|
||||
})();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@@ -34,11 +60,6 @@ $.when( $.ready ).then(function() {
|
||||
$("#sortable").sortable("disable");
|
||||
|
||||
|
||||
$('.color-picker').each( function( i, elem ) {
|
||||
var hueb = new Huebee( elem, {
|
||||
// options
|
||||
});
|
||||
});
|
||||
$('#app').on('click', '#config-button', function(e) {
|
||||
e.preventDefault();
|
||||
var app = $('#app');
|
||||
@@ -70,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
@@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
{
|
||||
"/css/app.css": "/css/app.css?id=2102f4e7317cba78bff5",
|
||||
"/js/app.js": "/js/app.js?id=2dffa24cf7255229e085"
|
||||
"/css/app.css": "/css/app.css?id=a571eeda02c71a01f251",
|
||||
"/js/app.js": "/js/app.js?id=b38be2e595ece6fcef81"
|
||||
}
|
||||
BIN
public/ms-icon-144x144.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/ms-icon-150x150.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/ms-icon-310x310.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
public/ms-icon-70x70.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
63
readme.md
@@ -1,22 +1,66 @@
|
||||

|
||||

|
||||
|
||||
## About
|
||||
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.
|
||||
|
||||
Heimdall is a way to organise all those links to your most used web sites and web applications in a simple way.
|
||||
|
||||
Simplicity is the key to Heimdall.
|
||||
Heimdall is an elegant solution to organise all your web applications. It’s dedicated to this purpose so you won’t 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.
|
||||
|
||||

|
||||
|
||||
## 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/
|
||||
|
||||
To create a new one, create a new folder with the ISO 3166-1 alpha-2 code as the name, copy app.php from /resources/lang/en/app.php into your new folder and replace the english strings.
|
||||
|
||||
When you are finished create a pull request.
|
||||
|
||||
Currently added languages are
|
||||
|
||||
- English
|
||||
- German
|
||||
- Finnish
|
||||
- French
|
||||
- Swedish
|
||||
- Spanish
|
||||
- Turkish
|
||||
|
||||
## Web Server Configuration
|
||||
|
||||
### Apache
|
||||
@@ -54,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
|
||||
|
||||
|
||||
54
resources/assets/js/app.js
vendored
@@ -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);
|
||||
}
|
||||
});
|
||||
})();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@@ -25,11 +51,6 @@ $.when( $.ready ).then(function() {
|
||||
$("#sortable").sortable("disable");
|
||||
|
||||
|
||||
$('.color-picker').each( function( i, elem ) {
|
||||
var hueb = new Huebee( elem, {
|
||||
// options
|
||||
});
|
||||
});
|
||||
$('#app').on('click', '#config-button', function(e) {
|
||||
e.preventDefault();
|
||||
var app = $('#app');
|
||||
@@ -61,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();
|
||||
|
||||
238
resources/assets/sass/_app.scss
vendored
@@ -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;
|
||||
@@ -393,11 +404,11 @@ body {
|
||||
}
|
||||
}
|
||||
div.create {
|
||||
padding: 30px;
|
||||
padding: 30px 15px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
.input {
|
||||
width: 260px;
|
||||
width: 280px;
|
||||
margin: 20px;
|
||||
label:not(.switch) {
|
||||
width: 100%;
|
||||
@@ -418,7 +429,7 @@ div.create {
|
||||
|
||||
.app-icon {
|
||||
max-width: 60px;
|
||||
margin-right: 20px;
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
.sidenav {
|
||||
@@ -517,17 +528,29 @@ div.create {
|
||||
}
|
||||
|
||||
@-webkit-keyframes autofill {
|
||||
to {
|
||||
background:#f5f5f5;
|
||||
color:#fff;
|
||||
}
|
||||
}
|
||||
|
||||
input:-webkit-autofill {
|
||||
-webkit-animation-name: autofill;
|
||||
-webkit-animation-fill-mode: both;
|
||||
}
|
||||
|
||||
to {
|
||||
background:#f5f5f5;
|
||||
color:$app-text;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
@keyframes autofill {
|
||||
to {
|
||||
background:#f5f5f5;
|
||||
color:$app-text;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
input:-webkit-autofill {
|
||||
-webkit-animation-name: autofill;
|
||||
-webkit-animation-fill-mode: both;
|
||||
}
|
||||
input:autofill {
|
||||
animation-name: autofill;
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
|
||||
button.link {
|
||||
border: none;
|
||||
appearance: none;
|
||||
@@ -570,7 +593,8 @@ div.create {
|
||||
background: white;
|
||||
border-radius: 5px;
|
||||
box-shadow: 0px 0px 5px 0 rgba(0,0,0,0.4);
|
||||
overflow: hidden;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
input {
|
||||
padding: 17px 15px;
|
||||
@@ -581,12 +605,12 @@ div.create {
|
||||
}
|
||||
button {
|
||||
position: absolute;
|
||||
right: 14px;
|
||||
top: 14px;
|
||||
right: 0px;
|
||||
top: 0px;
|
||||
border: none;
|
||||
font-size: 16px;
|
||||
padding: 7px 15px;
|
||||
line-height: 37px;
|
||||
line-height: 38px;
|
||||
font-weight: 500;
|
||||
border-top-right-radius: 5px;
|
||||
border-bottom-right-radius: 5px;
|
||||
@@ -594,4 +618,178 @@ div.create {
|
||||
text-transform: uppercase;
|
||||
background: $app-red;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ui-autocomplete {
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
z-index: 1000;
|
||||
float: left;
|
||||
display: none;
|
||||
min-width: 160px;
|
||||
padding: 4px 0;
|
||||
margin: 0 0 10px 25px;
|
||||
list-style: none;
|
||||
background-color: #ffffff;
|
||||
border-color: #ccc;
|
||||
border-color: rgba(0, 0, 0, 0.2);
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-webkit-background-clip: padding-box;
|
||||
-moz-background-clip: padding;
|
||||
background-clip: padding-box;
|
||||
*border-right-width: 2px;
|
||||
*border-bottom-width: 2px;
|
||||
|
||||
}
|
||||
|
||||
.ui-menu-item {
|
||||
display: block;
|
||||
padding: 3px 15px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
line-height: 18px;
|
||||
color: #555555;
|
||||
white-space: nowrap;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.ui-state-hover, .ui-state-active {
|
||||
font-weight: 700;
|
||||
|
||||
}
|
||||
|
||||
#appimage {
|
||||
img {
|
||||
max-width: 150px;
|
||||
}
|
||||
}
|
||||
|
||||
#sapconfig {
|
||||
display: none;
|
||||
width: 100%;
|
||||
h2 {
|
||||
background: #f2f3f6;
|
||||
padding: 18px 25px;
|
||||
margin-left: -15px;
|
||||
width: calc(100% + 30px);
|
||||
/* margin-right: -30px; */
|
||||
border-top: 1px solid #dbdce3;
|
||||
border-bottom: 1px solid #dbdce3;
|
||||
font-size: 18px;
|
||||
color: #5b5b5b;
|
||||
font-weight: 500;
|
||||
}
|
||||
.items {
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
hr {
|
||||
margin: 23px 0 18px;
|
||||
height: 0;
|
||||
border-style: none;
|
||||
border-width: 0;
|
||||
border-top: 1px solid #eaeaea;
|
||||
border-bottom: 1px solid #fff;
|
||||
|
||||
}
|
||||
|
||||
.upload-btn-wrapper {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.btn {
|
||||
border: none;
|
||||
color: white;
|
||||
background-color: $app-red;
|
||||
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;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.icon-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
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;
|
||||
}
|
||||
|
||||
58
resources/lang/de/app.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
return array (
|
||||
'settings.system' => 'System',
|
||||
'settings.appearance' => 'Aussehen',
|
||||
'settings.miscellaneous' => 'Sonstiges',
|
||||
'settings.version' => 'Ausführung',
|
||||
'settings.background_image' => 'Hintergrundbild',
|
||||
'settings.homepage_search' => 'Homepage Suchen',
|
||||
'settings.search_provider' => 'Suchanbieter',
|
||||
'settings.language' => 'Sprache',
|
||||
'settings.reset' => 'Zurücksetzen auf Standard zurück',
|
||||
'settings.remove' => 'Entfernen',
|
||||
'settings.search' => 'suche',
|
||||
'settings.no_items' => 'Keine Elemente gefunden',
|
||||
'settings.label' => 'Etikett',
|
||||
'settings.value' => 'Wert',
|
||||
'settings.edit' => 'Bearbeiten',
|
||||
'settings.view' => 'Ansicht',
|
||||
'options.none' => '- nicht festgelegt -',
|
||||
'options.google' => 'Google',
|
||||
'options.ddg' => 'DuckDuckGo',
|
||||
'options.bing' => 'Bing',
|
||||
'options.yes' => 'Ja',
|
||||
'options.no' => 'Nein',
|
||||
'buttons.save' => 'Speichern',
|
||||
'buttons.cancel' => 'Abbrechen',
|
||||
'buttons.add' => 'Hinzufügen',
|
||||
'buttons.upload' => 'Hochladen einer Datei',
|
||||
'dash.pin_item' => 'Element auf dem Dashboard anheften',
|
||||
'dash.no_apps' => 'Derzeit gibt es keine angeheftete Anwendungen :link1 oder :link2',
|
||||
'dash.link1' => 'Hinzufügen einer Anwendung hier',
|
||||
'dash.link2' => 'Heften Sie ein Element auf dem Armaturenbrett',
|
||||
'dash.pinned_items' => 'Angeheftete Elemente',
|
||||
'apps.app_list' => 'Anwendungsliste',
|
||||
'apps.view_trash' => 'Ansicht Papierkorb',
|
||||
'apps.add_application' => 'Anwendung hinzufügen',
|
||||
'apps.application_name' => 'Anwendungsname',
|
||||
'apps.colour' => 'Farbe',
|
||||
'apps.icon' => 'Symbol',
|
||||
'apps.pinned' => 'Festgesteckt',
|
||||
'apps.title' => 'Titel',
|
||||
'apps.hex' => 'Hex-Farbe',
|
||||
'apps.username' => 'Benutzername',
|
||||
'apps.password' => 'Passwort',
|
||||
'apps.config' => 'Konfig',
|
||||
'url' => 'Url',
|
||||
'title' => 'Titel',
|
||||
'delete' => 'Löschen',
|
||||
'optional' => 'Wahlweise',
|
||||
'restore' => 'Wiederherstellen',
|
||||
'alert.success.item_created' => 'Element erfolgreich erstellt',
|
||||
'alert.success.item_updated' => 'Artikel erfolgreich aktualisiert',
|
||||
'alert.success.item_deleted' => 'Element erfolgreich gelöscht',
|
||||
'alert.success.item_restored' => 'Element erfolgreich wiederhergestellt',
|
||||
'alert.success.setting_updated' => 'Sie haben diese Einstellung erfolgreich bearbeitet',
|
||||
'alert.error.not_exist' => 'Diese Einstellung existiert nicht.',
|
||||
);
|
||||
80
resources/lang/en/app.php
Normal file
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| App Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
*/
|
||||
|
||||
'settings.system' => 'System',
|
||||
'settings.appearance' => 'Appearance',
|
||||
'settings.miscellaneous' => 'Miscellaneous',
|
||||
|
||||
'settings.version' => 'Version',
|
||||
'settings.background_image' => 'Background Image',
|
||||
'settings.homepage_search' => 'Homepage Search',
|
||||
'settings.search_provider' => 'Search Provider',
|
||||
'settings.language' => 'Language',
|
||||
'settings.reset' => 'Reset back to default',
|
||||
'settings.remove' => 'Remove',
|
||||
'settings.search' => 'search',
|
||||
'settings.no_items' => 'No items found',
|
||||
|
||||
|
||||
'settings.label' => 'Label',
|
||||
'settings.value' => 'Value',
|
||||
'settings.edit' => 'Edit',
|
||||
'settings.view' => 'View',
|
||||
|
||||
'options.none' => '- not set -',
|
||||
'options.google' => 'Google',
|
||||
'options.ddg' => 'DuckDuckGo',
|
||||
'options.bing' => 'Bing',
|
||||
'options.yes' => 'Yes',
|
||||
'options.no' => 'No',
|
||||
|
||||
'buttons.save' => 'Save',
|
||||
'buttons.cancel' => 'Cancel',
|
||||
'buttons.add' => 'Add',
|
||||
'buttons.upload' => 'Upload a file',
|
||||
|
||||
'dash.pin_item' => 'Pin item to dashboard',
|
||||
'dash.no_apps' => 'There are currently no pinned applications, :link1 or :link2',
|
||||
'dash.link1' => 'Add an application here',
|
||||
'dash.link2' => 'Pin an item to the dash',
|
||||
'dash.pinned_items' => 'Pinned Items',
|
||||
|
||||
'apps.app_list' => 'Application list',
|
||||
'apps.view_trash' => 'View trash',
|
||||
'apps.add_application' => 'Add application',
|
||||
'apps.application_name' => 'Application name',
|
||||
'apps.colour' => 'Colour',
|
||||
'apps.icon' => 'Icon',
|
||||
'apps.pinned' => 'Pinned',
|
||||
'apps.title' => 'Title',
|
||||
'apps.hex' => 'Hex colour',
|
||||
'apps.username' => 'Username',
|
||||
'apps.password' => 'Password',
|
||||
'apps.config' => 'Config',
|
||||
'apps.apikey' => 'Api Key',
|
||||
'apps.enable' => 'Enable',
|
||||
|
||||
'url' => 'Url',
|
||||
'title' => 'Title',
|
||||
'delete' => 'Delete',
|
||||
'optional' => 'Optional',
|
||||
'restore' => 'Restore',
|
||||
|
||||
'alert.success.item_created' => 'Item created successfully',
|
||||
'alert.success.item_updated' => 'Item updated successfully',
|
||||
'alert.success.item_deleted' => 'Item deleted successfully',
|
||||
'alert.success.item_restored' => 'Item restored successfully',
|
||||
|
||||
'alert.success.setting_updated' => 'You have successfully edited this Setting',
|
||||
'alert.error.not_exist' => 'This Setting does not exist.',
|
||||
|
||||
|
||||
];
|
||||
58
resources/lang/es/app.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
return array (
|
||||
'settings.system' => 'Sistema',
|
||||
'settings.appearance' => 'Apariencia',
|
||||
'settings.miscellaneous' => 'Miscelánea',
|
||||
'settings.version' => 'Versión',
|
||||
'settings.background_image' => 'Imagen De Fondo',
|
||||
'settings.homepage_search' => 'Página De Inicio De Búsqueda',
|
||||
'settings.search_provider' => 'Proveedor de búsqueda',
|
||||
'settings.language' => 'Idioma',
|
||||
'settings.reset' => 'Restablecer a predeterminado',
|
||||
'settings.remove' => 'Quitar',
|
||||
'settings.search' => 'búsqueda',
|
||||
'settings.no_items' => 'No se encontraron elementos',
|
||||
'settings.label' => 'Etiqueta',
|
||||
'settings.value' => 'Valor',
|
||||
'settings.edit' => 'Editar',
|
||||
'settings.view' => 'Ver',
|
||||
'options.none' => '- no establecido -',
|
||||
'options.google' => 'Google',
|
||||
'options.ddg' => 'DuckDuckGo',
|
||||
'options.bing' => 'Bing',
|
||||
'options.yes' => 'Sí',
|
||||
'options.no' => 'No',
|
||||
'buttons.save' => 'Guardar',
|
||||
'buttons.cancel' => 'Cancelar',
|
||||
'buttons.add' => 'Añadir',
|
||||
'buttons.upload' => 'Cargar un archivo',
|
||||
'dash.pin_item' => 'Pin elemento al tablero',
|
||||
'dash.no_apps' => 'Actualmente no hay anclados aplicaciones :link1 o :link2',
|
||||
'dash.link1' => 'Agregue una aplicación aquí',
|
||||
'dash.link2' => 'Pin de un elemento en el tablero',
|
||||
'dash.pinned_items' => 'Elementos Anclados',
|
||||
'apps.app_list' => 'Lista de aplicaciones',
|
||||
'apps.view_trash' => 'Vista de la basura',
|
||||
'apps.add_application' => 'Agregar aplicación',
|
||||
'apps.application_name' => 'Nombre de la aplicación',
|
||||
'apps.colour' => 'Color',
|
||||
'apps.icon' => 'Icono',
|
||||
'apps.pinned' => 'Fijado',
|
||||
'apps.title' => 'Título',
|
||||
'apps.hex' => 'Hexagonal de color',
|
||||
'apps.username' => 'Nombre de usuario',
|
||||
'apps.password' => 'Contraseña',
|
||||
'apps.config' => 'Config',
|
||||
'url' => 'Url',
|
||||
'title' => 'Título',
|
||||
'delete' => 'Borrar',
|
||||
'optional' => 'Opcional',
|
||||
'restore' => 'Restaurar',
|
||||
'alert.success.item_created' => 'Elemento creado con éxito',
|
||||
'alert.success.item_updated' => 'Artículo actualizado con éxito',
|
||||
'alert.success.item_deleted' => 'Elemento eliminado correctamente',
|
||||
'alert.success.item_restored' => 'Elemento restaurado con éxito',
|
||||
'alert.success.setting_updated' => 'Ha editado con éxito esta configuración',
|
||||
'alert.error.not_exist' => 'Esta configuración no existe.',
|
||||
);
|
||||
58
resources/lang/fi/app.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
return array (
|
||||
'settings.system' => 'Järjestelmä',
|
||||
'settings.appearance' => 'Ulkonäkö',
|
||||
'settings.miscellaneous' => 'Sekalainen',
|
||||
'settings.version' => 'Versio',
|
||||
'settings.background_image' => 'Tausta Kuva',
|
||||
'settings.homepage_search' => 'Kotisivu Haku',
|
||||
'settings.search_provider' => 'Hakupalvelu',
|
||||
'settings.language' => 'Kieli',
|
||||
'settings.reset' => 'Palauta takaisin default',
|
||||
'settings.remove' => 'Poista',
|
||||
'settings.search' => 'haku',
|
||||
'settings.no_items' => 'Kohteita ei löytynyt',
|
||||
'settings.label' => 'Etiketti',
|
||||
'settings.value' => 'Arvo',
|
||||
'settings.edit' => 'Muokkaa',
|
||||
'settings.view' => 'Näkymä',
|
||||
'options.none' => '- ole asetettu -',
|
||||
'options.google' => 'Google',
|
||||
'options.ddg' => 'DuckDuckGo',
|
||||
'options.bing' => 'Bing',
|
||||
'options.yes' => 'Kyllä',
|
||||
'options.no' => 'Ei',
|
||||
'buttons.save' => 'Tallenna',
|
||||
'buttons.cancel' => 'Peruuta',
|
||||
'buttons.add' => 'Lisää',
|
||||
'buttons.upload' => 'Lataa tiedosto',
|
||||
'dash.pin_item' => 'Kiinnitä kohde kojelautaan',
|
||||
'dash.no_apps' => 'Tällä hetkellä ei ole kiinnitettyjä sovelluksia :link1 tai :link2',
|
||||
'dash.link1' => 'Lisää sovellus tähän',
|
||||
'dash.link2' => 'Kiinnitä kohde kojelautaan',
|
||||
'dash.pinned_items' => 'Kiinnitetyt Kohteet',
|
||||
'apps.app_list' => 'Sovellus luettelosta',
|
||||
'apps.view_trash' => 'Näytä roskakori',
|
||||
'apps.add_application' => 'Lisää sovellus',
|
||||
'apps.application_name' => 'Sovelluksen nimi',
|
||||
'apps.colour' => 'Väri',
|
||||
'apps.icon' => 'Kuvake',
|
||||
'apps.pinned' => 'Puristuksiin',
|
||||
'apps.title' => 'Otsikko',
|
||||
'apps.hex' => 'Hex väri',
|
||||
'apps.username' => 'Käyttäjätunnus',
|
||||
'apps.password' => 'Salasana',
|
||||
'apps.config' => 'Config',
|
||||
'url' => 'Url',
|
||||
'title' => 'Otsikko',
|
||||
'delete' => 'Poistaa',
|
||||
'optional' => 'Valinnainen',
|
||||
'restore' => 'Palauttaa',
|
||||
'alert.success.item_created' => 'Tuote luotiin onnistuneesti',
|
||||
'alert.success.item_updated' => 'Kohde on päivitetty onnistuneesti',
|
||||
'alert.success.item_deleted' => 'Kohde poistettu onnistuneesti',
|
||||
'alert.success.item_restored' => 'Tuote palautettiin onnistuneesti',
|
||||
'alert.success.setting_updated' => 'Olet muokannut tätä asetusta',
|
||||
'alert.error.not_exist' => 'Tätä asetusta ei ole olemassa.',
|
||||
);
|
||||
58
resources/lang/fr/app.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
return array (
|
||||
'settings.system' => 'Système',
|
||||
'settings.appearance' => 'Apparence',
|
||||
'settings.miscellaneous' => 'Divers',
|
||||
'settings.version' => 'Version',
|
||||
'settings.background_image' => 'Image D\'Arrière-Plan',
|
||||
'settings.homepage_search' => 'La Page D\'Accueil De Recherche',
|
||||
'settings.search_provider' => 'Fournisseur de recherche',
|
||||
'settings.language' => 'Langue',
|
||||
'settings.reset' => 'Réinitialiser aux valeurs par défaut',
|
||||
'settings.remove' => 'Supprimer',
|
||||
'settings.search' => 'chercher',
|
||||
'settings.no_items' => 'Pas d\'articles trouvés',
|
||||
'settings.label' => 'Étiquette',
|
||||
'settings.value' => 'Valeur',
|
||||
'settings.edit' => 'Modifier',
|
||||
'settings.view' => 'Vue',
|
||||
'options.none' => '- non défini -',
|
||||
'options.google' => 'Google',
|
||||
'options.ddg' => 'DuckDuckGo',
|
||||
'options.bing' => 'Bing',
|
||||
'options.yes' => 'Oui',
|
||||
'options.no' => 'Non',
|
||||
'buttons.save' => 'Enregistrer',
|
||||
'buttons.cancel' => 'Annuler',
|
||||
'buttons.add' => 'Ajouter',
|
||||
'buttons.upload' => 'Télécharger un fichier',
|
||||
'dash.pin_item' => 'Épingler l\'élément au tableau de bord',
|
||||
'dash.no_apps' => 'Il n\'existe actuellement aucun épinglé applications :link1 ou :link2',
|
||||
'dash.link1' => 'Ajouter une application ici',
|
||||
'dash.link2' => 'Pin un élément au tableau de bord',
|
||||
'dash.pinned_items' => 'Éléments épinglés',
|
||||
'apps.app_list' => 'Liste des applications',
|
||||
'apps.view_trash' => 'Voir la corbeille',
|
||||
'apps.add_application' => 'Ajouter une application',
|
||||
'apps.application_name' => 'Nom de l\'application',
|
||||
'apps.colour' => 'Couleur',
|
||||
'apps.icon' => 'Icône',
|
||||
'apps.pinned' => 'Épinglé',
|
||||
'apps.title' => 'Titre',
|
||||
'apps.hex' => 'Hexadécimal de la couleur',
|
||||
'apps.username' => 'Nom d\'utilisateur',
|
||||
'apps.password' => 'Mot de passe',
|
||||
'apps.config' => 'Config',
|
||||
'url' => 'Url',
|
||||
'title' => 'Titre',
|
||||
'delete' => 'Effacer',
|
||||
'optional' => 'Optionnel',
|
||||
'restore' => 'Restaurer',
|
||||
'alert.success.item_created' => 'Élément créé avec succès',
|
||||
'alert.success.item_updated' => 'Article mis à jour avec succès',
|
||||
'alert.success.item_deleted' => 'Élément supprimé avec succès',
|
||||
'alert.success.item_restored' => 'Élément à restaurer avec succès',
|
||||
'alert.success.setting_updated' => 'Vous avez modifié ce paramètre avec succès',
|
||||
'alert.error.not_exist' => 'Ce paramètre n\'existe pas.',
|
||||
);
|
||||
58
resources/lang/sv/app.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
return array (
|
||||
'settings.system' => 'Systemet',
|
||||
'settings.appearance' => 'Utseende',
|
||||
'settings.miscellaneous' => 'Övrigt',
|
||||
'settings.version' => 'Version',
|
||||
'settings.background_image' => 'Bakgrundsbild',
|
||||
'settings.homepage_search' => 'Startsida Sök',
|
||||
'settings.search_provider' => 'Sök Leverantör',
|
||||
'settings.language' => 'Språk',
|
||||
'settings.reset' => 'Återställ tillbaka till standard',
|
||||
'settings.remove' => 'Avlägsna',
|
||||
'settings.search' => 'sök',
|
||||
'settings.no_items' => 'Inga poster hittades',
|
||||
'settings.label' => 'Etikett',
|
||||
'settings.value' => 'Värde',
|
||||
'settings.edit' => 'Ändra',
|
||||
'settings.view' => 'Visa',
|
||||
'options.none' => '- inte sätta -',
|
||||
'options.google' => 'Google',
|
||||
'options.ddg' => 'DuckDuckGo',
|
||||
'options.bing' => 'Bing',
|
||||
'options.yes' => 'Ja',
|
||||
'options.no' => 'Nej',
|
||||
'buttons.save' => 'Spara',
|
||||
'buttons.cancel' => 'Avbryt',
|
||||
'buttons.add' => 'Lägg till',
|
||||
'buttons.upload' => 'Ladda upp en fil',
|
||||
'dash.pin_item' => 'Pin objekt till instrumentpanelen',
|
||||
'dash.no_apps' => 'Det finns för närvarande inga fästa applikationer, :link1 eller :link2',
|
||||
'dash.link1' => 'Lägg till en ansökan här',
|
||||
'dash.link2' => 'Pin-ett objekt till dash',
|
||||
'dash.pinned_items' => 'Fasta Objekt',
|
||||
'apps.app_list' => 'Applikationslista',
|
||||
'apps.view_trash' => 'Visa papperskorgen',
|
||||
'apps.add_application' => 'Lägg till applikation',
|
||||
'apps.application_name' => 'Ansökan namn',
|
||||
'apps.colour' => 'Färg',
|
||||
'apps.icon' => 'Ikonen',
|
||||
'apps.pinned' => 'Nålas',
|
||||
'apps.title' => 'Titel',
|
||||
'apps.hex' => 'Hex-färg',
|
||||
'apps.username' => 'Användarnamn',
|
||||
'apps.password' => 'Lösenord',
|
||||
'apps.config' => 'Config',
|
||||
'url' => 'Url',
|
||||
'title' => 'Titel',
|
||||
'delete' => 'Radera',
|
||||
'optional' => 'Frivillig',
|
||||
'restore' => 'Återställa',
|
||||
'alert.success.item_created' => 'Objekt som skapats',
|
||||
'alert.success.item_updated' => 'Föremålet uppdaterades framgångsrikt',
|
||||
'alert.success.item_deleted' => 'Objekt som har tagits bort',
|
||||
'alert.success.item_restored' => 'Artikeln återställdes framgångsrikt',
|
||||
'alert.success.setting_updated' => 'Du har framgångsrikt redigerat denna inställning',
|
||||
'alert.error.not_exist' => 'Denna inställning existerar inte.',
|
||||
);
|
||||
78
resources/lang/tr/app.php
Normal 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.',
|
||||
|
||||
|
||||
];
|
||||
19
resources/lang/tr/auth.php
Normal 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.',
|
||||
|
||||
];
|
||||
19
resources/lang/tr/pagination.php
Normal 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' => '« Önceki',
|
||||
'next' => 'Sonraki »',
|
||||
|
||||
];
|
||||
22
resources/lang/tr/passwords.php
Normal 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ı.",
|
||||
|
||||
];
|
||||
121
resources/lang/tr/validation.php
Normal 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' => [],
|
||||
|
||||
];
|
||||
@@ -1,4 +1,4 @@
|
||||
<?php $addclass = (isset($ajax)) ? ' active' : ''; ?>
|
||||
<section class="add-item{{ $addclass }}">
|
||||
<a id="add-item" href="">Pin item to dash</a>
|
||||
<a id="add-item" href="">{{ __('app.dash.pin_item') }}</a>
|
||||
</section>
|
||||
|
||||
@@ -6,8 +6,24 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<title>{{ config('app.name') }}</title>
|
||||
|
||||
<link rel="stylesheet" href="{{ mix('/css/app.css') }}" type="text/css" />
|
||||
<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>
|
||||
<body>
|
||||
@@ -15,7 +31,7 @@
|
||||
<nav class="sidenav">
|
||||
<a class="close-sidenav" href=""><i class="fas fa-times-circle"></i></a>
|
||||
@if(isset($all_apps))
|
||||
<h2>Pinned Items</h2>
|
||||
<h2>{{ __('app.dash.pinned_items') }}</h2>
|
||||
<ul id="pinlist">
|
||||
@foreach($all_apps as $app)
|
||||
<?php
|
||||
@@ -56,18 +72,13 @@
|
||||
|
||||
@yield('content')
|
||||
<div id="config-buttons">
|
||||
@if(!Route::is('dash'))
|
||||
<a id="dash" class="config" href="{{ route('dash') }}"><i class="fas fa-th"></i></a>
|
||||
@endif
|
||||
@if(!Request::is(['items', 'items/*']))
|
||||
<a id="items" class="config" href="{{ route('items.index') }}"><i class="fas fa-list"></i></a>
|
||||
@endif
|
||||
@if(!Request::is(['settings', 'settings/*']))
|
||||
<a id="settings" class="config" href="{{ route('settings.index') }}"><i class="fas fa-cogs"></i></a>
|
||||
@endif
|
||||
@if(Route::is('dash'))
|
||||
<a id="config-button" class="config" href=""><i class="fas fa-exchange"></i></a>
|
||||
@endif
|
||||
|
||||
<a id="dash" class="config" href="{{ route('dash') }}"><i class="fas fa-th"></i></a>
|
||||
<a id="items" class="config" href="{{ route('items.index') }}"><i class="fas fa-list"></i></a>
|
||||
<a id="settings" class="config" href="{{ route('settings.index') }}"><i class="fas fa-cogs"></i></a>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
@@ -76,7 +87,8 @@
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
|
||||
<script>!window.jQuery && document.write('<script src="/js/jquery-3.3.1.min.js"><\/script>')</script>
|
||||
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
|
||||
<script src="/js/app.js"></script>
|
||||
<script src="{{ asset('js/app.js') }}"></script>
|
||||
@yield('scripts')
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -2,8 +2,11 @@
|
||||
|
||||
@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() !!}
|
||||
|
||||
@endsection
|
||||
@section('scripts')
|
||||
@include('items.scripts')
|
||||
@endsection
|
||||
@@ -2,8 +2,11 @@
|
||||
|
||||
@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() !!}
|
||||
|
||||
@endsection
|
||||
@section('scripts')
|
||||
@include('items.scripts')
|
||||
@endsection
|
||||
@@ -1,63 +1,76 @@
|
||||
<section class="module-container">
|
||||
<header>
|
||||
<div class="section-title">Add application</div>
|
||||
<div class="section-title">{{ __('app.apps.add_application') }}</div>
|
||||
<div class="module-actions">
|
||||
<button type="submit"class="button"><i class="fa fa-save"></i><span>Save</span></button>
|
||||
<a href="{{ route('items.index') }}" class="button"><i class="fa fa-ban"></i><span>Cancel</span></a>
|
||||
<button type="submit"class="button"><i class="fa fa-save"></i><span>{{ __('app.buttons.save') }}</span></button>
|
||||
<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>Application name *</label>
|
||||
{!! Form::text('title', null, array('placeholder' => 'Title','class' => 'form-control')) !!}
|
||||
<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'), 'id' => 'appurl', 'class' => 'form-control')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<label>Colour *</label>
|
||||
{!! Form::text('colour', null, array('placeholder' => 'Hex Colour','class' => 'form-control color-picker')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<label>URL</label>
|
||||
{!! Form::text('url', null, array('placeholder' => 'Url','class' => 'form-control')) !!}
|
||||
</div>
|
||||
|
||||
<div class="input">
|
||||
<label>Icon</label>
|
||||
@if(isset($item->icon) && !empty($item->icon))
|
||||
<a href="{{ asset('storage/'.$item->icon) }}">View current icon</a>
|
||||
{!! Form::hidden('icon', $item->icon, ['class' => 'form-control']) !!}
|
||||
@endif
|
||||
<input name="file" type="file" class="form-control">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="input">
|
||||
<label>Pinned</label>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
<div class="input">
|
||||
<label>{{ __('app.apps.icon') }}</label>
|
||||
<div class="icon-container">
|
||||
<div id="appimage">
|
||||
@if(isset($item->icon) && !empty($item->icon) || old('icon'))
|
||||
<?php
|
||||
if(isset($item->icon)) $icon = $item->icon;
|
||||
else $icon = old('icon');
|
||||
?>
|
||||
<img src="{{ asset('storage/'.$icon) }}" />
|
||||
{!! Form::hidden('icon', $icon, ['class' => 'form-control']) !!}
|
||||
@endif
|
||||
</div>
|
||||
<div class="upload-btn-wrapper">
|
||||
<button class="btn">{{ __('app.buttons.upload')}} </button>
|
||||
<input type="file" name="file" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if(isset($item) && isset($item->config->view))
|
||||
<div id="sapconfig" style="display: block;">
|
||||
@if(isset($item))
|
||||
@include('supportedapps.'.$item->config->view)
|
||||
@endif
|
||||
</div>
|
||||
@else
|
||||
<div id="sapconfig"></div>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
<footer>
|
||||
<div class="section-title"> </div>
|
||||
<div class="module-actions">
|
||||
<button type="submit"class="button"><i class="fa fa-save"></i><span>Save</span></button>
|
||||
<a href="{{ route('items.index') }}" class="button"><i class="fa fa-ban"></i><span>Cancel</span></a>
|
||||
<button type="submit"class="button"><i class="fa fa-save"></i><span>{{ __('app.buttons.save') }}</span></button>
|
||||
<a href="{{ route('items.index') }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
@@ -4,24 +4,24 @@
|
||||
<section class="module-container">
|
||||
<header>
|
||||
<div class="section-title">
|
||||
Application list
|
||||
{{ __('app.apps.app_list') }}
|
||||
@if( isset($trash) && $trash->count() > 0 )
|
||||
<a class="trashed" href="{{ route('items.index', ['trash' => true]) }}">View trash ({{ $trash->count() }})</a>
|
||||
<a class="trashed" href="{{ route('items.index', ['trash' => true]) }}">{{ __('app.apps.view_trash') }} ({{ $trash->count() }})</a>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
<div class="module-actions">
|
||||
<a href="{{ route('items.create') }}" title="" class="button"><i class="fa fa-plus"></i><span>Add</span></a>
|
||||
<a href="{{ route('items.create') }}" title="" class="button"><i class="fa fa-plus"></i><span>{{ __('app.buttons.add') }}</span></a>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Title</th>
|
||||
<th>Url</th>
|
||||
<th class="text-center" width="100">Edit</th>
|
||||
<th class="text-center" width="100">Delete</th>
|
||||
<th>{{ __('app.title') }}</th>
|
||||
<th>{{ __('app.url') }}</th>
|
||||
<th class="text-center" width="100">{{ __('app.settings.edit') }}</th>
|
||||
<th class="text-center" width="100">{{ __('app.delete') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -30,7 +30,7 @@
|
||||
<tr>
|
||||
<td>{{ $app->title }}</td>
|
||||
<td><a href="{{ $app->url }}">{{ $app->url }}</a></td>
|
||||
<td class="text-center"><a href="{!! route('items.edit', $app->id) !!}" title="Edit {!! $app->title !!}"><i class="fas fa-edit"></i></a></td>
|
||||
<td class="text-center"><a href="{!! route('items.edit', $app->id) !!}" title="{{ __('app.settings.edit') }} {!! $app->title !!}"><i class="fas fa-edit"></i></a></td>
|
||||
<td class="text-center">
|
||||
{!! Form::open(['method' => 'DELETE','route' => ['items.destroy', $app->id],'style'=>'display:inline']) !!}
|
||||
<button class="link" type="submit"><i class="fa fa-trash-alt"></i></button>
|
||||
@@ -41,7 +41,7 @@
|
||||
@else
|
||||
<tr>
|
||||
<td colspan="4" class="form-error text-center">
|
||||
<strong>No items found</strong>
|
||||
<strong>{{ __('app.settings.no_items') }}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
|
||||
34
resources/views/items/scripts.blade.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<script>
|
||||
$( function() {
|
||||
|
||||
var elem = $('.color-picker')[0];
|
||||
var hueb = new Huebee( elem, {
|
||||
// options
|
||||
});
|
||||
|
||||
var availableTags = [
|
||||
<?php
|
||||
$supported = App\Item::supportedOptions();
|
||||
foreach($supported as $sapp) {
|
||||
echo '"'.$sapp.'",';
|
||||
}
|
||||
?>
|
||||
];
|
||||
$( "#appname" ).autocomplete({
|
||||
source: availableTags,
|
||||
select: function( event, ui ) {
|
||||
$.post('/appload', { app: ui.item.value }, function(data) {
|
||||
$('#appimage').html("<img src='/storage/"+data.icon+"' /><input type='hidden' name='icon' value='"+data.icon+"' />");
|
||||
$('input[name=colour]').val(data.colour);
|
||||
hueb.setColor( data.colour );
|
||||
$('input[name=pinned]').prop('checked', true);
|
||||
if(data.config != null) {
|
||||
$.get('/view/'+data.config, function(getdata) {
|
||||
$('#sapconfig').html(getdata).show();
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -7,18 +7,17 @@
|
||||
Showing Deleted Applications
|
||||
</div>
|
||||
<div class="module-actions">
|
||||
<a href="{{ route('items.index') }}" title="" class="button"><i class="fa fa-ban"></i><span>Cancel</span></a>
|
||||
<a href="{{ route('items.index') }}" title="" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Title</th>
|
||||
<th>Description</th>
|
||||
<th>{{ __('app.title') }}</th>
|
||||
<th>Url</th>
|
||||
<th class="text-center" width="100">Restore</th>
|
||||
<th class="text-center" width="100">Delete</th>
|
||||
<th class="text-center" width="100">{{ __('app.restore') }}</th>
|
||||
<th class="text-center" width="100">{{ __('app.delete') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -26,9 +25,8 @@
|
||||
@foreach($trash as $app)
|
||||
<tr>
|
||||
<td>{{ $app->title }}</td>
|
||||
<td>{{ $app->description }}</td>
|
||||
<td>{{ $app->url }}</td>
|
||||
<td class="text-center"><a href="{!! route('items.restore', $app->id) !!}" title="Restore {!! $app->title !!}"><i class="fas fa-undo"></i></a></td>
|
||||
<td>{{ __('app.url') }}</td>
|
||||
<td class="text-center"><a href="{!! route('items.restore', $app->id) !!}" title="{{ __('app.restore') }} {!! $app->title !!}"><i class="fas fa-undo"></i></a></td>
|
||||
<td class="text-center">
|
||||
{!! Form::open(['method' => 'DELETE','route' => ['items.destroy', $app->id],'style'=>'display:inline']) !!}
|
||||
<input type="hidden" name="force" value="1" />
|
||||
@@ -40,7 +38,7 @@
|
||||
@else
|
||||
<tr>
|
||||
<td colspan="5" class="form-error text-center">
|
||||
<strong>No items found</strong>
|
||||
<strong>{{ __('app.settings.no_items') }}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<section class="module-container">
|
||||
<header>
|
||||
<div class="section-title">{{ $setting->label }}</div>
|
||||
<div class="section-title">{{ __($setting->label) }}</div>
|
||||
<div class="module-actions">
|
||||
<button type="submit"class="button"><i class="fa fa-save"></i><span>Save</span></button>
|
||||
<a href="{{ route('settings.index') }}" class="button"><i class="fa fa-ban"></i><span>Cancel</span></a>
|
||||
<button type="submit"class="button"><i class="fa fa-save"></i><span>{{ __('app.buttons.save') }}</span></button>
|
||||
<a href="{{ route('settings.index') }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
|
||||
</div>
|
||||
</header>
|
||||
<div class="create">
|
||||
@@ -22,8 +22,8 @@
|
||||
<footer>
|
||||
<div class="section-title"> </div>
|
||||
<div class="module-actions">
|
||||
<button type="submit"class="button"><i class="fa fa-save"></i><span>Save</span></button>
|
||||
<a href="{{ route('settings.index') }}" class="button"><i class="fa fa-ban"></i><span>Cancel</span></a>
|
||||
<button type="submit"class="button"><i class="fa fa-save"></i><span>{{ __('app.buttons.save') }}</span></button>
|
||||
<a href="{{ route('settings.index') }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<section class="module-container">
|
||||
<header>
|
||||
<div class="section-title">
|
||||
{{ $group->title }}
|
||||
{{ __($group->title) }}
|
||||
|
||||
</div>
|
||||
</header>
|
||||
@@ -14,22 +14,22 @@
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Label</th>
|
||||
<th style="width: 60%;">Value</th>
|
||||
<th class="text-center" style="width: 75px;">Edit</th>
|
||||
<th>{{ __('app.settings.label') }}</th>
|
||||
<th style="width: 60%;">{{ __('app.settings.value') }}</th>
|
||||
<th class="text-center" style="width: 75px;">{{ __('app.settings.edit') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@if (count($group->settings) > 0)
|
||||
@foreach ($group->settings as $setting)
|
||||
<tr>
|
||||
<td>{{ $setting->label }}</td>
|
||||
<td>{{ __($setting->label) }}</td>
|
||||
<td>
|
||||
{!! $setting->list_value !!}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
@if((bool)$setting->system !== true)
|
||||
<a href="{!! route('settings.edit', ['id' => $setting->id]) !!}" title="Edit {!! $setting->label !!}" class="secondary"><i class="fa fa-pencil"></i></a>
|
||||
<a href="{!! route('settings.edit', ['id' => $setting->id]) !!}" title="{{ __('app.settings.edit') }} {!! $setting->label !!}" class="secondary"><i class="fa fa-pencil"></i></a>
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
<tr>
|
||||
<td colspan="3" class="form-error text-center">
|
||||
<strong>No items found</strong>
|
||||
<strong>{{ __('app.settings.no_items') }}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
|
||||
15
resources/views/supportedapps/nzbget.blade.php
Normal file
@@ -0,0 +1,15 @@
|
||||
<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\Nzbget" />
|
||||
<div class="input">
|
||||
<label>{{ __('app.apps.username') }}</label>
|
||||
{!! 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'), '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>
|
||||
21
resources/views/supportedapps/pihole.blade.php
Normal 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>
|
||||
11
resources/views/supportedapps/sabnzbd.blade.php
Normal 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>
|
||||
@@ -8,7 +8,11 @@
|
||||
@else
|
||||
<div class="message-container2">
|
||||
<div class="alert alert-danger">
|
||||
<p>There are currently no pinned Applications, <a href="{{ route('items.create') }}">Add an application here</a> or <a id="pin-item" href="">Pin an item to the dash</a></p>
|
||||
<p>{!! __('app.dash.no_apps',
|
||||
[
|
||||
'link1' => '<a href="'.route('items.create').'">'.__('app.dash.link1').'</a>',
|
||||
'link2' => '<a id="pin-item" href="">'.__('app.dash.link2').'</a>'
|
||||
]) !!}</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -22,6 +22,14 @@ Route::get('items/unpin/{id}', 'ItemController@unpin')->name('items.unpin');
|
||||
Route::get('items/pintoggle/{id}/{ajax?}', 'ItemController@pinToggle')->name('items.pintoggle');
|
||||
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);
|
||||
});
|
||||
|
||||
/**
|
||||
* Settings.
|
||||
*/
|
||||
|
||||
3
storage/app/.gitignore
vendored
@@ -1,3 +0,0 @@
|
||||
*
|
||||
!public/
|
||||
!.gitignore
|
||||
|
||||
4
storage/app/public/.gitignore
vendored
@@ -1,2 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
||||
backgrounds/
|
||||
icons/
|
||||
|
||||
BIN
storage/app/public/supportedapps/duplicati.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
storage/app/public/supportedapps/emby.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
storage/app/public/supportedapps/jdownloader.png
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
storage/app/public/supportedapps/mcmyadmin.png
Normal file
|
After Width: | Height: | Size: 8.9 KiB |
BIN
storage/app/public/supportedapps/nextcloud.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
storage/app/public/supportedapps/nzbget.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |