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 }