From 45724bde1d1dea2b850cb08af05cdca39df3265e Mon Sep 17 00:00:00 2001
From: Thibault Debatty <t.debatty@cylab.be>
Date: Tue, 26 Mar 2024 13:05:17 +0100
Subject: [PATCH] server : add description)

---
 app/Http/Controllers/ServerController.php     |  4 ++-
 app/Server.php                                | 11 +++++++
 ...4_03_26_114754_servers_add_description.php | 32 +++++++++++++++++++
 resources/views/server/edit.blade.php         | 17 ++++++++++
 resources/views/server/show.blade.php         |  6 ++++
 5 files changed, 69 insertions(+), 1 deletion(-)
 create mode 100644 database/migrations/2024_03_26_114754_servers_add_description.php

diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php
index fb1aafc..9b1f1fe 100644
--- a/app/Http/Controllers/ServerController.php
+++ b/app/Http/Controllers/ServerController.php
@@ -20,7 +20,8 @@ class ServerController extends Controller
     {
         return [
             'name' => 'required|string|regex:/^[a-zA-Z0-9\s\-\.]+$/|max:255',
-            "organization_id" => Rule::in(Auth::user()->organizations->modelKeys())];
+            "organization_id" => Rule::in(Auth::user()->organizations->modelKeys()),
+            "description" => 'nullable|string'];
     }
 
     /**
@@ -85,6 +86,7 @@ class ServerController extends Controller
 
         $server->name = $request->name;
         $server->organization_id = $request->organization_id;
+        $server->description = $request->description;
         $server->save();
 
         return redirect(action("ServerController@show", ["server" => $server]));
diff --git a/app/Server.php b/app/Server.php
index 4fc48e5..373eb33 100644
--- a/app/Server.php
+++ b/app/Server.php
@@ -2,6 +2,8 @@
 
 namespace App;
 
+use League\CommonMark\CommonMarkConverter;
+
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\Collection as DatabaseCollection;
 use Illuminate\Support\Collection;
@@ -14,6 +16,7 @@ use Illuminate\Support\Collection;
  * @property \Illuminate\Support\Carbon|null $created_at
  * @property \Illuminate\Support\Carbon|null $updated_at
  * @property string $name
+ * @property string $description
  * @property string $token
  * @property string $read_token
  * @property-read \App\Organization $organization
@@ -67,6 +70,8 @@ class Server extends Model
         return $this->lastSummary()->time;
     }
     
+    // -------------------------------------
+    
     private $info = null;
 
     public function __construct(array $attributes = array())
@@ -186,4 +191,10 @@ class Server extends Model
     {
         return $this->changes()->latest("time")->first();
     }
+    
+    public function descriptionAsHTML() : string
+    {
+        $converter = new CommonMarkConverter();
+        return $converter->convertToHtml($this->description ?? '');
+    }
 }
diff --git a/database/migrations/2024_03_26_114754_servers_add_description.php b/database/migrations/2024_03_26_114754_servers_add_description.php
new file mode 100644
index 0000000..6582733
--- /dev/null
+++ b/database/migrations/2024_03_26_114754_servers_add_description.php
@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class ServersAddDescription extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('servers', function (Blueprint $table) {
+            $table->text("description")->nullable();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('servers', function (Blueprint $table) {
+            $table->dropColumn("description");
+        });
+    }
+}
diff --git a/resources/views/server/edit.blade.php b/resources/views/server/edit.blade.php
index 69dce6b..ae6bc32 100644
--- a/resources/views/server/edit.blade.php
+++ b/resources/views/server/edit.blade.php
@@ -56,6 +56,23 @@
                                 @endif
                             </div>
                         </div>
+                        
+                        <div class="form-group row">
+                            <label for="description" class="col-md-4 col-form-label text-md-right">Description</label>
+
+                            <div class="col-md-6">
+                                <textarea id="description"
+                                       class="form-control{{ $errors->has('description') ? ' is-invalid' : '' }}"
+                                       name="description"
+                                       rows="10">{{ old('description', $server->description) }}</textarea>
+
+                                @if ($errors->has('description'))
+                                    <span class="invalid-feedback">
+                                        <strong>{{ $errors->first('description') }}</strong>
+                                    </span>
+                                @endif
+                            </div>
+                        </div>
 
                         <div class="form-group row">
                             <div class="col-md-6 offset-md-4">
diff --git a/resources/views/server/show.blade.php b/resources/views/server/show.blade.php
index 123d66e..0ca0e46 100644
--- a/resources/views/server/show.blade.php
+++ b/resources/views/server/show.blade.php
@@ -46,6 +46,12 @@ window.monitorServerToken = "{{ $server->read_token }}";
             <p>Uptime: {{ $server->info()->uptime() }}</p>
         </div>
     </div>
+    
+    <div class="card">
+        <div class="card-body">
+            {!! $server->descriptionAsHTML() !!}
+        </div>
+    </div>
 
     @foreach ($server->lastSummary()->reports() as $report)
     <div class="card">
-- 
GitLab