Les 7 – Delete

Lesbeschrijving

In deze les ga je de delete toevoegen aan het formulier.
Hiervoor moeten de volgende stappen gezet worden:

  • Tabel uitbreiden met een delete optie per regel
  • Delete formulier afhandelen in de GUI
  • Applicatie uitbreiden met de deleteactie in de database

Stappenplan

1. Tabel uitbreiden met een delete optie per regel.

Op de plek waar de tabel getoond word maak je een extra kolom met een deleteknop.

De delete knop bestaat uit een linkje naar dit formulier. Aan de link wordt een action meegegeven en het id waar het omgaat.

Eerst maken we de link aan op basis van de eerder gemaakte $base_url voor deze pagina. Daar voegen we de parameters action en id aan toe.

Open meo_admin_event_category.php en voeg de volgende code toe:

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

// Create delete link
$params = array( 'action'    => 'delete', 'id' => $event_cat_obj->getId());

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

In de tabel moet een kolom met een delete optie worden toegevoegd:

<td width="200"><?php echo $event_cat_obj->getDescription();?></td>
<?php if ($action !== 'update') { ?>
<td><a href="<?php echo $upd_link; ?>">Update</a></td>
<td><a href="<?php echo $del_link; ?>">Delete</a></td>
<?php } // if action !== update ?>

2. Delete aan de applicatie toevoegen

Om de deletewerkend te krijgen moet er in de applicatie de deletefunctie worden toegevoegd. Daarna moet deze worden aangeroepen vanuit de plek waar de get variabelen worden afgehandeld.

Voeg aan EventCategory.php de volgende code toe:

/**
* 
* @global type $wpdb The WordPress database class
* @param type $input_array containing delete id
* @return boolean TRUE on succes OR FALSE
*/
public function delete($input_array){
try {
// Check input id
if (!isset($input_array['id']) ) throw new Exception(__("Missing mandatory fields") );
global $wpdb;

// Delete query
/*
$query = $wpdb->prepare("Delete FROM `". $this->getTableName(). "` WHERE `id_event_category` = %d", $input_array['id']);

// Execute query:
$wpdb->query( $query ); 
/*/
// Delete row by provided id (WordPress style)
$wpdb->delete( $this->getTableName(), 
array( 'id_event_category' => $input_array['id'] ), 
array( '%d' ) );

// Where format
//*/
// Error ? It's in there:
if ( !empty($wpdb->last_error) ){
throw new Exception( $wpdb->last_error);
}
} catch (Exception $exc) {

//@todo: Add error handling
echo '<pre>';
$this->last_error = $exc->getMessage();
echo $exc->getTraceAsString();
echo $exc->getMessage();
echo '</pre>';
}

return TRUE;
}

De delete functie wordt aangeroepen vanuit de handleGetAction() function. Hier moet de action afhandeling worden uitgebreid met de delete afhandeling.

Voeg de volgende code toe:

switch($get_array['action']){
case 'update':
// Indicate current action is update if id provided
if ( !is_null($get_array['id']) ){
$action = $get_array['action'];
}
break;

case 'delete':
// Delete current id if provided
if ( !is_null($get_array['id']) ){
$this->delete($get_array);
}
$action = 'delete';
break;

default:
// Oops
break;
}
return $action;

Je kunt nu de delete testen.