Skriv ett eget plugin

15 November 2018 nyborjare , handledning

Mozquizto innehåller ett stort antal filter och funktioner som är användbara när man konstruerar nya frågor, men ibland är de inbyggda funktionerna inte tillräckliga.

Låt oss säga att vi vill skapa ett antal frågor om grundämnen. Då vore det praktiskt att få tillgång till en databas med information. Med lite googling kan man till exempel hitta följande lilla öppen källkod-projekt som innehåller alla data man kan tänka sig om våra grundämnen: https://github.com/andrejewski/periodic-table

Hur gör vi dessa tillgängliga i Mozquizto? Det bästa sättet är att skriva en modul (plugin) till systemet. Mozquizto levereras tillsammans med några färdiga moduler: en som innehåller ett antal vanliga statistiska fördelningar och några som ger stöd för att anropa externa program (pari, Maxima), men det går också bra att skapa nya moduler.

Skapa en ny modul

  • Öppna ett terminalfönster på servern där (helst en lokal utvecklingsversion av) Mozquizto är installerad.
  • Navigera till roten av installationen (t.ex. /var/www/mozquizto) och kör kommandot php artisan module:make Elements.

Detta skapar en ny mapp Modules/Elements med ett stort antal filer.

Skapa en ny tabell i databasen

Det effektivaste sättet att lagra grundämnesinformationen är via en tabell i systemets databas. Konventionen är att databastabeller som skapas av nya moduler ska heta module_ + modulens namn. I vårt fall vill vi alltså skapa en ny tabell module_elements.

Det enklaste sättet att skapa en s.k. databas-migration är att köra kommandot:

php artisan module:make-migration create_module_elements_table Elements

I funktionen up() behöver vi definiera vilka kolumner som ska finnas i den nya databastabellen. För enkelhets skull väljer vi ut några av de viktigaste fälten:

public function up()
{
    Schema::create('module_elements', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('atomic_number')->unsigned();
        $table->string('symbol');
        $table->string('name');
        $table->float('atomic_mass');
        $table->float('melting_point');
        $table->float('boiling_point');
        $table->float('density');
        $table->integer('year_discovered')->unsigned();
        $table->timestamps();
    });
}

Kör därefter kommandot php artisan module:migrate Elements för att skapa den nya tabellen i databasen.