Browse Source

Merge 61a5a1a8b0 into fd2f7f27a6

pull/557/merge
JeanMS 4 years ago
committed by GitHub
parent
commit
1c26164711
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 12
      app/Helper.php
  2. 4
      app/Http/Controllers/Auth/LoginController.php
  3. 20
      app/Http/Controllers/ItemController.php
  4. 8
      app/Http/Controllers/SettingsController.php
  5. 8
      app/Http/Controllers/TagController.php
  6. 6
      app/Http/Controllers/UserController.php
  7. 2
      app/Http/Middleware/TrustProxies.php
  8. 6
      app/Item.php
  9. 14
      app/Providers/AppServiceProvider.php
  10. 18
      app/Search.php
  11. 2
      composer.json
  12. 2
      config/app.php
  13. 9
      database/seeds/SettingsSeeder.php
  14. 5
      public/css/app.css
  15. 2
      public/js/app.js
  16. 1
      public/js/fontawesome.js
  17. 4
      public/mix-manifest.json
  18. 15
      readme.md
  19. 10
      resources/assets/js/app.js
  20. 120
      resources/lang/da/app.php
  21. 19
      resources/lang/da/pagination.php
  22. 22
      resources/lang/da/passwords.php
  23. 120
      resources/lang/el/app.php
  24. 19
      resources/lang/el/auth.php
  25. 19
      resources/lang/el/pagination.php
  26. 22
      resources/lang/el/passwords.php
  27. 121
      resources/lang/el/validation.php
  28. 3
      resources/lang/en/app.php
  29. 9
      resources/lang/es/app.php
  30. 2
      resources/lang/fi/app.php
  31. 84
      resources/lang/it/app.php
  32. 15
      resources/lang/it/auth.php
  33. 15
      resources/lang/it/pagination.php
  34. 120
      resources/lang/sl/app.php
  35. 19
      resources/lang/sl/auth.php
  36. 19
      resources/lang/sl/pagination.php
  37. 22
      resources/lang/sl/passwords.php
  38. 121
      resources/lang/sl/validation.php
  39. 2
      resources/views/item.blade.php
  40. 6
      resources/views/items/form.blade.php
  41. 10
      resources/views/items/list.blade.php
  42. 2
      resources/views/items/preview.blade.php
  43. 4
      resources/views/items/scripts.blade.php
  44. 4
      resources/views/items/trash.blade.php
  45. 21
      resources/views/layouts/app.blade.php
  46. 4
      resources/views/settings/form.blade.php
  47. 2
      resources/views/settings/list.blade.php
  48. 4
      resources/views/tags/form.blade.php
  49. 8
      resources/views/tags/list.blade.php
  50. 4
      resources/views/tags/trash.blade.php
  51. 4
      resources/views/users/form.blade.php
  52. 8
      resources/views/users/index.blade.php
  53. 4
      resources/views/users/trash.blade.php
  54. 2
      resources/views/welcome.blade.php
  55. 4
      routes/web.php
  56. 2
      webpack.mix.js

12
app/Helper.php

@ -35,6 +35,18 @@ function title_color($hex)
}
}
function getLinkTargetAttribute()
{
$target = \App\Setting::fetch('window_target');
if($target === 'current') {
return '';
} else {
return ' target="' . $target . '"';
}
}
function className($name)
{

4
app/Http/Controllers/Auth/LoginController.php

@ -59,7 +59,7 @@ class LoginController extends Controller
public function login(Request $request)
{
$current_user = User::currentUser();
$request->merge(['username' => $current_user->username]);
$request->merge(['username' => $current_user->username, 'remember' => true]);
//die(print_r($request->all()));
$this->validateLogin($request);
@ -98,7 +98,7 @@ class LoginController extends Controller
public function autologin($uuid)
{
$user = User::where('autologin', $uuid)->first();
Auth::login($user);
Auth::login($user, true);
session(['current_user' => $user]);
return redirect()->route('dash');
}

20
app/Http/Controllers/ItemController.php

@ -30,11 +30,11 @@ class ItemController extends Controller
{
$data['apps'] = Item::whereHas('parents', function ($query) {
$query->where('id', 0);
})->pinned()->orderBy('order', 'asc')->get();
})->orWhere('type', 1)->pinned()->orderBy('order', 'asc')->get();
$data['all_apps'] = Item::whereHas('parents', function ($query) {
$query->where('id', 0);
})->orderBy('order', 'asc')->get();
})->orWhere('type', 1)->orderBy('order', 'asc')->get();
//$data['all_apps'] = Item::doesntHave('parents')->get();
//die(print_r($data['apps']));
@ -66,7 +66,7 @@ class ItemController extends Controller
$item = Item::findOrFail($id);
$item->pinned = true;
$item->save();
$route = route('dash', [], false);
$route = route('dash', []);
return redirect($route);
}
@ -80,7 +80,7 @@ class ItemController extends Controller
$item = Item::findOrFail($id);
$item->pinned = false;
$item->save();
$route = route('dash', [], false);
$route = route('dash', []);
return redirect($route);
}
@ -105,7 +105,7 @@ class ItemController extends Controller
$data['ajax'] = true;
return view('sortable', $data);
} else {
$route = route('dash', [], false);
$route = route('dash', []);
return redirect($route);
}
}
@ -140,7 +140,7 @@ class ItemController extends Controller
//
$data['tags'] = Item::ofType('tag')->orderBy('title', 'asc')->pluck('title', 'id');
$data['tags']->prepend(__('app.dashboard'), 0);
$data['current_tags'] = [];
$data['current_tags'] = collect([0 => __('app.dashboard')]);
return view('items.create', $data);
}
@ -188,7 +188,7 @@ class ItemController extends Controller
$item->parents()->sync($request->tags);
$route = route('dash', [], false);
$route = route('dash', []);
return redirect($route)
->with('success', __('app.alert.success.item_created'));
}
@ -265,7 +265,7 @@ class ItemController extends Controller
$item->parents()->sync($request->tags);
$route = route('dash', [], false);
$route = route('dash', []);
return redirect($route)
->with('success',__('app.alert.success.item_updated'));
}
@ -288,7 +288,7 @@ class ItemController extends Controller
Item::find($id)->delete();
}
$route = route('items.index', [], false);
$route = route('items.index', []);
return redirect($route)
->with('success',__('app.alert.success.item_deleted'));
}
@ -306,7 +306,7 @@ class ItemController extends Controller
->where('id', $id)
->restore();
$route = route('items.inded', [], false);
$route = route('items.index', []);
return redirect($route)
->with('success',__('app.alert.success.item_restored'));
}

8
app/Http/Controllers/SettingsController.php

@ -47,7 +47,7 @@ class SettingsController extends Controller
'setting' => $setting,
]);
} else {
$route = route('settings.list', [], false);
$route = route('settings.list', []);
return redirect($route)
->with([
'error' => __('app.alert.error.not_exist'),
@ -85,13 +85,13 @@ class SettingsController extends Controller
$user->settings()->detach($setting->id);
$user->settings()->save($setting, ['uservalue' => $setting_value]);
$route = route('settings.index', [], false);
$route = route('settings.index', []);
return redirect($route)
->with([
'success' => __('app.alert.success.setting_updated'),
]);
} else {
$route = route('settings.index', [], false);
$route = route('settings.index', []);
return redirect($route)
->with([
'error' => __('app.alert.error.not_exist'),
@ -111,7 +111,7 @@ class SettingsController extends Controller
$user->settings()->detach($setting->id);
$user->settings()->save($setting, ['uservalue' => '']);
}
$route = route('settings.index', [], false);
$route = route('settings.index', []);
return redirect($route)
->with([
'success' => __('app.alert.success.setting_updated'),

8
app/Http/Controllers/TagController.php

@ -74,7 +74,7 @@ class TagController extends Controller
//die(print_r($request->all()));
Item::create($request->all());
$route = route('dash', [], false);
$route = route('dash', []);
return redirect($route)
->with('success', __('app.alert.success.tag_created'));
}
@ -139,7 +139,7 @@ class TagController extends Controller
Item::find($id)->update($request->all());
$route = route('dash', [], false);
$route = route('dash', []);
return redirect($route)
->with('success',__('app.alert.success.tag_updated'));
}
@ -162,7 +162,7 @@ class TagController extends Controller
Item::find($id)->delete();
}
$route = route('tags.index', [], false);
$route = route('tags.index', []);
return redirect($route)
->with('success',__('app.alert.success.item_deleted'));
}
@ -179,7 +179,7 @@ class TagController extends Controller
Item::withTrashed()
->where('id', $id)
->restore();
$route = route('tags.index', [], false);
$route = route('tags.index', []);
return redirect($route)
->with('success',__('app.alert.success.item_restored'));
}

6
app/Http/Controllers/UserController.php

@ -80,7 +80,7 @@ class UserController extends Controller
$user->save();
$route = route('dash', [], false);
$route = route('dash', []);
return redirect($route)
->with('success',__('app.alert.success.user_updated'));
}
@ -150,7 +150,7 @@ class UserController extends Controller
$user->save();
$route = route('dash', [], false);
$route = route('dash', []);
return redirect($route)
->with('success',__('app.alert.success.user_updated'));
@ -166,7 +166,7 @@ class UserController extends Controller
{
if($user->id !== 1) {
$user->delete();
$route = route('dash', [], false);
$route = route('dash', []);
return redirect($route)
->with('success',__('app.alert.success.user_deleted'));

2
app/Http/Middleware/TrustProxies.php

@ -12,7 +12,7 @@ class TrustProxies extends Middleware
*
* @var array
*/
protected $proxies = ['192.168.0.0/16', '172.16.0.0/12','10.0.0.0/8'];
protected $proxies = ['192.168.0.0/16', '172.16.0.0/12','10.0.0.0/8', '127.0.0.1'];
/**
* The current proxy header mappings.

6
app/Item.php

@ -20,7 +20,11 @@ class Item extends Model
static::addGlobalScope('user_id', function (Builder $builder) {
$current_user = User::currentUser();
$builder->where('user_id', $current_user->id)->orWhere('user_id', 0);
if($current_user) {
$builder->where('user_id', $current_user->id)->orWhere('user_id', 0);
} else {
$builder->where('user_id', 0);
}
});
}

14
app/Providers/AppServiceProvider.php

@ -72,22 +72,30 @@ class AppServiceProvider extends ServiceProvider
explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
}
if(!\Auth::check()) {
if(isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
if(isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])
&& !empty($_SERVER['PHP_AUTH_USER']) && !empty($_SERVER['PHP_AUTH_PW'])) {
$credentials = ['username' => $_SERVER['PHP_AUTH_USER'], 'password' => $_SERVER['PHP_AUTH_PW']];
if (\Auth::attempt($credentials)) {
if (\Auth::attempt($credentials, true)) {
// Authentication passed...
$user = \Auth::user();
//\Session::put('current_user', $user);
session(['current_user' => $user]);
}
}
elseif(isset($_SERVER['REMOTE_USER']) && !empty($_SERVER['REMOTE_USER'])) {
$user = User::where('username', $_SERVER['REMOTE_USER'])->first();
if ($user) {
\Auth::login($user, true);
session(['current_user' => $user]);
}
}
}
$alt_bg = '';
if($bg_image = Setting::fetch('background_image')) {
$alt_bg = ' style="background-image: url(/storage/'.$bg_image.')"';
$alt_bg = ' style="background-image: url(storage/'.$bg_image.')"';
}
$lang = Setting::fetch('language');
\App::setLocale($lang);

18
app/Search.php

@ -89,10 +89,14 @@ abstract class Search
if(empty($app->class)) continue;
if(($provider = Item::isSearchProvider($app->class)) !== false) {
$name = Item::nameFromClass($app->class);
$providers[strtolower($name)] = [
$providers[$app->id] = [
'type' => $provider->type,
'class' => $app->class,
'url' => $app->url,
'title' => $app->title,
'colour' => $app->colour,
'icon' => $app->icon,
'description' => $app->description
];
}
@ -125,18 +129,22 @@ abstract class Search
$provider = self::providerDetails($user_search_provider);
$output .= '<div class="searchform">';
$output .= Form::open(['url' => 'search', 'method' => 'get']);
$output .= '<form action="'.url('search').'"'.getLinkTargetAttribute().' method="get">';
$output .= '<div id="search-container" class="input-container">';
$output .= '<select name="provider">';
foreach(self::providers() as $key => $searchprovider) {
$selected = ($key === $user_search_provider) ? ' selected="selected"' : '';
$output .= '<option value="'.$key.'"'.$selected.'>'.__('app.options.'.$key).'</option>';
if (is_numeric($key)) {
$output .= '<option value="'.$key.'"'.$selected.'>'.$searchprovider['title'].'</option>';
} else {
$output .= '<option value="'.$key.'"'.$selected.'>'.__('app.options.'.$key).'</option>';
}
}
$output .= '</select>';
$output .= Form::text('q', null, ['class' => 'homesearch', 'autofocus' => 'autofocus', 'placeholder' => __('app.settings.search').'...']);
$output .= '<button type="submit">'.ucwords(__('app.settings.search')).'</button>';
$output .= '</div>';
$output .= Form::close();
$output .= '</form>';
$output .= '</div>';
}
}
@ -144,4 +152,4 @@ abstract class Search
}
}
}

2
composer.json

@ -5,7 +5,7 @@
"license": "MIT",
"type": "project",
"require": {
"php": ">=7.0.0",
"php": ">=7.1.3",
"fideloper/proxy": "^4.0",
"graham-campbell/github": "^7.5",
"guzzlehttp/guzzle": "^6.3",

2
config/app.php

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

9
database/seeds/SettingsSeeder.php

@ -96,7 +96,7 @@ class SettingsSeeder extends Seeder
]);
if(!$setting = Setting::find(4)) {
$setting = new Setting;
$setting->id = 4;
$setting->group_id = 3;
@ -117,9 +117,10 @@ class SettingsSeeder extends Seeder
'en' => 'English',
'fi' => 'Suomi (Finnish)',
'fr' => 'Français (French)',
'el' => 'Ελληνικά (Greek)',
'it' => 'Italiano (Italian)',
'no' => 'Norsk (Norwegian)',
'pl' => 'Polski (Polish)',
'no' => 'Norsk (Norwegian)',
'pl' => 'Polski (Polish)',
'sv' => 'Svenska (Swedish)',
'es' => 'Español (Spanish)',
'tr' => 'Türkçe (Turkish)',
@ -146,7 +147,7 @@ class SettingsSeeder extends Seeder
]);
if(!$setting = Setting::find(7)) {
$setting = new Setting;
$setting->id = 7;
$setting->group_id = 3;

5
public/css/app.css

File diff suppressed because one or more lines are too long

2
public/js/app.js

File diff suppressed because one or more lines are too long

1
public/js/fontawesome.js

@ -481,6 +481,7 @@ function define(prefix, icons) {
var icons = {
"arrow-alt-to-right": [448, 512, [], "f34c", "M448 88v336c0 13.3-10.7 24-24 24h-24c-13.3 0-24-10.7-24-24V88c0-13.3 10.7-24 24-24h24c13.3 0 24 10.7 24 24zM24 320h136v87.7c0 17.8 21.5 26.7 34.1 14.1l152.2-152.2c7.5-7.5 7.5-19.8 0-27.3L194.1 90.1c-12.6-12.6-34.1-3.7-34.1 14.1V192H24c-13.3 0-24 10.7-24 24v80c0 13.3 10.7 24 24 24z"],
"ban": [512, 512, [], "f05e", "M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z"],
"check": [512, 512, [], "f00c", "M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"],
"cloud-download": [640, 512, [], "f0ed", "M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-139.9 93L305 412.3c-9.4 9.4-24.6 9.4-33.9 0l-92.7-92.7c-9.4-9.4-9.4-24.6 0-33.9l10.8-10.8c9.6-9.6 25.2-9.3 34.5.5l32.4 34.5V184c0-13.3 10.7-24 24-24h16c13.3 0 24 10.7 24 24v125.9l32.4-34.5c9.3-9.9 24.9-10.1 34.5-.5l10.8 10.8c9.2 9.3 9.2 24.5-.1 33.9z"],
"cogs": [640, 512, [], "f085", "M512.1 191l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0L552 6.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zm-10.5-58.8c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.7-82.4 14.3-52.8 52.8zM386.3 286.1l33.7 16.8c10.1 5.8 14.5 18.1 10.5 29.1-8.9 24.2-26.4 46.4-42.6 65.8-7.4 8.9-20.2 11.1-30.3 5.3l-29.1-16.8c-16 13.7-34.6 24.6-54.9 31.7v33.6c0 11.6-8.3 21.6-19.7 23.6-24.6 4.2-50.4 4.4-75.9 0-11.5-2-20-11.9-20-23.6V418c-20.3-7.2-38.9-18-54.9-31.7L74 403c-10 5.8-22.9 3.6-30.3-5.3-16.2-19.4-33.3-41.6-42.2-65.7-4-10.9.4-23.2 10.5-29.1l33.3-16.8c-3.9-20.9-3.9-42.4 0-63.4L12 205.8c-10.1-5.8-14.6-18.1-10.5-29 8.9-24.2 26-46.4 42.2-65.8 7.4-8.9 20.2-11.1 30.3-5.3l29.1 16.8c16-13.7 34.6-24.6 54.9-31.7V57.1c0-11.5 8.2-21.5 19.6-23.5 24.6-4.2 50.5-4.4 76-.1 11.5 2 20 11.9 20 23.6v33.6c20.3 7.2 38.9 18 54.9 31.7l29.1-16.8c10-5.8 22.9-3.6 30.3 5.3 16.2 19.4 33.2 41.6 42.1 65.8 4 10.9.1 23.2-10 29.1l-33.7 16.8c3.9 21 3.9 42.5 0 63.5zm-117.6 21.1c59.2-77-28.7-164.9-105.7-105.7-59.2 77 28.7 164.9 105.7 105.7zm243.4 182.7l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0l8.2-14.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zM501.6 431c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.6-82.4 14.3-52.8 52.8z"],
"edit": [576, 512, [], "f044", "M402.6 83.2l90.2 90.2c3.8 3.8 3.8 10 0 13.8L274.4 405.6l-92.8 10.3c-12.4 1.4-22.9-9.1-21.5-21.5l10.3-92.8L388.8 83.2c3.8-3.8 10-3.8 13.8 0zm162-22.9l-48.8-48.8c-15.2-15.2-39.9-15.2-55.2 0l-35.4 35.4c-3.8 3.8-3.8 10 0 13.8l90.2 90.2c3.8 3.8 10 3.8 13.8 0l35.4-35.4c15.2-15.3 15.2-40 0-55.2zM384 346.2V448H64V128h229.8c3.2 0 6.2-1.3 8.5-3.5l40-40c7.6-7.6 2.2-20.5-8.5-20.5H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V306.2c0-10.7-12.9-16-20.5-8.5l-40 40c-2.2 2.3-3.5 5.3-3.5 8.5z"],

4
public/mix-manifest.json

@ -1,4 +1,4 @@
{
"/css/app.css": "/css/app.css?id=62b46d36567ec0e3418f",
"/js/app.js": "/js/app.js?id=d8215a9716aec5f9e409"
"/css/app.css": "/css/app.css?id=e4ac968c3a08d246c3b0",
"/js/app.js": "/js/app.js?id=f5edf362209887248205"
}

15
readme.md

@ -38,7 +38,15 @@ Apart from the Laravel dependencies, namely PHP >= 7.1.3, OpenSSL PHP Extension,
If you find you can't change the background make sure `php_fileinfo` is enabled in your php.ini. I believe it should be by default, but one user came across the issue on a windows system.
Installation is as simple as cloning the repository somewhere, or downloading and extracting the zip/tar and pointing your httpd document root to the `/public` folder. For simple testing you could just go to the folder and type `php artisan serve`
Installation is as simple as cloning the repository somewhere, or downloading and extracting the zip/tar and pointing your httpd document root to the `/public` folder then creating the .env file and generating an encryption key (this is all taken care of for you with the docker).
```
cd /path/to/heimdall
cp .env.example .env
php artisan key:generate
```
For simple testing you could just go to the folder and type `php artisan serve`
There is also a multi-arch Docker which supports x86-64, armhf and arm64, instructions on how to use them at
@ -129,12 +137,11 @@ location / {
auth_basic "Restricted";
auth_basic_user_file /config/nginx/.htpasswd;
include /config/nginx/proxy.conf;
proxy_pass https://heimdall:443;
proxy_set_header X-Forwarded-Proto https;
proxy_pass http://heimdall;
}
```
If you are using HTTPS and things aren't working try adding `FORCE_HTTPS=true` to the end of your `.env` file or proxy to the https version of the app.
### Self-signed certificates and local CAs
Per default Heimdall uses the standard certificate bundle file (`ca-certificates.crt`) to verify HTTPS sites and will ignore additional certificates placed in `/etc/ssl/certs`. If you wish to use enhanced apps with HTTPS sites that use a self-signed certificate or certs signed with your own local CA, you can override the default bundle:

10
resources/assets/js/app.js

@ -1,5 +1,7 @@
$.when( $.ready ).then(function() {
var base = (document.querySelector('base') || {}).href;
if($('.message-container').length) {
setTimeout(
function()
@ -58,7 +60,7 @@ $.when( $.ready ).then(function() {
var timer = 5000;
var fun = function worker() {
$.ajax({
url: '/get_stats/'+id,
url: base+'/get_stats/'+id,
dataType: 'json',
success: function(data) {
container.html(data.html);
@ -118,7 +120,7 @@ $.when( $.ready ).then(function() {
attribute: 'data-id'
});
$.post(
'/order',
base+'/order',
{ order:idsInOrder }
);
}
@ -173,7 +175,7 @@ $.when( $.ready ).then(function() {
data[config] = $(this).val();
});
$.post('/test_config', { data: data }, function(data) {
$.post(base+'/test_config', { data: data }, function(data) {
alert(data);
});
@ -183,7 +185,7 @@ $.when( $.ready ).then(function() {
var current = $(this);
var id = current.data('id');
var tag = current.data('tag');
$.get('/items/pintoggle/'+id+'/true/'+tag, function(data) {
$.get(base+'/items/pintoggle/'+id+'/true/'+tag, function(data) {
var inner = $(data).filter('#sortable').html();
$('#sortable').html(inner);
current.toggleClass('active');

120
resources/lang/da/app.php

@ -0,0 +1,120 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| App Language Lines
|--------------------------------------------------------------------------
|
*/
'settings.system' => 'System',
'settings.appearance' => 'Appearance',
'settings.miscellaneous' => 'Miscellaneous',
'settings.support' => 'Support',
'settings.donate' => 'Doner',
'settings.version' => 'Version',
'settings.background_image' => 'Baggrundsbillede',
'settings.window_target' => 'Link opens in',
'settings.window_target.current' => 'Åbn i denne fane',
'settings.window_target.one' => 'Åbn i den samme fane',
'settings.window_target.new' => 'Åbn i en ny fane',
'settings.homepage_search' => 'Homepage Search',
'settings.search_provider' => 'Standardsøgemaskine',
'settings.language' => 'Sprog',
'settings.reset' => 'Nulstil tilbage til standard',
'settings.remove' => 'Fjern',
'settings.search' => 'søg',
'settings.no_items' => 'Intet fundet',
'settings.label' => 'Etiket',
'settings.value' => 'Værdi',
'settings.edit' => 'Rediger',
'settings.view' => 'Vis',
'options.none' => '- ikke indstillet -',
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.startpage' => 'Startside',
'options.yes' => 'Ja',
'options.no' => 'Nej',
'options.nzbhydra' => 'NZBHydra',
'options.jackett' => 'Jackett',
'buttons.save' => 'Gem',
'buttons.cancel' => 'Afbryd',
'buttons.add' => 'Tilføj',
'buttons.upload' => 'Upload et ikon',
'buttons.downloadapps' => 'Opdater apps-listen',
'dash.pin_item' => 'Fastgør element til dashboard',
'dash.no_apps' => 'Der er i øjeblikket ingen fastgjorte applikationer, :link1 eller :link2',
'dash.link1' => 'Add an application here',
'dash.link2' => 'Pin an item to the dash',
'dash.pinned_items' => 'Fastgjorte elementer',
'apps.app_list' => 'Applikations liste',
'apps.view_trash' => 'View trash',
'apps.add_application' => 'Tilføj applikation',
'apps.application_name' => 'Applikations navn',
'apps.colour' => 'Farver',
'apps.icon' => 'Ikon',
'apps.pinned' => 'Fastgjort',
'apps.title' => 'Titel',
'apps.hex' => 'Hex farver',
'apps.username' => 'brugernavn',
'apps.password' => 'kodeord',
'apps.config' => 'Config',
'apps.apikey' => 'API nøgle',
'apps.enable' => 'Aktiver',
'apps.tag_list' => 'Tags liste',
'apps.add_tag' => 'Tilføj tag',
'apps.tag_name' => 'Tag navn',
'apps.tags' => 'Tags',
'apps.override' => 'Hvis det er anderledes end hovedwebadressen',
'apps.preview' => 'Eksempel',
'apps.apptype' => 'Applikationstype',
'dashboard' => 'Home dashboard',
'user.user_list' => 'Brugere',
'user.add_user' => 'Tilføj bruger',
'user.username' => 'Brugernavn',
'user.avatar' => 'Avatar',
'user.email' => 'E-mail',
'user.password_confirm' => 'Bekræft kodeord',
'user.secure_front' => 'Tillad offentlig adgang til forsiden - Kun håndhævet, hvis der er angivet en adgangskode.',
'user.autologin' => 'Tillad at logge ind fra en bestemt URL. Alle med linket kan logge ind.',
'url' => 'URL',
'title' => 'Title',
'delete' => 'Slet',
'optional' => 'Valgfri',
'restore' => 'Genskab',
'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.updating' => 'Updating apps list',
'alert.success.tag_created' => 'Tag oprettet med succes',
'alert.success.tag_updated' => 'Tag opdateret med succes',
'alert.success.tag_deleted' => 'Tag slettet med succes',
'alert.success.tag_restored' => 'Tag genskabt med succes',
'alert.success.setting_updated' => 'You have successfully edited this setting',
'alert.error.not_exist' => 'Denne indstilling findes ikke.',
'alert.success.user_created' => 'Bruger oprettet med succes',
'alert.success.user_updated' => 'Bruger opdateret med succes',
'alert.success.user_deleted' => 'Bruger slettet med succes',
'alert.success.user_restored' => 'Bruger genskabt med succes',
];

19
resources/lang/da/pagination.php

@ -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; Tidligere',
'next' => 'Næste &raquo;',
];

22
resources/lang/da/passwords.php

@ -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' => 'Adgangskoder skal bestå af mindst seks tegn og matche bekræftelsen.',
'reset' => 'Din adgangskode er nulstillet!',
'sent' => 'Vi har sendt dig en e-mail med et link til nulstilling af adgangskode!',
'token' => 'Dit token er ikke gyldigt!',
'user' => "Vi kan ikke finde en bruger med den e-mail-adresse.",
];

120
resources/lang/el/app.php

@ -0,0 +1,120 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| App Language Lines
|--------------------------------------------------------------------------
|
*/
'settings.system' => 'Σύστημα',
'settings.appearance' => 'Εμφάνιση',
'settings.miscellaneous' => 'Λοιπά',
'settings.support' => 'Υποστήριξη',
'settings.donate' => 'Δωρεά',
'settings.version' => 'Έκδοση',
'settings.background_image' => 'Εικόνα Παρασκηνίου',
'settings.window_target' => 'Ο Σύνδεσμος ανοίγει σε',
'settings.window_target.current' => 'Άνοιγμα σε αυτή την καρτέλα',
'settings.window_target.one' => 'Άνοιγμα στην ίδια καρτέλα',
'settings.window_target.new' => 'Άνοιγμα σε νέα καρτέλα',
'settings.homepage_search' => 'Αναζήτηση στην Αρχική Σελίδα',
'settings.search_provider' => 'Προεπιλεγμένος Πάροχος Αναζήτησης',
'settings.language' => 'Γλώσσα',
'settings.reset' => 'Επαναφορά πίσω στις προεπιλογές',
'settings.remove' => 'Αφαίρεση',
'settings.search' => 'αναζήτηση',
'settings.no_items' => 'Δε βρεθηκαν αποτελέσματα',
'settings.label' => 'Ετικέτα',
'settings.value' => 'Τιμή',
'settings.edit' => 'Επεξεργασία',
'settings.view' => 'Προβολή',
'options.none' => '- μη ορισμένο -',
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.startpage' => 'StartPage',
'options.yes' => 'Ναι',
'options.no' => 'Όχι',
'options.nzbhydra' => 'NZBHydra',
'options.jackett' => 'Jackett',
'buttons.save' => 'Αποθήκευση',
'buttons.cancel' => 'Ακύρωση',
'buttons.add' => 'Προσθήκη',
'buttons.upload' => 'Μεταφόρτωση ενός αρχείου',
'buttons.downloadapps' => 'Ανανέωση Λίστας Εφαρμογών',
'dash.pin_item' => 'Καρφίτσωμα του αντικειμένου στο ταμπλό',
'dash.no_apps' => 'Δεν υπάρχουν προς το παρόν καρφιτσωμένες εφαρμογές, :link1 ή :link2',
'dash.link1' => 'Προσθήκη μίας εφαρμογής εδώ',
'dash.link2' => 'Καρφίτσωμα ενός αντικειμένου στο ταμπλό',
'dash.pinned_items' => 'Καρφιτσωμένα αντικείμενα',
'apps.app_list' => 'Λίστα Εφαρμογών',
'apps.view_trash' => 'Εμφάνιση Απορριμμάτων',
'apps.add_application' => 'Προσθήκη εφαρμογής',
'apps.application_name' => 'Όνομα Εφαρμογής',
'apps.colour' => 'Χρώμα',
'apps.icon' => 'Εικονίδιο',
'apps.pinned' => 'Καρφιτσωμένο',
'apps.title' => 'Τίτλος',
'apps.hex' => 'Hex χρώμα',
'apps.username' => 'Όνομα χρήστη',
'apps.password' => 'Κωδικός πρόσβασης',
'apps.config' => 'Ρύθμιση',
'apps.apikey' => 'Κλειδί API',
'apps.enable' => 'Ενεργοποίηση',
'apps.tag_list' => 'Λίστα Ετικετών',
'apps.add_tag' => 'Προσθήκη ετικέτας',
'apps.tag_name' => 'Όνομα Ετικέτας',
'apps.tags' => 'Ετικέτες',
'apps.override' => 'Αν διαφορετικό με το κύριο url',
'apps.preview' => 'Προεπισκόπιση',
'apps.apptype' => 'Τύπος Εφαρμογής',
'dashboard' => 'Αρχικό ταμπλό',
'user.user_list' => 'Χρήστες',
'user.add_user' => 'Προσθήκη χρήστη',
'user.username' => 'Όνομα χρήστη',
'user.avatar' => 'Εικόνα χρήστη',
'user.email' => 'Email',
'user.password_confirm' => 'Επιβεβαίωση κωδικού πρόσβασης',
'user.secure_front' => 'Χορήγηση δημόσιας πρόσβασης στο εμπρόσθιο τμήμα - Τίθεται σε ενέργεια μόνο εαν έχει ορισθεί κωδικός.',
'user.autologin' => 'Χορήγηση πρόσβασης από ένα συγκεκριμένο URL. Οποιοσδήποτε με τον σύνδεσμο μπορεί να εισέρθει.',
'url' => 'URL',
'title' => 'Τίτλος',
'delete' => 'Διαγραφή',
'optional' => 'Προεραιτικό',
'restore' => 'Επαναφορά',
'alert.success.item_created' => 'Το αντικείμενο δημιουργήθηκε επιτυχώς',
'alert.success.item_updated' => 'Το αντικείμενο ενημερώθηκε επιτυχώς',
'alert.success.item_deleted' => 'Το αντικείμενο διαγράφηκε επιτυχώς',
'alert.success.item_restored' => 'Το αντικείμενο επαναφέρθηκε επιτυχώς',
'alert.success.updating' => 'Η λίστα των εφαρμογών ενημερώνεται',
'alert.success.tag_created' => 'Η ετικέτα δημιουργήθηκε επιτυχώ',
'alert.success.tag_updated' => 'Η ετικέτα ενημερώθηκε επιτυχώς',
'alert.success.tag_deleted' => 'Η ετικέτα διαγράφηκε επιτυχώς',
'alert.success.tag_restored' => 'Η ετικέτα επαναφέρθηκε επιτυχώς',
'alert.success.setting_updated' => 'Επεξεργαστήκατε επιτυχώς αυτή τη ρύθμιση',
'alert.error.not_exist' => 'Αυτή η ρύθμιση δεν υπάρχει.',
'alert.success.user_created' => 'Ο χρήστης δημιουργήθηκε επιτυχώς',
'alert.success.user_updated' => 'Ο χρήστης ενημερώθηκε επιτυχώς',
'alert.success.user_deleted' => 'Ο χρήστης διαγράφηκε επιτυχώς',
'alert.success.user_restored' => 'Ο χρήστης επαναφέρθηκε επιτυχώς',
];

19
resources/lang/el/auth.php

@ -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' => 'Αυτά τα διαπιστευτήρια δεν ταιριάζουν με τα μητρώα μας.',
'throttle' => 'Πολλές προσπάθειες εισόδου. Παρακαλούμε προσπαθήστε ξανά σε :seconds δευτερόλεπτα.',
];

19
resources/lang/el/pagination.php

@ -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; Προηγούμενη',
'next' => 'Επόμενη &raquo;',
];

22
resources/lang/el/passwords.php

@ -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' => 'Οι κωδικοί πρόσβασης πρέπει να αποτελλούνται τουλάχιστον από έξι χαρακτήρες και να ταιριάζουν με την επικύρωση.',
'reset' => 'Έχει γίνει επαναφορά του κωδικού σας!',
'sent' => 'Σας στείλαμε ένα Ε-mail με τον σύνδεσμο για την επαναφορά του κωδικού πρόσβασής σας!',
'token' => 'Αυτό το token για την επαναφορά του κωδικού πρόσβασής σας είναι άκυρο.',
'user' => "Δεν μπορούμε να βρόυμε κάποιον χρήστη με αυτή τη διεύθυνση E-mail.",
];

121
resources/lang/el/validation.php

@ -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 πρέπει να έχει γίνει αποδεκτό.',
'active_url' => 'Το πεδίο :attribute δέν είναι μία έγκυρη διεύθυνση URL.',
'after' => 'Το πεδίο :attribute πρέπει να είναι μία ημερομηνία μετά από :date.',
'after_or_equal' => 'Το πεδίο :attribute πρέπει να είναι μία ημερομηνία μετά από :date ή ίδια με :date.',
'alpha' => 'Το πεδίο :attribute μπορεί να περιέχει μόνο γράμματαμπορεί να περιέχει μόνο γράμματα.',
'alpha_dash' => 'Το πεδίο :attribute μπορεί να περιέχει μόνο γράμματα, αριθμούς, και παύλες.',
'alpha_num' => 'Το πεδίο :attribute μπορεί να περιέχει μόνο γράμματα και αριθμούς.',
'array' => 'Το πεδίο :attribute πρέπει να είναι ένας πίνακας.',
'before' => 'Το πεδίο :attribute πρέπει να είναι μία ημερομηνία πρίν από :date.',
'before_or_equal' => 'Το πεδίο :attribute πρέπει να είναι μία ημερομηνία πρίν από :date ή ίση με :date.',
'between' => [
'numeric' => 'Το πεδίο :attribute πρέπει να είναι μεταξύ από :min και :max.',
'file' => 'Το πεδίο :attribute πρέπει να είναι μεταξύ από :min και :max kilobytes.',
'string' => 'Το πεδίο :attribute πρέπει να είναι μεταξύ από :min και :max characters.',
'array' => 'Το πεδίο :attribute πρέπει να έχει μεταξύ :min και :max αντικείμενα.',
],
'boolean' => 'Το πεδίο :attribute πρέπει να είναι αληθές ή ψευδές.',
'confirmed' => 'Η επικύρωση του πεδίου :attribute δεν ταιριάζει.',
'date' => 'Το πεδίο :attribute δεν είναι μία έγκυρη ημερομηνία.',
'date_format' => 'Το πεδίο :attribute δεν ταιριάζει με τη μορφή :format.',
'different' => 'Τα πεδία :attribute και :other πρέπει να είναι διαφορετικά.',
'digits' => 'Το πεδίο :attribute πρέπει να είναι :digits ψηφία.',
'digits_between' => 'Το πεδίο :attribute πρέπει να είναι μεταξύ από :min και :max ψηφία.',
'dimensions' => 'Το πεδίο :attribute δεν έχει έγκυρες διαστάσεις εικόνας.',
'distinct' => 'Το πεδίο :attribute έχει μία διπλότυπη τιμή.',
'email' => 'Το πεδίο :attribute πρέπει να είναι μία έγκυρη διεύθυνση E-mail.',
'exists' => 'Το επιλεγμένο πεδίο :attribute είναι άκυρο.',
'file' => 'Το πεδίο :attribute πρέπει να έιναι ένα αρχείο.',
'filled' => 'Το πεδίο :attribute πρέπει να έχει μία τιμή.',
'image' => 'Το πεδίο :attribute πρέπει να είναι μία εικόνα.',
'in' => 'Το πεδίο selected :attribute είναι άκυρο.',
'in_array' => 'Το πεδίο :attribute δεν υπάρχει στο :other.',
'integer' => 'Το πεδίο :attribute πρέπει να είναι ένας ακέραιος αριθμός.',
'ip' => 'Το πεδίο :attribute πρέπει να είναι μία έγκυρη διεύθυνση IP.',
'ipv4' => 'Το πεδίο :attribute πρέπει να είναι μία έγκυρη διεύθυνση IPv4.',
'ipv6' => 'Το πεδίο :attribute πρέπει να είναι μία έγκυρη διεύθυνση IPv6.',
'json' => 'Το πεδίο :attribute πρέπει να είναι ένα έγκυρο JSON string.',
'max' => [
'numeric' => 'Το πεδίο :attribute δεν γίνεται να είναι μεγαλύτερο από :max.',
'file' => 'Το πεδίο :attribute δεν γίνεται να είναι μεγαλύτερο από :max kilobytes.',
'string' => 'Το πεδίο :attribute δεν γίνεται να είναι μεγαλύτερο από :max χαρακτήρες.',
'array' => 'Το πεδίο :attribute δεν γίνεται να έχει περισσότερα από :max αντικείμενα.',
],
'mimes' => 'Το πεδίο :attribute πρέπει να είναι ένα αρχείου τύπου: :values.',
'mimetypes' => 'Το πεδίο :attribute πρέπει να είναι ένα αρχείου τύπου: :values.',
'min' => [
'numeric' => 'Το πεδίο :attribute πρέπει να είναι τουλάχιστον :min.',
'file' => 'Το πεδίο :attribute πρέπει να είναι τουλάχιστον :min kilobytes.',
'string' => 'Το πεδίο :attribute πρέπει να είναι τουλάχιστον :min χαρακτήρες.',
'array' => 'Το πεδίο :attribute πρέπει να έχει τουλάχιστον :min αντικείμενα.',
],
'not_in' => 'Το επιλεγμένο πεδίο :attribute είναι άκυρο.',
'numeric' => 'Το πεδίο :attribute πρέπει να ένας αριθμός.',
'present' => 'Το πεδίο :attribute πρέπει να είναι παρόν.',
'regex' => 'Η μορφή του πεδίου :attribute είναι άκυρη.',
'required' => 'Το πεδίο :attribute είναι απαιτούμενο.',
'required_if' => 'Το πεδίο :attribute είναι απαιτούμενο εάν :other είναι :value.',
'required_unless' => 'Το πεδίο :attribute είναι απαιτούμενο εκτός αν :other βρίσκεται στις τιμές :values.',
'required_with' => 'Το πεδίο :attribute είναι απαιτούμενο εάν οι τιμές :values είναι παρούσες.',
'required_with_all' => 'Το πεδίο :attribute είναι απαιτούμενο εάν οι τιμές :values είναι παρούσες.',
'required_without' => 'Το πεδίο :attribute είναι απαιτούμενο εάν οι τιμές :values δεν είναι παρούσες.',
'required_without_all' => 'Το πεδίο :attribute είναι απαιτούμενο εάν καμία από τις τιμές :values δεν είναι παρούσες.',
'same' => 'Το πεδίο :attribute και :other πρέπει να είναι ίδια.',
'size' => [
'numeric' => 'Το πεδίο :attribute πρέπει να είναι :size.',
'file' => 'Το πεδίο :attribute πρέπει να είναι :size kilobytes.',
'string' => 'Το πεδίο :attribute πρέπει να είναι :size χαρακτήρες.',
'array' => 'Το πεδίο :attribute πρέπει να περιέχει :size αντικείμενα.',
],
'string' => 'Το πεδίο :attribute πρέπει να είναι ένα string.',
'timezone' => 'Το πεδίο :attribute πρέπει να είναι μία έγκυρη ζώνη ώρας.',
'unique' => 'Το πεδίο :attribute έχει ήδη χρησιμοποιηθεί.',
'uploaded' => 'Το πεδίο :attribute απέτυχε να μεταφορτωθεί.',
'url' => 'Η μορφή του πεδίου :attribute είναι άκυρη.',
/*
|--------------------------------------------------------------------------
| 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' => [],
];

3
resources/lang/en/app.php

@ -44,11 +44,12 @@ return [
'options.yes' => 'Yes',
'options.no' => 'No',
'options.nzbhydra' => 'NZBHydra',
'options.jackett' => 'Jackett',
'buttons.save' => 'Save',
'buttons.cancel' => 'Cancel',
'buttons.add' => 'Add',
'buttons.upload' => 'Upload a file',
'buttons.upload' => 'Upload an icon',
'buttons.downloadapps' => 'Update Apps List',
'dash.pin_item' => 'Pin item to dashboard',

9
resources/lang/es/app.php

@ -22,6 +22,7 @@ return array (
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.jackett' => 'Jackett',
'options.yes' => 'Sí',
'options.no' => 'No',
'buttons.save' => 'Guardar',
@ -29,19 +30,19 @@ return array (
'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.no_apps' => 'Actualmente no hay aplicaciones ancladas, :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.view_trash' => 'Vista de la papelera de reciclaje',
'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.hex' => 'Código de color hexadecimal',
'apps.username' => 'Nombre de usuario',
'apps.password' => 'Contraseña',
'apps.config' => 'Config',
@ -56,4 +57,4 @@ return array (
'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.',
);
);

2
resources/lang/fi/app.php

@ -74,7 +74,7 @@ return array (
'apps.preview' => 'Esikatsele',
'user.user_list' => 'KÄyttäjät',
'user.user_list' => 'Käyttäjät',
'user.add_user' => 'Lisää käyttäjä',
'user.username' => 'Käyttäjänimi',
'user.avatar' => 'Avatar',

84
resources/lang/it/app.php

@ -1,20 +1,23 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| App Language Lines
|--------------------------------------------------------------------------
|
*/
'settings.system' => 'Sistema',
'settings.appearance' => 'Aspetto',
'settings.miscellaneous' => 'Miscellaneous',
'settings.miscellaneous' => 'Altre impostazioni',
'settings.support' => 'Supporto',
'settings.donate' => 'Dona',
'settings.version' => 'Versione',
'settings.background_image' => 'Immagine di sfondo',
'settings.window_target' => 'Apri link in',
'settings.window_target.current' => 'Apri in questa scheda',
'settings.window_target.one' => 'Apri nella stessa scheda',
'settings.window_target.new' => 'Apri in una nuova scheda',
'settings.homepage_search' => 'Ricerca in homepage',
'settings.search_provider' => 'Motore di ricerca',
'settings.language' => 'Lingua',
@ -23,33 +26,35 @@ return [
'settings.search' => 'Cerca',
'settings.no_items' => 'Nessun elemento trovato',
'settings.label' => 'Etichetta',
'settings.label' => 'Nome',
'settings.value' => 'Valore',
'settings.edit' => 'Modifica',
'settings.view' => 'Vista',
'settings.view' => 'Mostra',
'options.none' => '- non impostato -',
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.yes' => 'Si',
'options.startpage' => 'StartPage',
'options.yes' => 'Sì',
'options.no' => 'No',
'options.nzbhydra' => 'NZBHydra',
'buttons.save' => 'Salva',
'buttons.cancel' => 'Annulla',
'buttons.add' => 'Aggiungi',
'buttons.upload' => 'Aggiungi un file',
'buttons.upload' => 'Carica un file',
'buttons.downloadapps' => 'Aggiorna lista app',
'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.app_list' => 'Lista applicazioni',
'apps.view_trash' => 'Mostra cestino',
'apps.add_application' => 'Aggiungi applicazione',
'apps.application_name' => 'Nome dell\'applicazione',
'apps.colour' => 'Colore',
@ -60,22 +65,49 @@ return [
'apps.username' => 'Nome utente',
'apps.password' => 'Password',
'apps.config' => 'Configurazione',
'apps.apikey' => 'Api Key',
'apps.apikey' => 'Chiave API',
'apps.enable' => 'Abilitato',
'apps.tag_list' => 'Lista tag',
'apps.add_tag' => 'Aggiungi tag',
'apps.tag_name' => 'Nome tag',
'apps.tags' => 'Tag',
'apps.override' => 'Se diverso dall\'url principale',
'apps.preview' => 'Anteprima',
'apps.apptype' => 'Tipo di applicazione',
'dashboard' => 'Home dashboard',
'user.user_list' => 'Utenti',
'user.add_user' => 'Aggiungi utente',
'user.username' => 'Username',
'user.avatar' => 'Logo',
'user.email' => 'Email',
'user.password_confirm' => 'Conferma password',
'user.secure_front' => 'Permetti accesso pubblico alla pagina principale - Vale solo se una password è stata definita.',
'user.autologin' => 'Abilita login da una URL specifica. Chiunque con questa URL può accedere.',
'url' => 'Url',
'title' => 'Titolo',
'delete' => 'Elimina',
'optional' => 'Opzionale',
'restore' => 'Ripristina',
'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.',
];
'alert.success.updating' => 'Aggiornamento lista app',
'alert.success.tag_created' => 'Tag creato con successo',
'alert.success.tag_updated' => 'Tag aggiornato con successo',
'alert.success.tag_deleted' => 'Tag eliminato con successo',
'alert.success.tag_restored' => 'Tag ripristinato con successo',
'alert.success.setting_updated' => 'Hai modificato questa impostazione con successo',
'alert.error.not_exist' => 'Questa impostazione non esiste.',
'alert.success.user_created' => 'Utente creato con successo',
'alert.success.user_updated' => 'Utente aggiornato con successo',
'alert.success.user_deleted' => 'Utente eliminato con successo',
'alert.success.user_restored' => 'Utente ripristinato con successo',
];

15
resources/lang/it/auth.php

@ -0,0 +1,15 @@
<?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' => 'Le credenziali non sono valide.',
'throttle' => 'Troppi tentativi di accesso. Riprovare in :seconds secondi.',
];

15
resources/lang/it/pagination.php

@ -0,0 +1,15 @@
<?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; Precedente',
'next' => 'Successivo &raquo;',
];

120
resources/lang/sl/app.php

@ -0,0 +1,120 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| App Language Lines
|--------------------------------------------------------------------------
|
*/
'settings.system' => 'Sistem',
'settings.appearance' => 'Videz',
'settings.miscellaneous' => 'Ostalo',
'settings.support' => 'Podpora',
'settings.donate' => 'Doniraj',
'settings.version' => 'Verzija',
'settings.background_image' => 'Slika za ozadje',
'settings.window_target' => 'Povezava se odpre v',
'settings.window_target.current' => 'Odpri v tem zavihku',
'settings.window_target.one' => 'Odpri v istem zavihku',
'settings.window_target.new' => 'Odpri v novem zavihku',
'settings.homepage_search' => 'Iskanje po domači strani',
'settings.search_provider' => 'Privzeti ponudnik iskanja',
'settings.language' => 'Jezik',
'settings.reset' => 'Ponastavi na privzeto',
'settings.remove' => 'Odstrani',
'settings.search' => 'išči',
'settings.no_items' => 'Ni najdenih elementov',
'settings.label' => 'Oznaka',
'settings.value' => 'Vrednost',
'settings.edit' => 'Uredi',
'settings.view' => 'Poglej',
'options.none' => '- ni nastavljeno -',
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.startpage' => 'StartPage',
'options.yes' => 'Da',
'options.no' => 'Ne',
'options.nzbhydra' => 'NZBHydra',
'options.jackett' => 'Jackett',
'buttons.save' => 'Shrani',
'buttons.cancel' => 'Prekliči',
'buttons.add' => 'Dodaj',
'buttons.upload' => 'Naloži ikono',
'buttons.downloadapps' => 'Posodobi Seznam Aplikacij',
'dash.pin_item' => 'Pripni element na nadzorno ploščo',
'dash.no_apps' => 'Trenutno ni pripetih aplikacij, :link1 ali :link2',
'dash.link1' => 'Dodaj aplikacijo tukaj',
'dash.link2' => 'Pripni aplikacijo na nadzorno ploščo',
'dash.pinned_items' => 'Pripeti elementi',
'apps.app_list' => 'Seznam aplikacij',
'apps.view_trash' => 'Poglej smeti',
'apps.add_application' => 'Dodaj aplikacijo',
'apps.application_name' => 'Ime aplikacije',
'apps.colour' => 'Barva',
'apps.icon' => 'Ikona',
'apps.pinned' => 'Pripeto',
'apps.title' => 'Naslov',
'apps.hex' => 'Hex barva',
'apps.username' => 'Uporabniško ime',
'apps.password' => 'Geslo',
'apps.config' => 'Konfiguracija',
'apps.apikey' => 'API Ključ',
'apps.enable' => 'Omogoči',
'apps.tag_list' => 'Seznam oznak',
'apps.add_tag' => 'Dodaj oznako',
'apps.tag_name' => 'Ime oznake',
'apps.tags' => 'Oznake',
'apps.override' => 'Če je drugače od glavnega url-ja',
'apps.preview' => 'Predogled',
'apps.apptype' => 'Tip aplikacije',
'dashboard' => 'Home dashboard',
'user.user_list' => 'Uporabniki',
'user.add_user' => 'Dodaj uporabnika',
'user.username' => 'Uporabniško ime',
'user.avatar' => 'Avatar',
'user.email' => 'Email',
'user.password_confirm' => 'Potrdi geslo',
'user.secure_front' => 'Dovoli javni dostop do strani - Samo če je nastavljeno geslo.',
'user.autologin' => 'Dovoli prijavo iz specifičnega URL-ja. Vsi s povezavo se lahko prijavijo.',
'url' => 'URL',
'title' => 'Naslov',
'delete' => 'Izbriši',
'optional' => 'Opcijsko',
'restore' => 'Obnovi',
'alert.success.item_created' => 'Element uspešno ustvarjen',
'alert.success.item_updated' => 'Element uspešno posodobljen',
'alert.success.item_deleted' => 'Element uspešno izbrisan',
'alert.success.item_restored' => 'Element uspešno obnovljen',
'alert.success.updating' => 'Posodabljam seznam aplikacij',
'alert.success.tag_created' => 'Oznaka uspešno ustvarjena',
'alert.success.tag_updated' => 'Oznaka uspešno posodobljena',
'alert.success.tag_deleted' => 'Oznaka uspešno izbrisana',
'alert.success.tag_restored' => 'Oznaka uspešno obnovljena',
'alert.success.setting_updated' => 'Uspešno uredil to oznako',
'alert.error.not_exist' => 'Ta nastavitev ne obstaja.',
'alert.success.user_created' => 'Uporabnik uspešno ustvarjen',
'alert.success.user_updated' => 'Uporabnik uspešno posodobljen',
'alert.success.user_deleted' => 'Uporabnik uspešno izbrisan',
'alert.success.user_restored' => 'Uporabnik uspešno obnovljen',
];

19
resources/lang/sl/auth.php

@ -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' => 'Podatki za prijavo se ne ujemajo.',
'throttle' => 'Preveč poizkusov prijave. Ponovno poizkusi čez :seconds sekund.',
];

19
resources/lang/sl/pagination.php

@ -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; Prejšna',
'next' => 'Naslednja &raquo;',
];

22
resources/lang/sl/passwords.php

@ -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' => 'Geslo mora imeti najmanj šest znakov in se mora ujemati s potrditvijo.',
'reset' => 'Tvoje geslo je bilo ponastavljeno!',
'sent' => 'Na tvoj email smo poslali povezavo za ponastavitev gesla!',
'token' => 'Ta ključ za ponastavitev gesla ni veljaven.',
'user' => "Ne najdemo uporabnika s tem e-naslovom.",
];

121
resources/lang/sl/validation.php

@ -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 mora biti potrjen.',
'active_url' => ':attribute ni pravilen URL naslov.',
'after' => ':attribute mora biti datum po :date.',
'after_or_equal' => ':attribute mora biti datum po ali enak :date.',
'alpha' => ':attribute lahko vsebuje samo črke.',
'alpha_dash' => ':attribute lahko vsebuje samo črke, številke in pomišljaje.',
'alpha_num' => ':attribute lahko vsebuje samo črke in številke.',
'array' => ':attribute mora biti niz podatkov.',
'before' => ':attribute mora biti datum pred :date.',
'before_or_equal' => ':attribute mora biti datum pred ali enak :date.',
'between' => [
'numeric' => ':attribute mora biti med :min in :max.',
'file' => ':attribute mora biti med :min in :max kilobajtov.',
'string' => ':attribute mora biti med :min in :max znakov.',
'array' => ':attribute mora biti med :min in :max elementov.',
],
'boolean' => ':attribute polje mora biti true ali false.',
'confirmed' => ':attribute potrditev se ne ujema.',
'date' => ':attribute ni pravilen datum.',
'date_format' => ':attribute se ne ujema s formatom :format.',
'different' => ':attribute in :other morata biti različna.',
'digits' => ':attribute mora imeti :digits mest.',
'digits_between' => ':attribute mora biti med :in and :max mest.',
'dimensions' => ':attribute ima nepravilne dimenzije slike.',
'distinct' => ':attribute polje ima podvojeno vrednost.',
'email' => ':attribute mora biti pravilen e-naslov.',
'exists' => 'izbrani :attribute ni pravilen.',
'file' => ':attribute mora biti datoteka.',
'filled' => ':attribute polje mora imeti vrednost.',
'image' => ':attribute mora biti slika.',
'in' => 'izbrani :attribute ni pravilen.',
'in_array' => ':attribute polje ne obstaja v :other.',
'integer' => ':attribute mora biti številka.',
'ip' => ':attribute mora biti veljaven IP naslov.',
'ipv4' => ':attribute must be a valid IPv4 naslov.',
'ipv6' => ':attribute must be a valid IPv6 naslov.',
'json' => ':attribute mora biti veljaven JSON.',
'max' => [
'numeric' => ':attribute ne sme biti več kot :max.',
'file' => ':attribute ne sme biti več kot :max kilobajtov.',
'string' => ':attribute ne sme biti več kot :max znakov.',
'array' => ':attribute ne sme imeti več kot :max elementov.',
],
'mimes' => ':attribute mora biti datoteka tipa: :values.',
'mimetypes' => ':attribute mora biti datoteka tipa: :values.',
'min' => [
'numeric' => ':attribute mora biti najmanj :min.',
'file' => ':attribute mora biti najmanj :min kilobajtov.',
'string' => ':attribute mora imeti najmanj :min znakov.',
'array' => ':attribute mora imeti najmanj :min elementov.',
],
'not_in' => 'izbrani :attribute ni pravilen.',
'numeric' => ':attribute mora biti številka.',
'present' => ':attribute polje mora biti prisotno.',
'regex' => ':attribute format ni veljaven.',
'required' => ':attribute polje je obvezno.',
'required_if' => ':attribute polje je obvezno, če :other je :value.',
'required_unless' => ':attribute polje je obvezno, razen če :other je v :values.',
'required_with' => ':attribute polje je obvezno, če :values je prisotno.',
'required_with_all' => ':attribute polje je obvezno, če :values je prisotno.',
'required_without' => ':attribute polje je obvezno, ko :values ni prisotno.',
'required_without_all' => ':attribute polje je obvezno, ko nobeden od :values ni prisotnih.',
'same' => ':attribute in :other se morata ujemati.',
'size' => [
'numeric' => ':attribute mora biti :size.',
'file' => ':attribute mora biti :size kilobajtov.',
'string' => ':attribute mora imeti :size znakov.',
'array' => ':attribute mora imeti :size elementov.',
],
'string' => ':attribute mora biti niz.',
'timezone' => ':attribute mora biti veljavno časovna cona.',
'unique' => ':attribute je že zasedeno.',
'uploaded' => ':attribute nalaganje neuspešno.',
'url' => ':attribute format ni pravilen.',
/*
|--------------------------------------------------------------------------
| 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' => [],
];

2
resources/views/item.blade.php

@ -13,6 +13,6 @@
</div>
<a title="{{ App\Item::getApplicationDescription($app->class) }}" class="link{{ title_color($app->colour) }}"{!! $app->link_target !!} href="{{ $app->link }}"><i class="fas {{ $app->link_icon }}"></i></a>
</div>
<a class="item-edit" href="{{ route($app->link_type.'.edit', [ $app->id ], false) }}"><i class="fas fa-pencil"></i></a>
<a class="item-edit" href="{{ route($app->link_type.'.edit', [ $app->id ]) }}"><i class="fas fa-pencil"></i></a>
</section>

6
resources/views/items/form.blade.php

@ -16,7 +16,7 @@
</label>
</div>
<button type="submit"class="button"><i class="fa fa-save"></i><span>{{ __('app.buttons.save') }}</span></button>
<a href="{{ route('items.index', [], false) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
<a href="{{ route('items.index', []) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
</div>
</header>
<div id="create" class="create">
@ -56,7 +56,7 @@
<img src="{{ asset('storage/'.$icon) }}" />
{!! Form::hidden('icon', $icon, ['class' => 'form-control']) !!}
@else
<img src="/img/heimdall-icon-small.png" />
<img src="{{ asset('/img/heimdall-icon-small.png') }}" />
@endif
</div>
<div class="upload-btn-wrapper">
@ -105,7 +105,7 @@
<div class="section-title">&nbsp;</div>
<div class="module-actions">
<button type="submit"class="button"><i class="fa fa-save"></i><span>{{ __('app.buttons.save') }}</span></button>
<a href="{{ route('items.index', [], false) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
<a href="{{ route('items.index', []) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
</div>
</footer>

10
resources/views/items/list.blade.php

@ -6,14 +6,14 @@
<div class="section-title">
{{ __('app.apps.app_list') }}
@if( isset($trash) && $trash->count() > 0 )
<a class="trashed" href="{{ route('items.index', ['trash' => true], false) }}">{{ __('app.apps.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('applist', [], false) }}" class="button"><i class="fa fa-cloud-download"></i><span>{{ __('app.buttons.downloadapps') }}</span></a>
<a href="{{ route('items.create', [], false) }}" title="" class="button"><i class="fa fa-plus"></i><span>{{ __('app.buttons.add') }}</span></a>
<a href="{{ route('dash', [], false) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
<a href="{{ route('applist', []) }}" class="button"><i class="fa fa-cloud-download"></i><span>{{ __('app.buttons.downloadapps') }}</span></a>
<a href="{{ route('items.create', []) }}" title="" class="button"><i class="fa fa-plus"></i><span>{{ __('app.buttons.add') }}</span></a>
<a href="{{ route('dash', []) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
</div>
</header>
@ -32,7 +32,7 @@
<tr>
<td>{{ $app->title }}</td>
<td><a href="{{ $app->url }}">{{ $app->link }}</a></td>
<td class="text-center"><a{{ $app->target }} href="{!! route('items.edit', [$app->id], false) !!}" title="{{ __('app.settings.edit') }} {!! $app->title !!}"><i class="fas fa-edit"></i></a></td>
<td class="text-center"><a{{ $app->target }} 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>

2
resources/views/items/preview.blade.php

@ -16,6 +16,6 @@
</div>
<a class="link{{ title_color($item->colour) }}"{!! $item->link_target !!} href="{{ $item->link }}"><i class="fas {{ $item->link_icon }}"></i></a>
</div>
<a class="item-edit" href="{{ route($item->link_type.'.edit', [ $item->id ], false) }}"><i class="fas fa-pencil"></i></a>
<a class="item-edit" href="{{ route($item->link_type.'.edit', [ $item->id ]) }}"><i class="fas fa-pencil"></i></a>
</section>

4
resources/views/items/scripts.blade.php

@ -2,6 +2,8 @@
<script>
$( function() {
var base = (document.querySelector('base') || {}).href;
var elem = $('.color-picker')[0];
var hueb = new Huebee( elem, {
// options
@ -59,7 +61,7 @@
$('#tile-preview .app-icon').attr('src', data.iconview);
$('#tile-preview .title').html(data.name);
if(data.config != null) {
$.get('/view/'+data.config, function(getdata) {
$.get(base+'/view/'+data.config, function(getdata) {
$('#sapconfig').html(getdata).show();
});
} else {

4
resources/views/items/trash.blade.php

@ -7,7 +7,7 @@
Showing Deleted Applications
</div>
<div class="module-actions">
<a href="{{ route('items.index', [], false) }}" title="" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.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>
@ -26,7 +26,7 @@
<tr>
<td>{{ $app->title }}</td>
<td>{{ __('app.url') }}</td>
<td class="text-center"><a href="{!! route('items.restore', [$app->id], false) !!}" title="{{ __('app.restore') }} {!! $app->title !!}"><i class="fas fa-undo"></i></a></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" />

21
resources/views/layouts/app.blade.php

@ -28,6 +28,11 @@
<meta name="apple-mobile-web-app-capable" content="yes">
<link rel="stylesheet" href="{{ asset('css/app.css?v=2') }}" type="text/css" />
<script src="{{ asset('js/fontawesome.js') }}"></script>
@if(config('app.url') !== 'http://localhost')
<base href="{{ config('app.url') }}">
@else
<base href="{{ url('') }}">
@endif
</head>
<body>
<div id="app"{!! $alt_bg !!}>
@ -40,7 +45,7 @@
<?php
$active = ((bool)$app->pinned === true) ? 'active' : '';
?>
<li>{{ $app->title }}<a class="{{ $active }}" data-tag="{{ $tag ?? 0 }}" data-id="{{ $app->id }}" href="{{ route('items.pintoggle', [$app->id], false, false) }}"><i class="fas fa-thumbtack"></i></a></li>
<li>{{ $app->title }}<a class="{{ $active }}" data-tag="{{ $tag ?? 0 }}" data-id="{{ $app->id }}" href="{{ route('items.pintoggle', [$app->id]) }}"><i class="fas fa-thumbtack"></i></a></li>
@endforeach
</ul>
@ -49,8 +54,8 @@
<div class="content">
<header class="appheader">
<ul>
<li><a href="{{ route('dash', [], false) }}">Dash</a></li><li>
<a href="{{ route('items.index', [], false) }}">Items</a></li>
<li><a href="{{ route('dash', []) }}">Dash</a></li><li>
<a href="{{ route('items.index', []) }}">Items</a></li>
</ul>
</header>
<main>
@ -91,13 +96,13 @@
<a id="config-button" class="config" href=""><i class="fas fa-exchange"></i></a>
@endif
<a id="dash" class="config" href="{{ route('dash', [], false) }}"><i class="fas fa-th"></i></a>
<a id="dash" class="config" href="{{ route('dash', []) }}"><i class="fas fa-th"></i></a>
@if($current_user->id === 1)
<a id="users" class="config" href="{{ route('users.index', [], false) }}"><i class="fas fa-user"></i></a>
<a id="users" class="config" href="{{ route('users.index', []) }}"><i class="fas fa-user"></i></a>
@endif
<a id="items" class="config" href="{{ route('items.index', [], false) }}"><i class="fas fa-list"></i></a>
<a id="folder" class="config" href="{{ route('tags.index', [], false) }}"><i class="fas fa-tag"></i></a>
<a id="settings" class="config" href="{{ route('settings.index', [], false) }}"><i class="fas fa-cogs"></i></a>
<a id="items" class="config" href="{{ route('items.index', []) }}"><i class="fas fa-list"></i></a>
<a id="folder" class="config" href="{{ route('tags.index', []) }}"><i class="fas fa-tag"></i></a>
<a id="settings" class="config" href="{{ route('settings.index', []) }}"><i class="fas fa-cogs"></i></a>
</div>
</main>

4
resources/views/settings/form.blade.php

@ -3,7 +3,7 @@
<div class="section-title">{{ __($setting->label) }}</div>
<div class="module-actions">
<button type="submit"class="button"><i class="fa fa-save"></i><span>{{ __('app.buttons.save') }}</span></button>
<a href="{{ route('settings.index', [], false) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
<a href="{{ route('settings.index', []) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
</div>
</header>
<div class="create">
@ -23,7 +23,7 @@
<div class="section-title">&nbsp;</div>
<div class="module-actions">
<button type="submit"class="button"><i class="fa fa-save"></i><span>{{ __('app.buttons.save') }}</span></button>
<a href="{{ route('settings.index', [], false) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
<a href="{{ route('settings.index', []) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
</div>
</footer>

2
resources/views/settings/list.blade.php

@ -29,7 +29,7 @@
</td>
<td class="text-center">
@if((bool)$setting->system !== true)
<a href="{!! route('settings.edit', ['id' => $setting->id], false) !!}" title="{{ __('app.settings.edit') }} {!! $setting->label !!}" class="secondary"><i class="fa fa-pencil"></i></a>
<a href="{!! route('settings.edit', ['id' => $setting->id]) !!}" title="{{ __('app.settings.edit') }} {!! $setting->label !!}" class="secondary"><i class="fa fa-pencil"></i></a>
@endif
</td>
</tr>

4
resources/views/tags/form.blade.php

@ -3,7 +3,7 @@
<div class="section-title">{{ __('app.apps.add_tag') }}</div>
<div class="module-actions">
<button type="submit"class="button"><i class="fa fa-save"></i><span>{{ __('app.buttons.save') }}</span></button>
<a href="{{ route('tags.index', [], false) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
<a href="{{ route('tags.index', []) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
</div>
</header>
<div id="create" class="create">
@ -59,7 +59,7 @@
<div class="section-title">&nbsp;</div>
<div class="module-actions">
<button type="submit"class="button"><i class="fa fa-save"></i><span>{{ __('app.buttons.save') }}</span></button>
<a href="{{ route('tags.index', [], false) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
<a href="{{ route('tags.index', []) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
</div>
</footer>

8
resources/views/tags/list.blade.php

@ -6,13 +6,13 @@
<div class="section-title">
{{ __('app.apps.tag_list') }}
@if( isset($trash) && $trash->count() > 0 )
<a class="trashed" href="{{ route('tags.index', ['trash' => true], false) }}">{{ __('app.apps.view_trash') }} ({{ $trash->count() }})</a>
<a class="trashed" href="{{ route('tags.index', ['trash' => true]) }}">{{ __('app.apps.view_trash') }} ({{ $trash->count() }})</a>
@endif
</div>
<div class="module-actions">
<a href="{{ route('tags.create', [], false) }}" title="" class="button"><i class="fa fa-plus"></i><span>{{ __('app.buttons.add') }}</span></a>
<a href="{{ route('dash', [], false) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
<a href="{{ route('tags.create', []) }}" title="" class="button"><i class="fa fa-plus"></i><span>{{ __('app.buttons.add') }}</span></a>
<a href="{{ route('dash', []) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
</div>
</header>
@ -31,7 +31,7 @@
<tr>
<td>{{ $app->title }}</td>
<td><a{{ $app->target }} href="/tag/{{ $app->url }}">{{ $app->link }}</a></td>
<td class="text-center"><a href="{!! route('tags.edit', [$app->id], false) !!}" title="{{ __('app.settings.edit') }} {!! $app->title !!}"><i class="fas fa-edit"></i></a></td>
<td class="text-center"><a href="{!! route('tags.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' => ['tags.destroy', $app->id],'style'=>'display:inline']) !!}
<button class="link" type="submit"><i class="fa fa-trash-alt"></i></button>

4
resources/views/tags/trash.blade.php

@ -7,7 +7,7 @@
Showing Deleted Applications
</div>
<div class="module-actions">
<a href="{{ route('tags.index', [], false) }}" title="" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
<a href="{{ route('tags.index', []) }}" title="" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
</div>
</header>
@ -26,7 +26,7 @@
<tr>
<td>{{ $app->title }}</td>
<td>{{ __('app.url') }}</td>
<td class="text-center"><a href="{!! route('tags.restore', [ $app->id ], false) !!}" title="{{ __('app.restore') }} {!! $app->title !!}"><i class="fas fa-undo"></i></a></td>
<td class="text-center"><a href="{!! route('tags.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' => ['tags.destroy', $app->id],'style'=>'display:inline']) !!}
<input type="hidden" name="force" value="1" />

4
resources/views/users/form.blade.php

@ -3,7 +3,7 @@
<div class="section-title">{{ __('app.user.add_user') }}</div>
<div class="module-actions">
<button type="submit"class="button"><i class="fa fa-save"></i><span>{{ __('app.buttons.save') }}</span></button>
<a href="{{ route('users.index', [], false) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
<a href="{{ route('users.index', []) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
</div>
</header>
<div id="create" class="create">
@ -88,7 +88,7 @@
<div class="section-title">&nbsp;</div>
<div class="module-actions">
<button type="submit"class="button"><i class="fa fa-save"></i><span>{{ __('app.buttons.save') }}</span></button>
<a href="{{ route('users.index', [], false) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
<a href="{{ route('users.index', []) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
</div>
</footer>

8
resources/views/users/index.blade.php

@ -6,13 +6,13 @@
<div class="section-title">
{{ __('app.user.user_list') }}
@if( isset($trash) && $trash->count() > 0 )
<a class="trashed" href="{{ route('users.index', ['trash' => true], false) }}">{{ __('app.apps.view_trash') }} ({{ $trash->count() }})</a>
<a class="trashed" href="{{ route('users.index', ['trash' => true]) }}">{{ __('app.apps.view_trash') }} ({{ $trash->count() }})</a>
@endif
</div>
<div class="module-actions">
<a href="{{ route('users.create', [], false) }}" title="" class="button"><i class="fa fa-plus"></i><span>{{ __('app.buttons.add') }}</span></a>
<a href="{{ route('dash', [], false) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
<a href="{{ route('users.create', []) }}" title="" class="button"><i class="fa fa-plus"></i><span>{{ __('app.buttons.add') }}</span></a>
<a href="{{ route('dash', []) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
</div>
</header>
@ -39,7 +39,7 @@
<a href="{{ route('user.autologin', $user->autologin) }}">{{ route('user.autologin', $user->autologin) }}</a>
@endif
</td>
<td class="text-center"><a{{ $user->target }} href="{!! route('users.edit', [$user->id], false) !!}" title="{{ __('user.settings.edit') }} {!! $user->title !!}"><i class="fas fa-edit"></i></a></td>
<td class="text-center"><a{{ $user->target }} href="{!! route('users.edit', [$user->id]) !!}" title="{{ __('user.settings.edit') }} {!! $user->title !!}"><i class="fas fa-edit"></i></a></td>
<td class="text-center">
@if($user->id !== 1)
{!! Form::open(['method' => 'DELETE','route' => ['users.destroy', $user->id],'style'=>'display:inline']) !!}

4
resources/views/users/trash.blade.php

@ -7,7 +7,7 @@
Showing Deleted Applications
</div>
<div class="module-actions">
<a href="{{ route('items.index', [], false) }}" title="" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.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>
@ -26,7 +26,7 @@
<tr>
<td>{{ $app->title }}</td>
<td>{{ __('app.url') }}</td>
<td class="text-center"><a href="{!! route('items.restore', [$app->id], false) !!}" title="{{ __('app.restore') }} {!! $app->title !!}"><i class="fas fa-undo"></i></a></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" />

2
resources/views/welcome.blade.php

@ -10,7 +10,7 @@
<div class="alert alert-danger">
<p>{!! __('app.dash.no_apps',
[
'link1' => '<a href="'.route('items.create', [], false).'">'.__('app.dash.link1').'</a>',
'link1' => '<a href="'.route('items.create', []).'">'.__('app.dash.link1').'</a>',
'link2' => '<a id="pin-item" href="">'.__('app.dash.link2').'</a>'
]) !!}</p>
</div>

4
routes/web.php

@ -13,6 +13,10 @@ use Illuminate\Http\Request;
|
*/
if(\Config::get('app.url') !== 'http://localhost') {
URL::forceRootUrl(\Config::get('app.url'));
}
Route::get('/userselect/{user}', 'Auth\LoginController@setUser')->name('user.set');
Route::get('/userselect', 'UserController@selectUser')->name('user.select');
Route::get('/autologin/{uuid}', 'Auth\LoginController@autologin')->name('user.autologin');

2
webpack.mix.js

@ -11,7 +11,7 @@ let mix = require('laravel-mix');
|
*/
mix.scripts([
mix.babel([
//'resources/assets/js/jquery-ui.min.js',
'resources/assets/js/huebee.js',
'resources/assets/js/app.js'

Loading…
Cancel
Save