nevergone_2_search_name() és nevergone_2_search_phone() működik
[drupal_tuksi02.git] / nevergone_2.module
blobc6ab4c6b8b6d409065e13af2fd5065d788377c30
1 <?php
2 // $Id$
4 /*
5 Házi feladat kiírás:
6 http://www.tanarurkerem.hu/node/395
8 Készíts telefonszám adatbázis kezelőt. Az adatbázisban csak nevet és telefonszámot kell tárolnod.
9 Tudni kell felvenni új számot, törölni és szerkeszteni már meglévőt és listázni/keresni a már meglévő adatokban.
10 (nézd a héthez tartozó webináriumot)
12 Figyelj a biztonságra mind adatbázis oldalon, mind pedig a HTML kimenet szinten!
13 Nézd át a többiek feladatát és keress bennük biztonsági réseket.
14 Kizárólag javítási javaslattal együtt hívd fel erre a feladat készítőjének figyelmét.
15  */
18 /* hook_perm() implementáció */
19 function nevergone_2_perm() {
20   return array('elem megtekintése', 'elem szerkesztése');
24 /* hook_menu() implementáció */
25 function nevergone_2_menu() {
26   $items['nevergone_2'] = array( /* listázás */
27     'title' => 'nevergone_2 telefonkönyv',
28     'page callback' => 'nevergone_2_page',
29     'access arguments' => array('elem megtekintése'),
30   );
31   $items['nevergone_2/%nevergone_2/edit'] = array( /* elem szerkesztése */
32     'title' => 'nevergone_2 elem szerkesztése',
33     'page callback' => 'nevergone_2_edit',
34     'page arguments' => array(1), /* az első argumentum tartalmazza az elem azonosítóját: nevergone_2/[id] */
35     'access arguments' => array('elem szerkesztése'),
36     'type' => MENU_CALLBACK,
37   );
38   $items['nevergone_2/%nevergone_2/delete'] = array( /* elem törlése */
39     'title' => 'nevergone_2 elem törlése',
40     'page callback' => 'nevergone_2_delete',
41     'page arguments' => array(1),
42     'access arguments' => array('elem szerkesztése'),
43     'type' => MENU_CALLBACK,
44   );
45   $items['nevergone_2/search/name'] = array( /* automatikus kiegészítés névre */
46     'page callback' => 'nevergone_2_search_name',
47     'access arguments' => array('elem megtekintése'),
48     'type' => MENU_CALLBACK,
49   );
50   $items['nevergone_2/search/phone'] = array( /* automatikus kiegészítés telefonszámra */
51     'page callback' => 'nevergone_2_search_phone',
52     'access arguments' => array('elem megtekintése'),
53     'type' => MENU_CALLBACK,
54   );
55   return $items;
59 /* telefonszám-form */
60 function nevergone_2_form($form_state, $data = NULL) {
61   /* új elem felvitele */
62   $form['id'] = array( /* azonosító */
63     '#type' => 'hidden',
64     '#value' => isset($data['id']) ? $data['id'] : 0,
65   );
66   $form['name'] = array( /* név */
67     '#type' => 'textfield',
68     '#title' => 'Név',
69     '#default_value' => isset($data['name']) ? $data['name'] : '',
70   );
71   $form['phone'] = array( /* telefonszám */
72     '#type' => 'textfield',
73     '#title' => 'Telefonszám',
74     '#default_value' => isset($data['name']) ? $data['phone'] : '',
75   );
76   $form['submit'] = array( /* "submit" gomb */
77     '#type' => 'submit',
78     '#value' => 'Mentés',
79   );
80   return $form;
84 /* keresés-form */
85 function nevergone_2_search_form($form_state, $data = NULL) {
86   /* keresés */
87   $form['search_field'] = array(
88     '#type' => 'fieldset',
89     '#title' => 'Keresés',
90     '#collapsible' => TRUE,
91     '#collapsed' => FALSE,
92   );
93   $form['search_field']['search_name'] = array( /* név */
94     '#type' => 'textfield',
95     '#title' => 'Név',
96     '#autocomplete_path' => 'nevergone_2/search/name',
97   );
98   $form['search_field']['search_phone'] = array( /* telefonszám */
99     '#type' => 'textfield',
100     '#title' => 'Telefonszám',
101     '#autocomplete_path' => 'nevergone_2/search/phone',
102   );
103   $form['search_field']['search_submit'] = array( /* "submit" gomb */
104     '#type' => 'submit',
105     '#value' => 'Keresés',
106   );
107   return $form;
111 /* form megjelenítése és adatok listázása */
112 function nevergone_2_page() {
113   /* formok kiírása */
114   $output .= drupal_get_form('nevergone_2_form');
115   $output .= drupal_get_form('nevergone_2_search_form');
116   /* fejléc készítése a megjelenített táblázathoz */
117   $header = array(
118     array(
119       'field' => 'id',
120       'data' => 'Azonosító',
121     ),
122     array(
123       'field' => 'name',
124       'data' => 'Név',
125     ),
126     array(
127       'field' => 'id',
128       'data' => 'Telefonszám',
129     ),
130     array(
131       'data' => 'Szerkesztés / Törlés',
132     ),
133   );
134   /* elemek listája rendezhetően */
135   $res = pager_query("SELECT * FROM {nevergone_2}" . tablesort_sql($header));
136   while ($row = db_fetch_array($res)) {
137     /* adatbázisból kiolvasott elemeket tömbbe pakoljuk a táblázatos megjelenítéshez */
138     $id = check_plain($row['id']);
139     $tr = array(); /* egy sor elkészítése */
140     $tr[] = $id;
141     $tr[] = check_plain($row['name']);
142     $tr[] = check_plain($row['phone']);
143     $tr[] = l('szerkesztés', 'nevergone_2/' . $id . '/edit') . ' / ' . l('törlés', 'nevergone_2/' . $id . '/delete');
144     $table[] = $tr; /* sor a táblázatba */
145   }
146   $output .= theme('table', $header, $table);
147   $output .= theme('pager');
148   return $output;
152 /* form tartalmának ellenőrzése */
153 function nevergone_2_form_validate($form, &$form_state) {
154   if (empty($form_state['values']['name'])) {
155     form_error($form['name'], 'Nem lehet üres a név!');
156   }
157   if (empty($form_state['values']['phone'])) {
158     form_error($form['phone'], 'Nem lehet üres a telefonszám!');
159   }
163 /* form tartalmának mentése az adatbázisba */
164 function nevergone_2_form_submit($form, &$form_state) {
165   if ($form_state['values']['id'] === 0) {
166     /* új elem hozzáadása */
167     drupal_write_record('nevergone_2', $form_state['values']);
168     drupal_set_message('Új elem hozzáadva!');
169   }
170   else {
171     /* szerkesztett elem mentése */
172     drupal_write_record('nevergone_2', $form_state['values'], array('id'));
173     drupal_set_message('Elem szerkesztése megtörtént!');
174     drupal_goto('nevergone_2');
175   }
179 /* adott azonosítójú elem betöltése az adatbázisból */
180 function nevergone_2_load($arg) {
181   $data = db_fetch_array(db_query("SELECT * FROM {nevergone_2} WHERE id=%d", check_plain($arg)));
182   return $data;
186 /* adott azonosítójú elem szerkesztése */
187 function nevergone_2_edit($data){
188   $output = drupal_get_form('nevergone_2_form', $data);
189   return $output;
193 /* adott azonosítójú elem törlése */
194 function nevergone_2_delete($data){
195   $res = db_query("DELETE FROM {nevergone_2} WHERE id=%d", check_plain($data['id']));
196   drupal_set_message('Elem törlése megtörtént!');
197   drupal_goto('nevergone_2');
201 /* keresésnél automatikus kiegészítés a név mezőre */
202 function nevergone_2_search_name($name = '') {
203   $matches = array();
204   if ($name) {
205     $result = db_query_range("SELECT name FROM {nevergone_2} WHERE LOWER(name) LIKE LOWER('%s%%')", $name, 0, 10);
206     while ($row = db_fetch_array($result)) {
207       $matches[$row['name']] = check_plain($row['name']);
208     }
209   }
210   drupal_json($matches);
214 /* keresésnél automatikus kiegészítés a telefonszám mezőre */
215 function nevergone_2_search_phone($phone = '') {
216   $matches = array();
217   if ($phone) {
218     $result = db_query_range("SELECT phone FROM {nevergone_2} WHERE phone LIKE '%s%%'", $phone, 0, 10);
219     while ($row = db_fetch_array($result)) {
220       $matches[$row['phone']] = check_plain($row['phone']);
221     }
222   }
223   drupal_json($matches);