Les 4 – Admin View page CRUD starten

Lesbeschrijving

In deze les gaan we een start maken met de admin CRUD (Create Read Update & Delete) van de event types.

De functionaliteit van de hele applicatie staat in de klasse ontwerpen in de model map.Om dit voor elkaar te krijgen gaan we een klassse maken met de benodigde functionaliteit. In de admin pagina maken we een tabel met alle informatie.In deze map(wp-content/plugins/my-event-organiser/includes/model)staat aan het einde de hele applicatie.

Stappenplan

1. Klasse voor de event categorie functionaliteit aanmaken

Hiervoor maken we een bestand aan voor de klasse EventCategory met de naam EventCategory.php in de model map.
In dit bestand zetten we de code voor een lege klasses:

<?php
/**
* Description of EventCategories
*
* @author gthoogendoorn
*/
class EventCategory {

}
?>

2. Klasse linken aan de admin event categorie pagina.

Boven in de view in het bestand meo_admin_event_category laden we de net gemaakte klasse in:

<?php
// Include model:
include MY_EVENT_ORGANISER_PLUGIN_MODEL_DIR. "/EventCategory.php";
?>

3.Tabel voor de CRUD aanmaken

Nu maken we in de view een tabel aan waarin we de CRUD gaan visualiseren:

<div class="wrap">
Admin event categorie CRUD.<br />
( Uitje, excursie, etc)
<?php echo ($add ? "<p>Added a new event</p>" : "");?>
<table>
<caption>Event type categories</caption>
<thead>
<tr>
<th width="10">Id</th> 
<th width="150">Name</th>
<th width="200">Description</th>
</tr>
</thead>
<tr>
<td colspan="3">Event types rij 1</td>
</tr>
</table>

4. Create aanmaken.

Om een nieuwe entry te kunnen toevoegen hebben we een formulier nodig om data in de applicatie te krijgen. Om het formulier werkend te krijgen gaan we eerst de url van de action klaar zetten.Wanneer er op de submit button wordt geklikt wordt de huidige admin pagina weer aangeroepen.

Voeg de volgende code toe aan het bestand meo_admin_event_category.php

include MY_EVENT_ORGANISER_PLUGIN_MODEL_DIR. "/EventCategory.php";

// Declare class variable:
$event_categories = new EventCategory();

// Set base url to current file and add page specific vars
$base_url = get_admin_url().'admin.php';
$params = array( 'page'    => basename(__FILE__,".php"));

// Add params to base url
$base_url = add_query_arg( $params, $base_url);

Voeg de volgende code met het formulier voor het toevoegen toe onderaan de eerderaangemaakte tabel:

</table>
<form action="<?php echo $base_url; ?>" method="post"><tr>
<table>    
<tr>
<td colspan="2"><input type="text" name="name"></td>
<td><input type="text" name="description"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="add" value="Toevoegen"/></td>
</tr>
</table>
</form>      
</div>

5. Formulier velden in de applicatie verwerken.

Om de waarden van het formulier in de applicatie te verwerken gaan we op de pagina eerst controleren of er een submit gedaan is. Hiervoor gebruiken we de eerder gemaakte klasse. De klasse kent de data en ‘weet’ welke velden er nodig zijn.

We maken eerst een functie in de klasse aan en daarna gaan we de functie gebruiken in de admin view.

Open het bestand EventCategory.php in de map ‘model’. Hierin maken we een functie die de benodigde velden uit de $_POST array van het systeem haalt.

(Let op: Met de functie filter_input_array voorkomen we dat we direct de $_POST array uitlezen; dat levert een risico op)

Voeg de volgende functie toe:

/**
* getPostValues :
* Filter input and retrieve POST input params
* @return array containing known POST input fields
*/
public function getPostValues(){
// Define the check for params
$post_check_array = array (

// submit action
'add'   => array('filter' => FILTER_SANITIZE_STRING ),

// event type name.
'name'   => array('filter' => FILTER_SANITIZE_STRING ),               

// Help text
'description'   => array('filter' => FILTER_SANITIZE_STRING ),
);

// Get filtered input:
$inputs = filter_input_array( INPUT_POST, $post_check_array );

// RTS
return $inputs;

}

5.2 Admin view aanpassen

In de view gaan we de hiervoor gemaakte functie gebruiken.
Voeg de volgende code toe:

// Add params to base url
$base_url = add_query_arg( $params, $base_url );

// Get the POST data in filtered array
$post_array = $event_categories->getPostValues();

//*
echo '<pre>';
echo __FILE__.__LINE__.'<br />';
var_dump($post_array);
echo '</pre>';
//*/

6. Het verwerken van de data

Het verwerken van de data gebeurt in de klasse EventCatetory. Hiervoor voegen we een save() functie toe.Daarna updaten we de admin View door de save() uit te voeren.

6.1 Save functie toevoegen aan de klasse functionaliteit

Open het bestand EventCategory.php en voeg de volgende code toe :

/**
* 
* @global type $wpdb The WordPress database class
* @param type $input_array containing insert data
* @return boolean TRUE on succes OR FALSE
*/
public function save($input_array){

if (!isset($input_array['name']) OR !isset($input_array['description'])) 
return FALSE;

global $wpdb;

// Insert query
echo 'Insertname and description for this Category:'.$input_array['name']."-". $input_array['description']."<br />";

return TRUE;
}

De save functie controleert of er ontbrekende velden zijn. Als dat zo is stopt de functie verwerking. De globale variabele $wpdb is binnen wordpress de database interface. Wanneer je in de database moet zijn doe je dat door deze variabele. De query zelf voeren we nu niet uit, daar komen we later op terug.

6.2 Save functionaliteit gebruiken

In het admin view bestand ‘meo_admin_event_category.php’ gaan je nu de functionaliteit gebruiken.

Hiervoor verander je de volgende code (De var_dump kun je nu verwijderen zoals in volgende code):

// Get the POST data in filtered array
$post_array = $event_categories->getPostValues();

// Check the POST data
if (!empty($post_array)){

// Check the add form:
$add = FALSE;
if (isset($post_array['add']) ){

// Save event categorie
$event_categories->save($post_array);
$add= TRUE;
}
}

7. Read voorbereiden

De read voorbereiden bestaat uit twee stappen. Eerst pas je de klasse aan met een functie die het aantal bestaande event categorieën terug geeft.
De tweede stap is om op basis van het aantal event categorieën aangeeft in de GUI dat er eerst toegevoegd moet worden.

7.1 Klasse functie toevoegen

In deze laatste stap ga je de Lees functionaliteit voorbereiden. Je maakt een functie die later het aantal regels in de database gaat tellen en een melding geeft wanneer er nog geen event types zijn toegevoegd.

Open het bestand EventCategory.php en voeg de volgende functie toe:

/**
* 
* @return int number of Event categories stored in db
*/
public function getNrOfEventCategories(){
// Tijdelijk gewoon 0 terug geven. (Geen event categorieën)
return 0;
}

7.2 GUI aanpassen

In de GUI moet de functie worden aangeroepen en als het aantal 0 is dan wordt er aangegeven dat er eerst event categorieën moeten worden toegevoegd.

Voeg in meo_admin_event_category.php de volgende code toe:

<th width="200">Description</th>
</tr>
</thead>
<!--<tr><td colspan="3">Event types rij 1</td></tr> -->
<?php
//*
if( $event_categories->getNrOfEventCategories() < 1){?>
<tr><td colspan="3">Start adding Event Categories</tr>
<?php                
} 
?>

Opdracht:

Volg eerst de lesbeschrijving van deze les. Wanneer je die klaar hebt kun je deze opdracht uitvoeren.

Maak voor de admin view meo_admin_event_types ook een formulier aan zoals in deze lesbeschrijving voor event category.

  • De klasse naam in het model is: EventType (Bestandsnaam is in PHP altijd: Klassenaam.php -> EventType.php )
  • Gebruik dezelfde formulier namen (name , description)