iwa-panda2

Manage Weather Data by International Weather Agency (Version 2)
Log | Files | Refs | README

Templates.php (6871B)


      1 <?php
      2 
      3 namespace Controller {
      4 
      5     /// Controller\Templates is a utility class for creating HTML-forms and other constructs
      6     class Templates
      7     {
      8         private \Lollipop\SQLDatabase $db;
      9         private \Lollipop\DatabaseObject $table;
     10         private string $schema = 'panda';
     11         private string $table_name;
     12 
     13         public function __construct(\Lollipop\SQLDatabase $db, \Lollipop\DatabaseObject $table)
     14         {
     15             $this->db = $db;
     16             $this->table = $table;
     17             $this->table_name = $table::class;
     18         }
     19 
     20         public function form(string $action, array $data = [], array $response = []): string
     21         {
     22             /*auto-increment fields are automatically hidden*/
     23             $form_type = "Add";
     24             $form = '<form method="POST" action="'. $action . '">';
     25             foreach($this->table->get_col_names_ai() as $col) {
     26                 if($data == []) {
     27                     $value = '-1';
     28                 } else {
     29                     if(in_array($col, array_keys($data))) {
     30                         $value = $data[$col];
     31                     }
     32                     $form_type = "Update";
     33                 }
     34                 $form .= '<input type="hidden" name="' . $col . '" value="' . $value . '">';
     35             }
     36             $form .= '<input type="hidden" name="form_type" value="' . $form_type . '">';
     37             foreach($this->table->get_col_names_no_ai() as $col) {
     38                 if($data == []) {
     39                     $value = '';
     40                 } else {
     41                     if(in_array($col, array_keys($data))) {
     42                         $value = $data[$col];
     43                     }
     44                 }
     45                 $form .= '<input type="text" name="' . $col . '" placeholder="' . $col . '" value="' . $value . '">';
     46                 $miss_key = 'missing_'.$col;
     47                 if(array_key_exists($miss_key, $response)) {
     48                     $form .= '<div class="form-response"><p style="color:red;"> col: '. $col . ' cannot be empty</p></div>';
     49                 }
     50             }
     51             $form .='
     52                 <input type="submit" value="'. $form_type .'"> 
     53             </form>';
     54 
     55             return $form;
     56         }
     57 
     58         public function form_v2(string $action, array $values = [], array $extra = [], array $response = []): string
     59         {
     60             /*auto-increment fields are automatically hidden*/
     61             if(sizeof($values) == 0) {
     62                 $form_type = "Add";
     63             } else {
     64                 $form_type = "Update";
     65             }
     66             $form = '<h1>'. $form_type .' '. $this->table->get_table() .'</h1>
     67                     <a href="/'. $this->table->get_table() .'">New</a>';
     68             $form .= '<form method="POST" action="'. $action . '">';
     69             foreach($this->table->get_col_info() as $col => $info) {
     70                 if(isset($info["extra"]) && $info["extra"] == "auto_increment") {
     71                     $form .= '<input type="hidden" name="' . $col . '" placeholder="' . $col . '" value="';
     72                     if(isset($values[$col])) {
     73                         $form .= $values[$col];
     74                     }
     75                     $form .= '">';
     76                 } elseif(isset($info["extra"]) && $info["extra"] == "password") {
     77                     $form .= '<input type="password" name="' . $col . '" placeholder="' . $col . '">';
     78                 } elseif(isset($info["input_type"])) {
     79                     $form .= '<input type="'. $info["input_type"] .'" name="' . $col . '" placeholder="' . $col . '" value="';
     80                     if(isset($values[$col])) {
     81                         $form .= $values[$col];
     82                     }
     83                     $form .= '">';
     84                 }
     85                 $miss_key = 'missing_'.$col;
     86                 if(array_key_exists($miss_key, $response)) {
     87                     $form .= '<div class="form-response"><p style="color:red;"> col: '. $col . ' cannot be empty</p></div>';
     88                 }
     89             }
     90             foreach($extra as $html) {
     91                 $form.= $html;
     92             }
     93             $form .= '<input type="hidden" name="form_type" " value="' . $form_type . '">';
     94             $form .='
     95                 <input type="submit" value="'. $form_type .'"> 
     96             </form>';
     97             return $form;
     98         }
     99 
    100         public function search_form(string $action): string
    101         {
    102             return '
    103                     <form method="POST" action="'. $action . '">
    104                         <input type="text" name="search" placeholder="Search...">
    105                         <input type="submit" value="Search"> 
    106                     </form>';
    107         }
    108 
    109         public function crud_table(string $action, string $search = "", string $search_key = "", \Model\PermissionUser $permissionUser = null): string
    110         {
    111             if($search == "") {
    112                 $search = "%";
    113             } else {
    114                 $search = "%$search%";
    115             }
    116             $table = "<table> <thead> <tr>";
    117             foreach($this->table->get_column_names() as $column) {
    118                 $table .= "<th>$column</th>";
    119             }
    120             $table .= "<th>Alter</th> <th>Delete</th>";
    121             if($permissionUser != null) {
    122                 $table .= "<th>user permissions</th>";
    123             }
    124             $table .= "</tr> </thead>";
    125 
    126             $objs = $this->db->all_where($this->table_name, [$search_key => $search]);
    127             $table .= "<tbody>";
    128             foreach($objs as $obj) {
    129                 $table .= "<tr>";
    130                 $col_names = $obj->get_column_names();
    131                 foreach($col_names as $col) {
    132                     $table .= '<td>';
    133                     if($col == "email" || $col == "name" || $col == "course" || $col == "exam") {
    134                         $table .= '<a href="/'.$this->table->get_table().'/' .$obj->{$col}.'">'. $obj->{$col} . '</a></td>';
    135                     } else {
    136                         $table .= $obj->{$col} . '</td>';
    137                     }
    138                 }
    139                 $table .= '
    140                     <td>
    141                         <a class="edit" href="' . $action . '/'. $obj->{$this->table->get_primary()} .'/edit/">Edit</a>
    142                     </td>
    143                     <td>
    144                         <a class="delete" href="' . $action . '/'. $obj->{$this->table->get_primary()} .'/delete/">Delete</a>
    145                     </td>
    146                     <td>';
    147                 if($permissionUser != null) {
    148                     foreach($this->db->all_where(\Model\PermissionUser::class, [$permissionUser->get_primary() => $obj->{$this->table->get_primary()}]) as $perm) {
    149                         $table .= $perm->id_permission . ' ';
    150                     }
    151                 }
    152                 $table .= '</td> </tr>';
    153             }
    154 
    155             $table .= "
    156                 </tbody>
    157             </table>";
    158             return $table;
    159         }
    160 
    161     }
    162 }