<?php
/* project: Advanced form, file: advform.php */
/**
 * This file implements following actions:
 * - list: show persons datagrid
 * - add: show form for adding new person
 * - edit: show edit form
 * - insert: insert person into database
 * - update: update item in database
 * - delete: delete from database
 */
/* We want remember template parameters across pages */
session_start();
//Include pclib framework
require 'pclib/pclib.php';
//Create pclib application
$app = new PCApp('demo');
$datasource = 'pdo_mysql://user:password@localhost/test';
$db = new PCDb($datasource);
$app->db = $db;
//Get control variables
//action is invoked by pressing button/clicking on datagrid
//id contains ID of person to be shown or modified
$id = $_GET['id'] ?? 0;
//Initialize form template
$pform = new PCForm('tpl/examples/personform.tpl', 'personform');
$action = $pform->submitted ?? $_GET['action'] ?? '';
switch($action) {
case 'add':
  //show 'insert' button only
  $pform->enable('insert');
  print $pform;
  break;
  
case 'edit':
  //on edit show buttons 'update' and 'delete'
  $pform->enable('update','delete');
  
  if (!$pform->values)
    $pform->values = $db->select('PERSONS', ['ID' => $id]);
  print $pform;
  break;
  
//user click on 'insert' button
case 'insert':
  if (!$pform->validate()) $app->redirect("examples/advform/action:add");
  $pform->values['CREATED_AT'] = date("Y-m-d H:i:s");
  $id = $pform->insert('PERSONS');
  $app->redirect("examples/advform");
  break;
//user click on 'update' button
case 'update':
  if (!$id) die('Object not found.');
  if (!$pform->validate()) $app->redirect("examples/advform/action:edit/id:$id");
  $pform->update('PERSONS', ['ID' => $id]);
  $app->redirect("examples/advform");
  break;
//user click on 'delete' button
case 'delete':
  if (!$id) die('Object not found.');
  $pform->delete('PERSONS', ['ID' => $id]);
  $app->redirect('examples/advform');
  break;
//default action - show datagrid
case 'list':
default:
  $pform->deleteSession();
  $plist = new PCGrid("tpl/examples/personlist.tpl");
  $plist->setQuery("select * from PERSONS order by CREATED_AT desc");
  print $plist;
  break;
}
?>