| @ -0,0 +1,15 @@ | |||||
| composer.phar | |||||
| /vendor/ | |||||
| node_modules | |||||
| .env | |||||
| *.log | |||||
| rysnc_exclude | |||||
| storage/csv/* | |||||
| !storage/csv/.gitkeep | |||||
| storage/database/* | |||||
| !storage/database/.gitkeep | |||||
| storage/cache/* | |||||
| !storage/cache/.gitkeep | |||||
| @ -0,0 +1,28 @@ | |||||
| <?php | |||||
| namespace App\Flight; | |||||
| use Flight; | |||||
| /** | |||||
| * abstract FlightAbstract get instance of flight engine | |||||
| * | |||||
| * | |||||
| * @author Björn Hase | |||||
| * @license http://opensource.org/licenses/MIT The MIT License | |||||
| * | |||||
| */ | |||||
| abstract class FlightAbstract | |||||
| { | |||||
| /** object of flight */ | |||||
| protected $app; | |||||
| /** | |||||
| * getting object of flight | |||||
| * | |||||
| */ | |||||
| public function __construct() | |||||
| { | |||||
| $this->app = Flight::app(); | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,42 @@ | |||||
| <?php | |||||
| /** | |||||
| * fake function for blade @inject | |||||
| * | |||||
| * @param string $class | |||||
| * @return object | |||||
| */ | |||||
| function app($class) | |||||
| { | |||||
| return new $class(); | |||||
| } | |||||
| /** | |||||
| * function similar to blade asset | |||||
| * | |||||
| * @param $path | |||||
| * @return string | |||||
| * | |||||
| */ | |||||
| function asset($path, $prefix = '/public') | |||||
| { | |||||
| // get flight | |||||
| $app = Flight::app(); | |||||
| // getting basePath | |||||
| $basePath = $app->get('basePath'); | |||||
| // path to mix-manifest | |||||
| $file = $app->get('basePath').'mix-manifest.json'; | |||||
| if (file_exists($file)) { | |||||
| $manifest = file_get_contents($file); | |||||
| $files = json_decode($manifest, true); | |||||
| if (isset($files[$prefix.$path])) { | |||||
| $path = str_replace($prefix, '', $files[$prefix.$path]); | |||||
| } | |||||
| } | |||||
| return $path; | |||||
| } | |||||
| @ -0,0 +1,27 @@ | |||||
| <?php | |||||
| namespace App\Http; | |||||
| use Rakit\Validation\Validator; | |||||
| use App\Flight\FlightAbstract; | |||||
| use App\Models\Bucket; | |||||
| use Carbon\Carbon; | |||||
| /** | |||||
| * | |||||
| * | |||||
| * | |||||
| * | |||||
| * @author Björn Hase | |||||
| * @link https://gitea.tentakelfabrik.de/mITSM/feedback GitHub Repository | |||||
| * | |||||
| * | |||||
| */ | |||||
| class Bucket extends FlightAbstract | |||||
| { | |||||
| public function indexAction() | |||||
| { | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,31 @@ | |||||
| <?php | |||||
| namespace App\Http; | |||||
| use Rakit\Validation\Validator; | |||||
| use App\Flight\FlightAbstract; | |||||
| use App\Models\Bucket; | |||||
| use Carbon\Carbon; | |||||
| /** | |||||
| * | |||||
| * | |||||
| * | |||||
| * | |||||
| * @author Björn Hase | |||||
| * @link https://gitea.tentakelfabrik.de/mITSM/feedback GitHub Repository | |||||
| * | |||||
| * | |||||
| */ | |||||
| class Home extends FlightAbstract | |||||
| { | |||||
| public function indexAction() | |||||
| { | |||||
| $this->app->render('index', [ | |||||
| ]); | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,26 @@ | |||||
| <?php | |||||
| namespace App\Models; | |||||
| /** | |||||
| * Store for Courses | |||||
| * | |||||
| * | |||||
| * @author Björn Hase | |||||
| * @link https://gitea.tentakelfabrik.de/mITSM/feedback GitHub Repository | |||||
| * | |||||
| */ | |||||
| class Bucket extends ModelAbstract | |||||
| { | |||||
| // name of store | |||||
| protected $name = 'buckets'; | |||||
| public function findByVisiblity($visiblity) | |||||
| { | |||||
| return $this->store->findBy( | |||||
| [ 'visiblity' => $visiblity ], | |||||
| [ 'created_at' => 'ASC' ], | |||||
| 100 | |||||
| ); | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,46 @@ | |||||
| <?php | |||||
| namespace App\Models; | |||||
| use SleekDB\Store; | |||||
| use SleekDB\Query; | |||||
| /** | |||||
| * Abstract Class for Stores | |||||
| * | |||||
| * | |||||
| * @author Björn Hase | |||||
| * @link https://gitea.tentakelfabrik.de/mITSM/feedback GitHub Repository | |||||
| * | |||||
| */ | |||||
| class ModelAbstract | |||||
| { | |||||
| // store of model | |||||
| public $store; | |||||
| // name of store | |||||
| protected $name; | |||||
| // configuration of store | |||||
| protected $configuration = [ | |||||
| 'auto_cache' => true, | |||||
| 'cache_lifetime' => null, | |||||
| 'timeout' => 120, | |||||
| 'primary_key' => '_id', | |||||
| 'search' => [ | |||||
| 'min_length' => 2, | |||||
| 'mode' => 'or', | |||||
| 'score_key' => 'scoreKey', | |||||
| 'algorithm' => Query::SEARCH_ALGORITHM['hits'] | |||||
| ] | |||||
| ]; | |||||
| /** | |||||
| * | |||||
| * | |||||
| */ | |||||
| public function __construct() | |||||
| { | |||||
| $this->store = new Store($this->name, __DIR__.'/../../storage/database', $this->configuration); | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,17 @@ | |||||
| <?php | |||||
| namespace App\Models; | |||||
| /** | |||||
| * Store for Tags | |||||
| * | |||||
| * | |||||
| * @author Björn Hase | |||||
| * @link https://gitea.tentakelfabrik.de/mITSM/feedback GitHub Repository | |||||
| * | |||||
| */ | |||||
| class Tag extends ModelAbstract | |||||
| { | |||||
| // name of store | |||||
| protected $name = 'tags'; | |||||
| } | |||||
| @ -0,0 +1,17 @@ | |||||
| <?php | |||||
| namespace App\Models; | |||||
| /** | |||||
| * Store for Users | |||||
| * | |||||
| * | |||||
| * @author Björn Hase | |||||
| * @link https://gitea.tentakelfabrik.de/mITSM/feedback GitHub Repository | |||||
| * | |||||
| */ | |||||
| class User extends ModelAbstract | |||||
| { | |||||
| // name of store | |||||
| protected $name = 'users'; | |||||
| } | |||||
| @ -0,0 +1,31 @@ | |||||
| <?php | |||||
| // adding functions | |||||
| require_once(__DIR__.'/Flight/Functions.php'); | |||||
| // adding env | |||||
| $env = Dotenv\Dotenv::createImmutable(__DIR__.'/..'); | |||||
| $env->load(); | |||||
| // display all errors if debug is true | |||||
| if (getenv('DEBUG') === true) { | |||||
| error_reporting(E_ALL); | |||||
| ini_set('display_errors', 1); | |||||
| } | |||||
| // create app | |||||
| $app = Flight::app(); | |||||
| // setting view path | |||||
| $app->set('flight.views.path', __DIR__.'/../resources/views'); | |||||
| // adding blade for templates | |||||
| Flight::register('view', 'Jenssegers\Blade\Blade', [ $app->get('flight.views.path'), __DIR__.'/../storage/cache']); | |||||
| Flight::map('render', function($view, $data) { | |||||
| echo Flight::view()->make($view, $data); | |||||
| }); | |||||
| // setting path | |||||
| $app->set('basePath', __DIR__.'/../'); | |||||
| $app->set('publicPath', __DIR__.'/../public'); | |||||
| $app->set('storagePath', __DIR__.'/../storage'); | |||||
| @ -0,0 +1,16 @@ | |||||
| { | |||||
| "require": { | |||||
| "mikecao/flight": "^1.3", | |||||
| "rakibtg/sleekdb": "^2.11", | |||||
| "vlucas/phpdotenv": "^5.3", | |||||
| "jenssegers/blade": "^1.4", | |||||
| "rakit/validation": "^1.4", | |||||
| "nesbot/carbon": "^2.49", | |||||
| "microweber/screen": "^1.0" | |||||
| }, | |||||
| "autoload": { | |||||
| "psr-4": { | |||||
| "App\\": "app/" | |||||
| } | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,15 @@ | |||||
| <?php | |||||
| require __DIR__.'/../vendor/autoload.php'; | |||||
| require __DIR__.'/../app/bootstrap.php'; | |||||
| $app->route('GET /', array(new App\Controllers\Index, 'indexAction')); | |||||
| $app->route('GET /api/bucket', array(new App\Controllers\Bucket, 'indexAction')); | |||||
| $app->route('POST /api/bucket', array(new App\Controllers\Bucket, 'createAction')); | |||||
| $app->route('POST /api/bucket/[:id]', array(new App\Controllers\Bucket, 'updateAction')); | |||||
| $app->route('DELETE /api/bucket/[:id]', array(new App\Controllers\Bucket, 'destroyAction')); | |||||
| $app->route('GET /api/note/:bucket_id', array(new App\Controllers\Note, 'indexAction')); | |||||
| $app->start(); | |||||
| @ -0,0 +1,24 @@ | |||||
| @extends('layout') | |||||
| @section('main') | |||||
| <div class="container"> | |||||
| <h2> | |||||
| Buckets | |||||
| <button class="button"> | |||||
| Create | |||||
| </button> | |||||
| </h2> | |||||
| <h3> | |||||
| </h3> | |||||
| <app-buckets></app-buckets> | |||||
| </div> | |||||
| @push('scripts') | |||||
| <script type="text/javascript" src="js/buckets.js"></script> | |||||
| <script type="text/javascript" defer> | |||||
| riot.mount('buckets', {!! json_encode([ 'buckets' => $buckets ]) !!}); | |||||
| </script> | |||||
| @endpush | |||||
| @endsection | |||||
| @ -0,0 +1,55 @@ | |||||
| <!DOCTYPE html> | |||||
| <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> | |||||
| <head> | |||||
| <meta charset="utf-8"> | |||||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |||||
| <title>Nano Buckets</title> | |||||
| @yield('head') | |||||
| <link rel="stylesheet" href="css/app.css" /> | |||||
| </head> | |||||
| <body> | |||||
| <header class="app-header"> | |||||
| <div class="container is-fluid pt-2 pb-2"> | |||||
| <nav class="navbar" role="navigation" aria-label="main navigation"> | |||||
| <div class="navbar-brand"> | |||||
| <a class="navbar-item" href="/"> | |||||
| <img class="app-header__logo" src="/logo.svg" alt="Urban Filehub" /> | |||||
| <span class="app-header__title ml-2"> | |||||
| Filehub<strong>.Freifunk Minden</strong> | |||||
| </span> | |||||
| </a> | |||||
| </div> | |||||
| <div class="navbar-menu"> | |||||
| <div class="navbar-start"> | |||||
| <a class="navbar-item"> | |||||
| Dashboard | |||||
| </a> | |||||
| </div> | |||||
| </div> | |||||
| </nav> | |||||
| </div> | |||||
| </header> | |||||
| <section class="section"> | |||||
| <div class="container is-fluid mt-3 mb-4"> | |||||
| <urban-accordion> | |||||
| <div title="Send me a Link"> | |||||
| <urban-login-email></urban-login-email> | |||||
| </div> | |||||
| <div title="Login with Password"> | |||||
| <urban-login-password></urban-login-password> | |||||
| </div> | |||||
| </urban-accordion> | |||||
| </div> | |||||
| </section> | |||||
| <main> | |||||
| @yield('main') | |||||
| </main> | |||||
| <script type="text/javascript" src="js/app.js"></script> | |||||
| @stack('scripts') | |||||
| </body> | |||||
| </html> | |||||