Compare commits

...

58 Commits

Author SHA1 Message Date
KodeStar 61a5a1a8b0
Merge pull request #530 from jhaveDK/master 4 years ago
Jesper Have e51cdd7f7a Danish translation update 4 years ago
Jesper Have a626222ff3 Opdateret 4 years ago
Jesper Have af68a45a3d . 4 years ago
Jesper Have 7969df9344 Danish translation 4 years ago
KodeStar 3a9bdd2c43
Merge pull request #458 from AndyTempel/slovenian-translation 5 years ago
AndrazKorenc 0292e9976e added Slovenian translation 5 years ago
KodeStar c058e1a452 Merge pull request #446 from vinanrra/patch-1 5 years ago
vinanrra 7f42967b67 Update app.php 5 years ago
KodeStar 994961de54 Merge pull request #438 from LeoShivas/patch-1 5 years ago
KodeStar 049d20536c Merge pull request #397 from scottt732/search-app-fixes 5 years ago
LeoShivas c9c8171a52
Make background image relative 5 years ago
KodeStar e7a6ac5a75
Merge pull request #412 from vincentbitter/remote_user-login 5 years ago
KodeStar 3a372107ba
Merge pull request #405 from vorpalhex/feature/#376/upload_icon_text 5 years ago
KodeStar 493374de65
Merge pull request #404 from panigrc/feature-greek-translation 5 years ago
Vincent Bitter c43fc929f7 Do not try to login if user was not found 5 years ago
Vincent Bitter 895d5f2ebe Check if variables are empty since they always exist 5 years ago
VorpalHex cb4768e2cf Update 'upload a file' to 'upload an icon' 5 years ago
panigrc 6ca4bfb9ee Add greek language to the SettingsSeeder 5 years ago
panigrc 1f7de03d90 Add greek language files 5 years ago
Scott Holodak 861d287750 Improved custom search handling 5 years ago
KodeStar e2cc32fd0a
Merge pull request #392 from auanasgheps/patch-1 5 years ago
KodeStar 762df25c45
Merge pull request #393 from auanasgheps/patch-2 5 years ago
KodeStar 0b114e7dc1
Merge pull request #394 from auanasgheps/patch-3 5 years ago
Oliver Cervera 981876c43c
Create pagination.php 5 years ago
Oliver Cervera 7fe9c477e3
Create Italian auth.php 5 years ago
Oliver Cervera 5b3a7f4e02
Update Italian app.php 5 years ago
Kode 60e20c4023 fix route typo when restoring trash 5 years ago
Chris 9e1bb6c075 Update composer min php version 5 years ago
KodeStar 9c05d0d803
Update readme.md 5 years ago
KodeStar 3d1393c0b3
Merge pull request #370 from scodx/patch-1 5 years ago
KodeStar 9914fdb111
Merge pull request #373 from alxlaxv/patch-1 5 years ago
alxlaxv 9b24c9f1b5
New translation for new SearchInterface 5 years ago
Oscar Sánchez 81b8c646d2
some minor spanish translations fixes 5 years ago
Chris f734832e0f remove url() from around app link 5 years ago
KodeStar 1bde11b30b
Update readme.md 5 years ago
Kode 9e80c3fe40 2.2.2 hasn't been released yet 5 years ago
Kode f272dd13ce Fix for tags not showing 5 years ago
Chris 9f26de89a4 add remember user and missing check icon 5 years ago
Chris e23964ebad set session and remember user when logged in via remote means 5 years ago
Chris d0584ac941 Update app version ready for next release 5 years ago
Chris 1410c41f48 Add REMOTE_USER auth 5 years ago
Chris 5f524563cf Merge branch 'master' of https://github.com/linuxserver/Heimdall 5 years ago
Chris 3d181623c3 fix small issue 5 years ago
KodeStar 1919dbfd96
Update readme.md 5 years ago
Chris 8e1615ac5f fix search tab behaviour and tag link in subfolder 5 years ago
Chris 7966f07fdb update scripts + add home dash as default tag 5 years ago
Chris ac8fe7012b remove false from routes 5 years ago
Chris 51d89dae82 Possible fix for folder based RP 5 years ago
KodeStar ef21ac0fe7
Merge pull request #359 from pahakalle/patch-1 5 years ago
KodeStar 02697687cc
Merge pull request #364 from linuxserver/hometags 5 years ago
Kode fd2f7f27a6 Make home tag translatable 5 years ago
Kode 21b1ef5e4b fix pin toggle and get homepage dash working 5 years ago
Chris e452d3b5f6 add seed 5 years ago
Chris 1419882455 initial 5 years ago
KodeStar d79202ed87
Update readme.md 5 years ago
KodeStar aa05c947a9
Remove url validation 5 years ago
Kalle Laine dd4b94ba71
Fix typo in Finnish translation 5 years ago
  1. 12
      app/Helper.php
  2. 4
      app/Http/Controllers/Auth/LoginController.php
  3. 51
      app/Http/Controllers/ItemController.php
  4. 8
      app/Http/Controllers/SettingsController.php
  5. 13
      app/Http/Controllers/TagController.php
  6. 6
      app/Http/Controllers/UserController.php
  7. 2
      app/Http/Middleware/TrustProxies.php
  8. 26
      app/Item.php
  9. 10
      app/ItemTag.php
  10. 14
      app/Providers/AppServiceProvider.php
  11. 18
      app/Search.php
  12. 2
      composer.json
  13. 2
      config/app.php
  14. 26
      database/seeds/SettingsSeeder.php
  15. 4
      package.json
  16. 2
      public/js/app.js
  17. 1
      public/js/fontawesome.js
  18. 4
      public/mix-manifest.json
  19. 18
      readme.md
  20. 11
      resources/assets/js/app.js
  21. 120
      resources/lang/da/app.php
  22. 19
      resources/lang/da/pagination.php
  23. 22
      resources/lang/da/passwords.php
  24. 120
      resources/lang/el/app.php
  25. 19
      resources/lang/el/auth.php
  26. 19
      resources/lang/el/pagination.php
  27. 22
      resources/lang/el/passwords.php
  28. 121
      resources/lang/el/validation.php
  29. 5
      resources/lang/en/app.php
  30. 9
      resources/lang/es/app.php
  31. 2
      resources/lang/fi/app.php
  32. 84
      resources/lang/it/app.php
  33. 15
      resources/lang/it/auth.php
  34. 15
      resources/lang/it/pagination.php
  35. 120
      resources/lang/sl/app.php
  36. 19
      resources/lang/sl/auth.php
  37. 19
      resources/lang/sl/pagination.php
  38. 22
      resources/lang/sl/passwords.php
  39. 121
      resources/lang/sl/validation.php
  40. 2
      resources/views/item.blade.php
  41. 6
      resources/views/items/form.blade.php
  42. 10
      resources/views/items/list.blade.php
  43. 2
      resources/views/items/preview.blade.php
  44. 4
      resources/views/items/scripts.blade.php
  45. 4
      resources/views/items/trash.blade.php
  46. 25
      resources/views/layouts/app.blade.php
  47. 4
      resources/views/settings/form.blade.php
  48. 2
      resources/views/settings/list.blade.php
  49. 4
      resources/views/tags/form.blade.php
  50. 8
      resources/views/tags/list.blade.php
  51. 4
      resources/views/tags/trash.blade.php
  52. 4
      resources/views/users/form.blade.php
  53. 8
      resources/views/users/index.blade.php
  54. 4
      resources/views/users/trash.blade.php
  55. 2
      resources/views/welcome.blade.php
  56. 6
      routes/web.php
  57. 2
      webpack.mix.js
  58. 6400
      yarn.lock

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

51
app/Http/Controllers/ItemController.php

@ -13,6 +13,7 @@ use Illuminate\Support\Facades\Storage;
use App\SupportedApps;
use App\Jobs\ProcessApps;
use App\Search;
use Illuminate\Support\Facades\Route;
class ItemController extends Controller
{
@ -27,8 +28,16 @@ class ItemController extends Controller
*/
public function dash()
{
$data['apps'] = Item::doesntHave('parents')->pinned()->orderBy('order', 'asc')->get();
$data['all_apps'] = Item::doesntHave('parents')->get();
$data['apps'] = Item::whereHas('parents', function ($query) {
$query->where('id', 0);
})->orWhere('type', 1)->pinned()->orderBy('order', 'asc')->get();
$data['all_apps'] = Item::whereHas('parents', function ($query) {
$query->where('id', 0);
})->orWhere('type', 1)->orderBy('order', 'asc')->get();
//$data['all_apps'] = Item::doesntHave('parents')->get();
//die(print_r($data['apps']));
return view('welcome', $data);
}
@ -57,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);
}
@ -71,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);
}
@ -80,20 +89,25 @@ class ItemController extends Controller
*
* @return \Illuminate\Http\Response
*/
public function pinToggle($id, $ajax=false)
public function pinToggle($id, $ajax=false, $tag=false)
{
$item = Item::findOrFail($id);
$new = ((bool)$item->pinned === true) ? false : true;
$item->pinned = $new;
$item->save();
if($ajax) {
$data['apps'] = Item::pinned()->get();
if(is_numeric($tag) && $tag > 0) {
$item = Item::whereId($tag)->first();
$data['apps'] = $item->children()->pinned()->orderBy('order', 'asc')->get();
} else {
$data['apps'] = Item::pinned()->orderBy('order', 'asc')->get();
}
$data['ajax'] = true;
return view('sortable', $data);
} else {
$route = route('dash', [], false);
$route = route('dash', []);
return redirect($route);
}
}
}
@ -125,7 +139,8 @@ class ItemController extends Controller
{
//
$data['tags'] = Item::ofType('tag')->orderBy('title', 'asc')->pluck('title', 'id');
$data['current_tags'] = [];
$data['tags']->prepend(__('app.dashboard'), 0);
$data['current_tags'] = collect([0 => __('app.dashboard')]);
return view('items.create', $data);
}
@ -141,7 +156,7 @@ class ItemController extends Controller
//
$validatedData = $request->validate([
'title' => 'required|max:255',
'url' => 'required|url',
'url' => 'required',
]);
if($request->hasFile('file')) {
@ -173,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'));
}
@ -200,8 +215,10 @@ class ItemController extends Controller
// Get the item
$data['item'] = Item::find($id);
$data['tags'] = Item::ofType('tag')->orderBy('title', 'asc')->pluck('title', 'id');
$data['current_tags'] = $data['item']->parents;
$data['tags']->prepend(__('app.dashboard'), 0);
$data['current_tags'] = $data['item']->tags();
//$data['current_tags'] = $data['item']->parent;
//die(print_r($data['current_tags']));
// show the edit form and pass the nerd
return view('items.edit', $data);
}
@ -217,7 +234,7 @@ class ItemController extends Controller
{
$validatedData = $request->validate([
'title' => 'required|max:255',
'url' => 'required|url',
'url' => 'required',
]);
//die(print_r($request->all()));
if($request->hasFile('file')) {
@ -248,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'));
}
@ -271,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'));
}
@ -289,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'),

13
app/Http/Controllers/TagController.php

@ -22,8 +22,8 @@ class TagController extends Controller
{
$trash = (bool)$request->input('trash');
$data['apps'] = Item::ofType('tag')->orderBy('title', 'asc')->get();
$data['trash'] = Item::ofType('tag')->onlyTrashed()->get();
$data['apps'] = Item::ofType('tag')->where('id', '>', 0)->orderBy('title', 'asc')->get();
$data['trash'] = Item::ofType('tag')->where('id', '>', 0)->onlyTrashed()->get();
if($trash) {
return view('tags.trash', $data);
} else {
@ -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'));
}
@ -90,6 +90,7 @@ class TagController extends Controller
$item = Item::whereUrl($slug)->first();
//print_r($item);
$data['apps'] = $item->children()->pinned()->orderBy('order', 'asc')->get();
$data['tag'] = $item->id;
$data['all_apps'] = $item->children;
return view('welcome', $data);
}
@ -138,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'));
}
@ -161,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'));
}
@ -178,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.

26
app/Item.php

@ -7,6 +7,7 @@ use Symfony\Component\ClassLoader\ClassMapGenerator;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Builder;
use App\User;
use App\ItemTag;
use App\Application;
class Item extends Model
@ -19,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);
if($current_user) {
$builder->where('user_id', $current_user->id)->orWhere('user_id', 0);
} else {
$builder->where('user_id', 0);
}
});
}
@ -70,6 +75,25 @@ class Item extends Model
}
public function tags()
{
$id = $this->id;
$tags = ItemTag::select('tag_id')->where('item_id', $id)->pluck('tag_id')->toArray();
$tagdetails = Item::select('id', 'title', 'url', 'pinned')->whereIn('id', $tags)->get();
//print_r($tags);
if(in_array(0, $tags)) {
$details = new Item([
"id" => 0,
"title" => __('app.dashboard'),
"url" => '',
"pinned" => 0
]);
$tagdetails->prepend($details);
}
return $tagdetails;
}
public function parents()
{
return $this->belongsToMany('App\Item', 'item_tag', 'item_id', 'tag_id');

10
app/ItemTag.php

@ -0,0 +1,10 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Relations\Pivot;
class ItemTag extends Pivot
{
}

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.0',
'version' => '2.2.3',
/*
|--------------------------------------------------------------------------

26
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;
@ -194,5 +195,22 @@ class SettingsSeeder extends Seeder
$setting->save();
}
if(!$home_tag = \App\Item::find(0)) {
$home_tag = new \App\Item;
$home_tag->id = 0;
$home_tag->title = 'app.dashboard';
$home_tag->pinned = 0;
$home_tag->url = '';
$home_tag->type = 1;
$home_tag->user_id = 0;
$home_tag->save();
$homeapps = \App\Item::withoutGlobalScope('user_id')->doesntHave('parents')->get();
foreach($homeapps as $app) {
if($app->id === 0) continue;
$app->parents()->attach(0);
}
}
}
}

4
package.json

@ -13,7 +13,9 @@
"bootstrap-sass": "^3.4.1",
"cross-env": "^5.2.0",
"jquery": "^3.4.1",
"laravel-mix": "^4.0.16"
"laravel-mix": "^4.0.16",
"sass": "^1.21.0",
"sass-loader": "7.*"
},
"dependencies": {
"select2": "^4.0.7"

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=c067b0b68e4516e903e1",
"/js/app.js": "/js/app.js?id=8dc4a6ea723d0df7469d"
"/css/app.css": "/css/app.css?id=e4ac968c3a08d246c3b0",
"/js/app.js": "/js/app.js?id=f5edf362209887248205"
}

18
readme.md

@ -34,11 +34,19 @@ Supported applications are recognized by the title of the application as entered
[![foundationapps](https://img.shields.io/badge/dynamic/json.svg?label=Foundation%20Apps&url=https%3A%2F%2Fapps.heimdall.site%2Fstats&query=foundation_apps&colorB=3f8483&style=for-the-badge&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAjCAMAAACw/5reAAAAnFBMVEUAAADu7u7u7u7u7u7u7u7x8fHu7u7u7u7u7u7u7u7u7u7u7u7r6+vu7u7v7+/u7u7t7e3v7+/v7+/u7u7u7u7u7u7u7u7u7u7u7u7u7u7v7+/u7u7p6ent7e3v7+/v7+/v7+/u7u7u7u7u7u7u7u7t7e3////u7u7u7u7u7u7u7u7w8PDw8PDt7e3u7u7t7e3s7Ozu7u7t7e3u7u4TnCP6AAAAM3RSTlMA+9n3phHw3czC088M5Y5zG6mflWdJFumyfj4sB2NeTi7hiWlDOQPGt5lsMiG9hFQntpFqxQJtAAABnElEQVQoz2WRh3KrQAxFtYWO6ZhucItrynv6/3/LFnA24c6wurpnYBkJZvXduNix6+GXTo8qWnxUPU4m2w0O1ktTozPsftiZpejGlm7C2MWUnRcWOohIo36+PaKyDZdLUOgDXvqQfaT9kwkfvP3AN18E7Kl8hkJHMHSXSSadxaTtTNjJhMkfjFHKMqGlolg4T7mtCbcq8gBCotxkwklFLIQSlQoTHnVWQqzNxYQuzpfmqGVMc5ijHK5yAuIhxbZ5p/S92RZkjv5BKs6aosSIr0JrcXBo1FtICVINKRKK6u0GnraoN84O5KbhjRwYzxCJnQCMtotkdNxjq2F7dJ2RoGuXIBTvc3ROthdmat6hZ7cOyfcxKGV+wTxBkxQxTQTzWOFny/7qS2nzx37T7nbtZj9xu7zUr/323nVy0sQnhwMJktSZrl5v7CjgSQmWi+haUCY8sH4tyc/FGSKGouS+WqBJm8U2NIE/+nLu2tzpF/xVNGy02QzRClafC/ysVpDzQJuA8xXsKl8bv+pgpXz57H9Yy3J1lQNY62wUrW+mdzrylWS0QwAAAABJRU5ErkJggg==)](https://apps.heimdall.site/applications/foundation)
## Installing
Apart from the Laravel dependencies, namely PHP >= 7.1.3, OpenSSL PHP Extension, PDO PHP Extension, Mbstring PHP Extension, Tokenizer PHP Extension, XML PHP Extension, Ctype PHP Extension and JSON PHP Extension, the only other thing Heimdall needs is sqlite support and zip support (php-zip).
Apart from the Laravel dependencies, namely PHP >= 7.1.3, OpenSSL PHP Extension, PDO PHP Extension, Filter PHP Extension, Mbstring PHP Extension, Tokenizer PHP Extension, XML PHP Extension, Ctype PHP Extension and JSON PHP Extension, the only other thing Heimdall needs is sqlite support and zip support (php-zip).
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
@ -76,6 +84,7 @@ Currently added languages are
### Apache
A `.htaccess` file ships with the app, however, a lot of apache installations disallow `.htaccess` files by default.
You will notice this due to some links not working like `/settings`.
In addition mod-rewrite needs to be enabled if it isn't already.
#### Fixes & work around options
##### - Apache global allow .htaccess
@ -128,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:

11
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);
});
@ -182,7 +184,8 @@ $.when( $.ready ).then(function() {
e.preventDefault();
var current = $(this);
var id = current.data('id');
$.get('items/pintoggle/'+id+'/true', function(data) {
var tag = current.data('tag');
$.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' => [],
];

5
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',
@ -79,6 +80,8 @@ return [
'apps.preview' => 'Preview',
'apps.apptype' => 'Application Type',
'dashboard' => 'Home dashboard',
'user.user_list' => 'Users',
'user.add_user' => 'Add user',
'user.username' => 'Username',

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" />

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

@ -26,8 +26,13 @@
<meta name="theme-color" content="#ffffff">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<link rel="stylesheet" href="{{ asset('css/app.css') }}" type="text/css" />
<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-id="{{ $app->id }}" href="{{ route('items.pintoggle', [$app->id], 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>
@ -105,7 +110,7 @@
</div>
<script src="{{ asset('js/jquery-3.3.1.min.js') }}"></script>
<script src="{{ asset('js/jquery-ui.min.js') }}"></script>
<script src="{{ asset('js/app.js?v=2') }}"></script>
<script src="{{ asset('js/app.js?v=4') }}"></script>
@yield('scripts')
</body>

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>

6
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');
@ -35,7 +39,7 @@ Route::get('tag/restore/{id}', 'TagController@restore')->name('tags.restore');
Route::get('items/pin/{id}', 'ItemController@pin')->name('items.pin');
Route::get('items/restore/{id}', 'ItemController@restore')->name('items.restore');
Route::get('items/unpin/{id}', 'ItemController@unpin')->name('items.unpin');
Route::get('items/pintoggle/{id}/{ajax?}', 'ItemController@pinToggle')->name('items.pintoggle');
Route::get('items/pintoggle/{id}/{ajax?}/{tag?}', 'ItemController@pinToggle')->name('items.pintoggle');
Route::post('order', 'ItemController@setOrder')->name('items.order');
Route::post('appload', 'ItemController@appload')->name('appload');

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'

6400
yarn.lock

File diff suppressed because it is too large
Loading…
Cancel
Save