Compare commits

...

147 Commits

Author SHA1 Message Date
KodeStar
43e23b15dc update version 2018-02-15 20:33:36 +00:00
KodeStar
c8effe757b fix for nzbget on new apps 2018-02-15 20:33:07 +00:00
KodeStar
d37f4fd77b Merge pull request #84 from cheesemarathon/master
feat: added ruTorrent to supported Apps - Closes #35
2018-02-15 14:07:37 +00:00
cheesemarathon
c395cb2206 Replace with better logo 2018-02-15 14:01:18 +00:00
cheesemarathon
b6f8c612f1 Removes icon background 2018-02-15 08:36:19 +00:00
cheesemarathon
18551528ca Removes icon background 2018-02-15 08:27:34 +00:00
cheesemarathon
bbc7782f40 Adds ruTorrent 2018-02-15 08:22:37 +00:00
KodeStar
c121341911 Update readme.md 2018-02-15 08:22:14 +00:00
KodeStar
990a256e40 update version 2018-02-14 21:43:52 +00:00
KodeStar
89e3caf4f2 Closes #78 2018-02-14 20:47:49 +00:00
KodeStar
3e4a458fac Change to Pihole to close #81 2018-02-14 20:39:15 +00:00
KodeStar
25d2897fb9 Merge pull request #79 from Futos/netdata
Netdata
2018-02-14 17:10:47 +00:00
KodeStar
a2151d0b93 Merge pull request #80 from cheesemarathon/master
Fix indentation
2018-02-14 17:07:30 +00:00
KodeStar
5b9dcd829c Update Lidarr.php 2018-02-14 17:05:36 +00:00
cheesemarathon
e2e1471dfa Add Lidarr
Adds Lidarr as a foundation app
2018-02-14 13:41:10 +00:00
cheesemarathon
a664c9abe9 Fix indentation 2018-02-14 13:20:02 +00:00
Futos
0f9b1cdf25 fix(SupportedApps): fixed Item.php
Fixed Item.php because forgot to save the changes before push

Closes #65
2018-02-14 01:07:44 +01:00
Futos
7cfd6e7493 feat(SupportedApps): added Netdata like requested
#65
2018-02-14 01:04:06 +01:00
KodeStar
592f8f0831 closes #75 and adds initial support for proxmox 2018-02-13 22:46:36 +00:00
KodeStar
88c36d2b2d Fix sabnzbd api url failing if missing trailing slash 2018-02-13 18:48:42 +00:00
KodeStar
dbe5f1dfb2 Fix nzbget api url not working if missing trailing slash 2018-02-13 18:44:34 +00:00
KodeStar
1297ae7bb3 fix some foundation apps issues 2018-02-13 18:29:15 +00:00
KodeStar
ba48a45d39 Merge pull request #73 from cheesemarathon/master
Add apps
2018-02-13 17:58:50 +00:00
KodeStar
12b5de5cea Added Italian language 2018-02-13 17:39:25 +00:00
KodeStar
a7b33647ea Merge pull request #71 from Attoy/patch-1
Create resources/lang/it/app.php
2018-02-13 17:35:36 +00:00
KodeStar
3a7467e6f7 Merge pull request #74 from BiohZn/v1.2
V1.2
2018-02-13 17:33:00 +00:00
Conny Sjöblom
8c47ce9b0e Add Swedish translation 2018-02-13 19:01:39 +02:00
Conny Sjöblom
11f623cc35 Merge branch 'master' of https://github.com/linuxserver/Heimdall into v1.2 2018-02-13 18:58:12 +02:00
cheesemarathon
5365f4b867 Adjust colors 2018-02-13 15:22:38 +00:00
cheesemarathon
260a88623e Add apps
Adds jackett, radarr, sonarr and home asssistant as foundation apps
2018-02-13 15:00:59 +00:00
Attoy
2143cab1fa Create app.php
Italian translation
2018-02-13 09:50:09 +01:00
KodeStar
5be3662b35 Update readme.md 2018-02-12 22:23:14 +00:00
KodeStar
c8ab62f9fe Merge pull request #68 from aptalca/patch-1
Add reverse proxy info
2018-02-12 20:30:33 +00:00
aptalca
114c16a36f Add reverse proxy info 2018-02-12 15:22:27 -05:00
KodeStar
8ac33ceb4c Added Norwegian language 2018-02-12 18:45:26 +00:00
KodeStar
9290c20c43 Merge pull request #50 from Oisann/master
Translated most of the English language files into Norwegian.
2018-02-12 18:40:44 +00:00
Jonas Myhr Refseth
c302c26d87 Translated most of the English language files into Norwegian. The messages in validation.php could be hard to translate. 2018-02-12 19:26:31 +01:00
KodeStar
f04c6c2032 Merge pull request #44 from Futos/readme-changes
feat: added Pihole to Enhanced App
2018-02-12 17:28:42 +00:00
Futos
9d35d567ae feat: added Pihole to Enhanced App 2018-02-12 17:10:47 +01:00
KodeStar
3549ebc5b9 Merge pull request #43 from linuxserver/README_link
edit README for links to all arch's
2018-02-12 15:37:20 +00:00
sparklyballs
68c2dcf67d spacing on links 2018-02-12 15:32:19 +00:00
sparklyballs
cb4ab20249 edit README for links to all arch's 2018-02-12 15:30:33 +00:00
Chris
effafe7b2d update version number 2018-02-12 14:48:25 +00:00
Chris
a2aac1f33c Recreate storage symlink if lost 2018-02-12 14:47:12 +00:00
KodeStar
7c30f0c236 Update readme.md 2018-02-12 13:56:01 +00:00
KodeStar
39c71b6f26 Merge pull request #40 from Futos/jdownloader
feat: added Jdownloader to supported Apps - Closes #26
2018-02-12 13:30:04 +00:00
Futos
bc5c1ebb1e Merge branch 'master' into jdownloader 2018-02-12 14:28:56 +01:00
KodeStar
800470f7fa Merge pull request #39 from Futos/openhab
feat: added OpenHAB to supported Apps - Closes #30
2018-02-12 13:27:35 +00:00
KodeStar
a0195e2e08 Merge pull request #37 from Futos/mcmyadmin
feat: added Mcmyadmin as a supported App - Closes #27
2018-02-12 13:27:21 +00:00
Futos
f60aee8072 Merge branch 'master' into mcmyadmin 2018-02-12 14:25:43 +01:00
Futos
92b54d18a9 Merge branch 'master' into openhab 2018-02-12 14:25:04 +01:00
Futos
aeae6a6ebe Merge branch 'master' into jdownloader 2018-02-12 14:23:37 +01:00
KodeStar
cf674629cb Update readme.md 2018-02-12 13:04:01 +00:00
KodeStar
650ba498e1 Update readme.md 2018-02-12 12:11:04 +00:00
KodeStar
8cbd6b7001 Update readme.md 2018-02-12 10:02:34 +00:00
KodeStar
096ceb47ea Merge pull request #38 from Futos/plexrequests
feat: added Plexrequests as a supported App - Closes #29
2018-02-11 23:40:02 +00:00
KodeStar
d0708ea8fb Merge pull request #36 from Futos/traefik
feat: added Traefik as a supported App, also sorted lines alphabetically closes #28
2018-02-11 23:39:17 +00:00
Futos
d299e1dbb9 feat: added Jdownloader to supported Apps - Closes #26 2018-02-11 14:22:06 +01:00
Futos
ee96a2c625 feat: added OpenHAB to supported Apps - Closes #30 2018-02-11 14:09:54 +01:00
Futos
4c8477c4a9 feat: added Plexrequests as a supported App 2018-02-11 14:00:36 +01:00
Futos
aa97c8fd3a feat: added Mcmyadmin as a supported App - Closes #27 2018-02-11 13:41:17 +01:00
Futos
995eb6b557 feat: added Traefik as a supported App, also sorted lines alphabetically 2018-02-11 13:12:42 +01:00
KodeStar
7f0a33e36a Update readme.md 2018-02-11 00:50:13 +00:00
KodeStar
2100075972 Update readme.md 2018-02-10 23:39:30 +00:00
KodeStar
6735401302 Update readme.md 2018-02-10 23:36:09 +00:00
KodeStar
443e18e84f Change background colour for 2 added apps 2018-02-10 22:27:52 +00:00
KodeStar
679313e58c Merge pull request #23 from Futos/plexpy
feat: added Plexpy to supported Apps
2018-02-10 22:14:32 +00:00
KodeStar
3b817c20fa Merge pull request #22 from Futos/nextcloud
feat: added Nextcloud to supported Apps
2018-02-10 22:14:01 +00:00
KodeStar
5baedc39bc fix issue in some peoples browsers where input is bigger than it should be for some reason 2018-02-10 20:23:47 +00:00
Futos
11177b73a5 feat: added Plexpy to supported Apps 2018-02-09 22:06:19 +01:00
Futos
83263c0b1b feat: added Nextcloud to supported Apps 2018-02-09 21:42:47 +01:00
Futos
076d51c6eb feat: added Nextcloud to Readme 2018-02-09 21:41:50 +01:00
KodeStar
18e1d962b8 Update readme.md 2018-02-09 20:18:18 +00:00
KodeStar
989989bda7 fix uploads 2018-02-09 17:24:05 +00:00
KodeStar
5c5f204545 changed date 2018-02-09 16:35:06 +00:00
KodeStar
40e7431b98 Merge pull request #21 from linuxserver/v1.3
V1.3
2018-02-09 16:32:01 +00:00
KodeStar
6a933ffc1d Added turkish to languages 2018-02-09 16:25:45 +00:00
Chris
a79d47f161 Fix sliding checkbox in settings 2018-02-09 15:14:54 +00:00
Chris
887e5c9d49 some updates to the default colours and styling 2018-02-09 14:55:45 +00:00
Chris
309eb4ac33 update readme 2018-02-09 14:05:46 +00:00
Chris
67f4590942 added favicon and readme header 2018-02-09 14:04:18 +00:00
Chris
fcadb2443e added default image 2018-02-09 12:38:38 +00:00
Chris
9776825506 styling for test button 2018-02-09 11:30:26 +00:00
Chris
ee089d0761 Move hidden input outside of sliding checkbox to fix edge 2018-02-09 11:08:04 +00:00
Chris
19e739196c Fix dataonly for upgrades from older versions of database 2018-02-09 08:40:13 +00:00
Chris
a6484b801c Merge branch 'master' into v1.3 2018-02-09 08:28:42 +00:00
Chris
d07fb5ea99 fix undefined $view 2018-02-09 08:28:20 +00:00
KodeStar
095c4f5181 make gap between icon and text slightly smaller 2018-02-09 00:10:22 +00:00
KodeStar
0c7842a3d6 allow enabled apps to be disabled 2018-02-09 00:05:37 +00:00
KodeStar
01ac523e60 change pinhole default colour 2018-02-08 23:59:41 +00:00
KodeStar
6feff6441e updated change log 2018-02-08 23:50:35 +00:00
KodeStar
7229d32e8b Added pinhole to enhanced list 2018-02-08 23:45:37 +00:00
KodeStar
bbd85d2516 Some fixes 2018-02-08 22:51:12 +00:00
KodeStar
803ab459b1 fixed error message on incorrect api key 2018-02-08 22:25:40 +00:00
KodeStar
256648e682 fixes to sabnzbd app 2018-02-08 22:17:19 +00:00
KodeStar
758599804c Added Sabnzbd support 2018-02-08 22:02:28 +00:00
KodeStar
b2dd3f803e don't try to get live stats for items that haven't been configured 2018-02-08 20:58:07 +00:00
KodeStar
912c6512fb change it to start at 5 seconds so if nothing is happening it doesn't start spamming 2018-02-08 20:02:26 +00:00
KodeStar
fff44f4681 fixes for saving non config items 2018-02-08 20:00:24 +00:00
KodeStar
79f4a6cc07 Change code to wind down checks when no doing anything 2018-02-08 19:50:01 +00:00
KodeStar
b910a933fb changed error message 2018-02-08 19:28:23 +00:00
KodeStar
e0d08c60d0 more detail in error message 2018-02-08 19:24:30 +00:00
KodeStar
33394c2f07 remove gitignore mix 2018-02-08 19:11:12 +00:00
KodeStar
4fc2bbd1af fixes for nzbget 2018-02-08 18:53:52 +00:00
KodeStar
e4e815dc40 ignore mix manifest 2018-02-08 17:48:33 +00:00
Chris
482831b9f9 first working(ish) app! 2018-02-08 15:50:53 +00:00
Chris
30aea8e361 updated dependencies + working api connection 2018-02-08 14:21:29 +00:00
KodeStar
dfc3c2194c Merge pull request #20 from aptalca/TR
Add Turkish language
2018-02-08 10:14:03 +00:00
aptalca
7376aef136 formatting 2018-02-07 18:08:12 -05:00
aptalca
18a45863bd formatting 2018-02-07 18:07:24 -05:00
aptalca
9c5cf150e7 formatting 2018-02-07 18:06:47 -05:00
aptalca
c08dcab1d8 formatting 2018-02-07 18:05:47 -05:00
aptalca
c9d9d50fa0 Create validation.php in Turkish 2018-02-07 18:03:46 -05:00
KodeStar
9bb0304620 Update files for next version 2018-02-07 22:33:58 +00:00
KodeStar
7b5bc24a6d Merge pull request #18 from linuxserver/v1.2
V1.2
2018-02-07 22:27:34 +00:00
KodeStar
1d390d7966 another trial 2018-02-07 22:24:43 +00:00
aptalca
528b317552 Create passwords.php in Turkish 2018-02-07 17:21:41 -05:00
KodeStar
116ff2dd46 possible fix for slider 2018-02-07 22:20:18 +00:00
aptalca
3d8483f9bb Create pagination.php in Turkish 2018-02-07 17:17:28 -05:00
aptalca
6d1d723df2 Create auth.php inTurkish 2018-02-07 17:16:20 -05:00
aptalca
3a93b4f0e1 Create app.php in Turkish 2018-02-07 17:11:15 -05:00
aptalca
f7286bb38f Create app.php 2018-02-07 16:52:47 -05:00
KodeStar
764222c901 fix image disappearing if save item without all required information 2018-02-07 20:45:31 +00:00
KodeStar
6409e291be fix item edit view 2018-02-07 20:35:52 +00:00
KodeStar
cb719be3ad Fix button size issue in chrome + move button layout 2018-02-07 20:18:12 +00:00
Conny Sjöblom
9e93ac10f4 Correct the finnish translation 2018-02-07 22:03:09 +02:00
KodeStar
dce553c587 Merge branch 'master' into v1.2
# Conflicts:
#	resources/views/app.blade.php
2018-02-07 18:17:04 +00:00
KodeStar
3ab91cc0e1 Merge remote-tracking branch 'origin/v1.2' into v1.2 2018-02-07 18:15:40 +00:00
Chris
6adbcb8d1c changed gitignore 2018-02-07 15:45:12 +00:00
Chris
211da7cb09 supported apps support 2018-02-07 15:43:29 +00:00
Chris
beb12147e0 fix incorrect translation strings 2018-02-07 14:01:10 +00:00
Chris
0f3087ab7d translations 2018-02-07 13:37:40 +00:00
Chris
a5e99545d7 Possible fix to subfolder issue 2018-02-07 08:59:40 +00:00
Chris
a8a7e56da7 Merge branch 'master' into v1.2 2018-02-07 08:47:54 +00:00
KodeStar
57ac6bc680 Merge branch 'master' into v1.2 2018-02-06 22:40:58 +00:00
KodeStar
3a3446151e supported apps stuff 2018-02-06 20:41:29 +00:00
Chris
fd5ca1914c Supported apps fixes 2018-02-06 15:27:02 +00:00
KodeStar
ade028767a supported apps stuff 2018-02-05 23:08:37 +00:00
KodeStar
983cf98b9e Delete storage 2018-02-05 21:13:56 +00:00
KodeStar
3e02d92105 Initial supported apps support 2018-02-05 20:59:38 +00:00
KodeStar
0cd8f551a1 git supported apps 2018-02-05 20:29:56 +00:00
KodeStar
bd8bac162f gitignore 2018-02-05 20:14:16 +00:00
KodeStar
91ecd03c4e supported apps 2018-02-05 19:49:20 +00:00
KodeStar
5a0321cd4f don't ignore supported apps 2018-02-05 19:47:36 +00:00
KodeStar
b9d212ed58 remove symlink 2018-02-05 19:45:40 +00:00
KodeStar
83f2a81e91 changes 2018-02-05 19:43:24 +00:00
KodeStar
3f20fe75c6 Merge branch 'master' into v1.2 2018-02-05 18:14:06 +00:00
322 changed files with 23873 additions and 964 deletions

2
.gitignore vendored
View File

@@ -8,3 +8,5 @@ Homestead.json
Homestead.yaml
npm-debug.log
yarn-error.log
storage/app/public/.DS_Store

View File

@@ -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
View File

@@ -0,0 +1,12 @@
<?php
function format_bytes($bytes, $is_drive_size = true, $beforeunit = '', $afterunit = '')
{
$btype = ($is_drive_size === true) ? 1000 : 1024;
$labels = array('B','KB','MB','GB','TB');
for($x = 0; $bytes >= $btype && $x < (count($labels) - 1); $bytes /= $btype, $x++); // use 1000 rather than 1024 to simulate HD size not real size
if($labels[$x] == "TB") return(round($bytes, 3).$beforeunit.$labels[$x].$afterunit);
elseif($labels[$x] == "GB") return(round($bytes, 2).$beforeunit.$labels[$x].$afterunit);
elseif($labels[$x] == "MB") return(round($bytes, 2).$beforeunit.$labels[$x].$afterunit);
else return(round($bytes, 0).$beforeunit.$labels[$x].$afterunit);
}

View File

@@ -129,7 +129,7 @@ class ItemController extends Controller
//
$validatedData = $request->validate([
'title' => 'required|max:255',
'url' => 'required',
'url' => 'required|url',
]);
if($request->hasFile('file')) {
@@ -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'));
}
/**
@@ -183,9 +190,9 @@ class ItemController extends Controller
{
$validatedData = $request->validate([
'title' => 'required|max:255',
'url' => 'required',
'url' => 'required|url',
]);
//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();
}
}
}

View File

@@ -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'),
]);
}

View File

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

View File

@@ -26,8 +26,31 @@ 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,
'Home Assistant' => \App\SupportedApps\HomeAssistant::class,
'Jackett' => \App\SupportedApps\Jackett::class,
'Jdownloader' => \App\SupportedApps\Jdownloader::class,
'Lidarr' => \App\SupportedApps\Lidarr::class,
'Mcmyadmin' => \App\SupportedApps\Mcmyadmin::class,
'Nextcloud' => \App\SupportedApps\Nextcloud::class,
'NZBGet' => \App\SupportedApps\Nzbget::class,
'Openhab' => \App\SupportedApps\Openhab::class,
'pFsense' => \App\SupportedApps\Pfsense::class,
'Netdata' => \App\SupportedApps\Netdata::class,
'OPNSense' => \App\SupportedApps\Opnsense::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,
'Proxmox' => \App\SupportedApps\Proxmox::class,
'Radarr' => \App\SupportedApps\Radarr::class,
'ruTorrent' => \App\SupportedApps\ruTorrent::class,
'Sabnzbd' => \App\SupportedApps\Sabnzbd::class,
'Sonarr' => \App\SupportedApps\Sonarr::class,
'Traefik' => \App\SupportedApps\Traefik::class,
'UniFi' => \App\SupportedApps\Unifi::class,
];
}
public static function supportedOptions()
@@ -45,4 +68,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;
}
}

View File

@@ -26,7 +26,6 @@ class AppServiceProvider extends ServiceProvider
// first time setup
touch(database_path('app.sqlite'));
Artisan::call('migrate', array('--path' => 'database/migrations', '--force' => true, '--seed' => true));
Artisan::call('storage:link');
//Cache
//Artisan::call('config:cache');
//Artisan::call('route:cache');
@@ -46,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);

View File

@@ -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>';

View File

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

View File

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

View 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';
}
}

View 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';
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,8 +1,82 @@
<?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);
$rebuild_url = rtrim($rebuild_url, '/');
$api_url = $rebuild_url.'/jsonrpc/'.$endpoint;
$client = new Client(['http_errors' => false]);
$res = $client->request('GET', $api_url);
return $res;
}
}

View File

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

View File

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

View 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';
}
}

View File

@@ -0,0 +1,72 @@
<?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;
$url = rtrim($url, '/');
$api_url = $url.'/api.php';
//die( $api_url.' --- ');
$client = new Client(['http_errors' => false]);
$res = $client->request('GET', $api_url);
return $res;
}
}

View File

@@ -3,6 +3,10 @@
class Plex implements Contracts\Applications {
public function defaultColour()
{
return '#ccc';
return '#222';
}
public function icon()
{
return 'supportedapps/plex.png';
}
}

View File

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

View File

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

View 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';
}
}

View File

@@ -0,0 +1,80 @@
<?php namespace App\SupportedApps;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Client;
class Proxmox implements Contracts\Applications, Contracts\Livestats {
public function defaultColour()
{
return '#542e0a';
}
public function icon()
{
return 'supportedapps/proxmox.png';
}
public function configDetails()
{
//return 'proxmox';
return null;
}
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;
}*/
return null;
}
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;
*/
return null;
}
public function buildRequest($endpoint='')
{
$config = $this->config;
$username = $config->username;
$password = $config->password;
$url = $config->url;
$url = rtrim($url, '/');
$api_url = $url.'/api2/json/'.$endpoint.'?username='.$username.'&password='.$password;
//die( $api_url.' --- ');
$client = new Client(['http_errors' => false, 'verify' => false ]);
$res = $client->request('GET', $api_url);
return $res;
}
}

View File

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

View File

@@ -0,0 +1,84 @@
<?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;
$url = rtrim($url, '/');
$api_url = $url.'/api?output=json&apikey='.$apikey.'&mode='.$endpoint;
//die( $api_url.' --- ');
$client = new Client(['http_errors' => false]);
$res = $client->request('GET', $api_url);
return $res;
}
}

View File

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

View File

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

View 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';
}
}

View File

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

View File

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

446
composer.lock generated
View File

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

View File

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

View File

@@ -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,41 @@ 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)',
'it' => 'Italiano (Italian)',
'no' => 'Norsk (Norwegian)',
'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();
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
public/apple-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

2
public/browserconfig.xml Normal file
View File

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

224
public/css/app.css vendored
View File

@@ -519,8 +519,6 @@ body {
border-radius: 6px;
padding: 15px;
padding-right: 55px;
-webkit-box-shadow: 0 0 20px 2px rgba(0, 0, 0, 0.3);
box-shadow: 0 0 20px 2px rgba(0, 0, 0, 0.3);
color: white;
overflow: hidden;
position: relative;
@@ -533,6 +531,10 @@ body {
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
border: 1px solid #333333;
border: 1px solid #4a4a4a;
border: 1px solid rgba(76, 76, 76, 0.4);
background-clip: padding-box;
}
.item:after {
@@ -567,6 +569,10 @@ body {
font-size: 16px;
}
.item .details {
width: 100%;
}
.text-center {
text-align: center !important;
}
@@ -661,6 +667,10 @@ body {
color: #2f313a;
}
.homesearch {
height: 51px;
}
.module-actions {
display: -webkit-box;
display: -ms-flexbox;
@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
public/favicon-32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
public/favicon-96x96.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 0 B

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

54
public/js/app.js vendored
View File

@@ -15,7 +15,33 @@ $.when( $.ready ).then(function() {
{
$('.message-container').fadeOut();
}, 3500);
}
if($('.livestats-container').length) {
$('.livestats-container').each(function(index){
var id = $(this).data('id');
var dataonly = $(this).data('dataonly');
var increaseby = (dataonly == 1) ? 20000 : 1000;
var container = $(this);
var max_timer = 30000;
var timer = 5000;
(function worker() {
$.ajax({
url: '/get_stats/'+id,
success: function(data) {
container.html(data);
if(data != '') timer = increaseby;
else {
if(timer < max_timer) timer += 2000;
}
},
complete: function() {
// Schedule the next request when the current one's complete
setTimeout(worker, timer);
}
});
})();
});
}
@@ -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
View File

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

View File

@@ -1,4 +1,4 @@
{
"/css/app.css": "/css/app.css?id=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

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@@ -1,22 +1,74 @@
![alt text](https://i.imgur.com/aUpMns5.jpg)
![alt text](https://i.imgur.com/iuV8w3y.png)
## 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. Its dedicated to this purpose so you wont lose your links in a sea of bookmarks.
Why not use it as your browser start page? It even has the ability to include a search bar using either Google, Bing or DuckDuckGo.
![alt text](https://i.imgur.com/MrC4QpN.gif)
## Video
If you want to see a quick video of it in use, go to https://drive.google.com/file/d/1cijXgmjem_q2OfKMp36qVuXRiyOzvhWC/view
If you want to see a quick video of it in use, go to https://youtu.be/GXnnMAxPzMc
## Supported applications
You can use the app to link to any site or application, but Foundation apps will auto fill in the icon for the app and supply a default color for the tile. In addition Enhanced apps allow you provide details to an apps API, allowing you to view live stats directly on the dashboad. For example, the NZBGet and Sabnzbd Enhanced apps will display the queue size and download speed while something is downloading.
**Enhanced**
- NZBGet
- Pihole
- Sabnzbd
**Foundation**
- Duplicati
- Emby
- Jdownloader
- Mcmyadmin
- NZBGet
- Netdata
- 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 are also dockers and instructions on how to use them at
for x86-64: https://hub.docker.com/r/linuxserver/heimdall/
for armhf: https://hub.docker.com/r/lsioarmhf/heimdall/
and for arm64: https://hub.docker.com/r/lsioarmhf/heimdall-aarch64/
## 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
@@ -49,11 +101,35 @@ location /webfonts {
```
If there are any other locations which might interefere with any of the folders in the /public folder, you might have to do the same for those as well, but it's a super fringe case.
### Reverse proxy
If you'd like to reverse proxy this app, we recommend using our letsencrypt/nginx docker image: [Letsencrypt/Nginx](https://hub.docker.com/r/linuxserver/letsencrypt/)
You can either reverse proxy from the root location, or from a subdomain (subfolder method is currently not supported). For https proxy, make sure you use the https port of Heimdall webserver, otherwise some links may break. You can add security through `.htpasswd`
```
location / {
auth_basic "Restricted";
auth_basic_user_file /config/nginx/.htpasswd;
include /config/nginx/proxy.conf;
proxy_pass https://heimdall:443;
}
```
## Support
https://discord.gg/CCjHKn4 or through Github issues
## Credits
- PHP Framework - [Laravel](https://laravel.com/)
- Icons - [FonteAwesome 5](https://fontawesome.com/)
- Javascript - [jQuery](https://jquery.com/)
- Colour picker - [Huebee](http://huebee.buzz/)
- Background image - [pexels](https://www.pexels.com)
- Everyone at Linuxserver.io that has helped with the app and let's not forget IronicBadger for the following question that started it all:
```
you know, i would love something like this landing page for all my servers apps
that gives me the ability to pin favourites
and / or search
@Stark @Kode do either of you think you'd be able to rustle something like this up ?
```
## License

View File

@@ -6,7 +6,33 @@ $.when( $.ready ).then(function() {
{
$('.message-container').fadeOut();
}, 3500);
}
if($('.livestats-container').length) {
$('.livestats-container').each(function(index){
var id = $(this).data('id');
var dataonly = $(this).data('dataonly');
var increaseby = (dataonly == 1) ? 20000 : 1000;
var container = $(this);
var max_timer = 30000;
var timer = 5000;
(function worker() {
$.ajax({
url: '/get_stats/'+id,
success: function(data) {
container.html(data);
if(data != '') timer = increaseby;
else {
if(timer < max_timer) timer += 2000;
}
},
complete: function() {
// Schedule the next request when the current one's complete
setTimeout(worker, timer);
}
});
})();
});
}
@@ -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();

View File

@@ -232,7 +232,7 @@ body {
padding: 15px;
padding-right: 55px;
//border: 2px solid rgba(0,0,0,0.4);
box-shadow: 0 0 20px 2px rgba(0,0,0,0.3);
//box-shadow: 0 0 15px 1px rgba(35, 35, 35, 0.44);
color: white;
overflow: hidden;
position: relative;
@@ -240,6 +240,11 @@ body {
outline: 1px solid transparent;
display: flex;
align-items: center;
border: 1px solid #333333;
border: 1px solid rgb(74, 74, 74);
border: 1px solid rgba(76, 76, 76, 0.4);
-webkit-background-clip: padding-box;
background-clip: padding-box;
&:after {
content: "";
position: absolute;
@@ -268,6 +273,9 @@ body {
.title {
font-size: 16px;
}
.details {
width: 100%;
}
}
.text-center {
text-align: center!important;
@@ -349,6 +357,9 @@ body {
}
}
}
.homesearch {
height: 51px;
}
.module-actions {
display: flex;
justify-content:space-between;
@@ -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
View 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
View 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
View 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
View 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' => 'Taustakuva',
'settings.homepage_search' => 'Kotisivu Haku',
'settings.search_provider' => 'Hakupalvelu',
'settings.language' => 'Kieli',
'settings.reset' => 'Palauta oletusasetukset',
'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' => '- ei 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 hallintapaneliin',
'dash.no_apps' => 'Tällä hetkellä ei ole kiinnitettyjä sovelluksia :link1 tai :link2',
'dash.link1' => 'Lisää sovellus tähän',
'dash.link2' => 'Kiinnitä kohde hallintapaneliin',
'dash.pinned_items' => 'Kiinnitetyt Kohteet',
'apps.app_list' => 'Sovellusluettelo',
'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' => 'Kiinnitetty',
'apps.title' => 'Otsikko',
'apps.hex' => 'Hex väri',
'apps.username' => 'Käyttäjätunnus',
'apps.password' => 'Salasana',
'apps.config' => 'Konfiguraatio',
'url' => 'Url',
'title' => 'Otsikko',
'delete' => 'Poistaa',
'optional' => 'Valinnainen',
'restore' => 'Palauta',
'alert.success.item_created' => 'Kohde luotu onnistuneesti',
'alert.success.item_updated' => 'Kohde päivitetty onnistuneesti',
'alert.success.item_deleted' => 'Kohde poistettu onnistuneesti',
'alert.success.item_restored' => 'Kohde palautettu onnistuneesti',
'alert.success.setting_updated' => 'Asetus muokattu onnistuneesti',
'alert.error.not_exist' => 'Tätä asetusta ei ole olemassa.',
);

58
resources/lang/fr/app.php Normal file
View 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.',
);

80
resources/lang/it/app.php Normal file
View File

@@ -0,0 +1,80 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| App Language Lines
|--------------------------------------------------------------------------
|
*/
'settings.system' => 'Sistema',
'settings.appearance' => 'Aspetto',
'settings.miscellaneous' => 'Miscellaneous',
'settings.version' => 'Versione',
'settings.background_image' => 'Immagine di sfondo',
'settings.homepage_search' => 'Ricerca in homepage',
'settings.search_provider' => 'Motore di ricerca',
'settings.language' => 'Lingua',
'settings.reset' => 'Ripristina le impostazioni di default',
'settings.remove' => 'Rimuovi',
'settings.search' => 'Cerca',
'settings.no_items' => 'Nessun elemento trovato',
'settings.label' => 'Etichetta',
'settings.value' => 'Valore',
'settings.edit' => 'Modifica',
'settings.view' => 'Vista',
'options.none' => '- non impostato -',
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.yes' => 'Si',
'options.no' => 'No',
'buttons.save' => 'Salva',
'buttons.cancel' => 'Annulla',
'buttons.add' => 'Aggiungi',
'buttons.upload' => 'Aggiungi un file',
'dash.pin_item' => 'Fissa un elemento sulla dashboard',
'dash.no_apps' => 'Non ci sono applicazioni fissate, :link1 o :link2',
'dash.link1' => 'Aggiungi un\'applicazione qui',
'dash.link2' => 'Fissa un elemento alla dashboard',
'dash.pinned_items' => 'Elementi fissati',
'apps.app_list' => 'Lista delle applicazioni',
'apps.view_trash' => 'Guarda il cestino',
'apps.add_application' => 'Aggiungi applicazione',
'apps.application_name' => 'Nome dell\'applicazione',
'apps.colour' => 'Colore',
'apps.icon' => 'Icona',
'apps.pinned' => 'Fissato',
'apps.title' => 'Titolo',
'apps.hex' => 'Colore esadecimale',
'apps.username' => 'Nome utente',
'apps.password' => 'Password',
'apps.config' => 'Configurazione',
'apps.apikey' => 'Api Key',
'apps.enable' => 'Abilitato',
'url' => 'Url',
'title' => 'Titolo',
'delete' => 'Elimina',
'optional' => 'Opzionale',
'restore' => 'Ripristina',
'alert.success.item_created' => 'Elemento creato con successo',
'alert.success.item_updated' => 'Elemento aggiornato con successo',
'alert.success.item_deleted' => 'Elemento cancellato con successo',
'alert.success.item_restored' => 'Elemento ripristinato con successo',
'alert.success.setting_updated' => 'Hai modificato questi settaggi',
'alert.error.not_exist' => 'Questi settaggi non esistono.',
];

80
resources/lang/no/app.php Normal file
View File

@@ -0,0 +1,80 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| App Language Lines
|--------------------------------------------------------------------------
|
*/
'settings.system' => 'Systemet',
'settings.appearance' => 'Utseende',
'settings.miscellaneous' => 'Diverse',
'settings.version' => 'Versjon',
'settings.background_image' => 'Bakgrunnsbilde',
'settings.homepage_search' => 'Startside Søk',
'settings.search_provider' => 'Søkemotor',
'settings.language' => 'Språk',
'settings.reset' => 'Tilbakestill tilbake til standard',
'settings.remove' => 'Fjern',
'settings.search' => 'søk',
'settings.no_items' => 'Ingen funn',
'settings.label' => 'Merkelapp',
'settings.value' => 'Verdi',
'settings.edit' => 'Endre',
'settings.view' => 'Se',
'options.none' => '- ikke valgt -',
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.yes' => 'Ja',
'options.no' => 'Nei',
'buttons.save' => 'Lagre',
'buttons.cancel' => 'Avbryt',
'buttons.add' => 'Legg til',
'buttons.upload' => 'Last opp en fil',
'dash.pin_item' => 'Fest objektet til dashboardet',
'dash.no_apps' => 'Det er for øyeblikket ingen festede applikasjoner, :link1 eller :link2',
'dash.link1' => 'Legg til en applikasjon her',
'dash.link2' => 'Fest et objekt til dashboardet',
'dash.pinned_items' => 'Festede Objekter',
'apps.app_list' => 'Applikasjonsliste',
'apps.view_trash' => 'Vis papirkurven',
'apps.add_application' => 'Legg til en applikasjon',
'apps.application_name' => 'Applikasjonsnavn',
'apps.colour' => 'Farge',
'apps.icon' => 'Ikon',
'apps.pinned' => 'Festet',
'apps.title' => 'Tittel',
'apps.hex' => 'Hex-farge',
'apps.username' => 'Brukernavn',
'apps.password' => 'Passord',
'apps.config' => 'Konfigurasjon',
'apps.apikey' => 'Api nøkkel',
'apps.enable' => 'Aktiver',
'url' => 'Url',
'title' => 'Tittel',
'delete' => 'Slett',
'optional' => 'Valgfritt',
'restore' => 'Tilbakestill',
'alert.success.item_created' => 'Objektet ble opprettet',
'alert.success.item_updated' => 'Objektet ble oppdatert',
'alert.success.item_deleted' => 'Objektet ble slettet',
'alert.success.item_restored' => 'Objektet ble gjenopprettet',
'alert.success.setting_updated' => 'Du har oppdatert denne innstillingen',
'alert.error.not_exist' => 'Denne innstillingen eksisterer ikke.',
];

View File

@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used during authentication for various
| messages that we need to display to the user. You are free to modify
| these language lines according to your application's requirements.
|
*/
'failed' => 'Påloggingsinformasjonen stemmer ikke overens med våre data.',
'throttle' => 'For mange påloggingsforsøk. Prøv igjen om :seconds sekunder.',
];

View File

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

View File

@@ -0,0 +1,22 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Password Reset Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are the default lines which match reasons
| that are given by the password broker for a password update attempt
| has failed, such as for an invalid token or invalid new password.
|
*/
'password' => 'Passord må være minst seks tegn og i samsvar med bekreftelsen.',
'reset' => 'Passordet ditt har blitt tilbakestilt!',
'sent' => 'Vi har sendt deg en e-post med en tilbakestillingslink for ditt passord!',
'token' => 'Denne tilgangstoken er ikke gyldig.',
'user' => "Vi fant ingen med den e-postadressen.",
];

58
resources/lang/sv/app.php Normal file
View 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ökmotor',
'settings.language' => 'Språk',
'settings.reset' => 'Återställ standardinställningar',
'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 valt -',
'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 applikation här',
'dash.link2' => 'Pin-ett objekt till instrumentpanelen',
'dash.pinned_items' => 'Fasta Objekt',
'apps.app_list' => 'Applikationslista',
'apps.view_trash' => 'Visa papperskorgen',
'apps.add_application' => 'Lägg till applikation',
'apps.application_name' => 'Applikationens namn',
'apps.colour' => 'Färg',
'apps.icon' => 'Ikon',
'apps.pinned' => 'Nålas',
'apps.title' => 'Titel',
'apps.hex' => 'Hex-färg',
'apps.username' => 'Användarnamn',
'apps.password' => 'Lösenord',
'apps.config' => 'Konfiguration',
'url' => 'Url',
'title' => 'Titel',
'delete' => 'Radera',
'optional' => 'Valfri',
'restore' => 'Återställ',
'alert.success.item_created' => 'Artickeln skapad',
'alert.success.item_updated' => 'Artickeln uppdaterad',
'alert.success.item_deleted' => 'Artickeln borttagen',
'alert.success.item_restored' => 'Artikeln återställd',
'alert.success.setting_updated' => 'Inställningen uppdaterad',
'alert.error.not_exist' => 'Denna inställning existerar inte.',
);

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

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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>

View File

@@ -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>

View File

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

View File

@@ -2,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

View File

@@ -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

View File

@@ -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">&nbsp;</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>

View File

@@ -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

View 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>

View File

@@ -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

View File

@@ -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">&nbsp;</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>

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