source: branches/1.1dev/bin/module_maker/sql.cli.php @ 90

Last change on this file since 90 was 90, checked in by scdev, 18 years ago

changed addslashes to mysql_real_escape_string

File size: 5.8 KB
Line 
1#!/usr/local/bin/php -q
2<?php
3/**
4 * sql.cli.php
5 * Code by Strangecode :: www.strangecode.com :: This document contains copyrighted information
6 */
7
8// Get module maker configuration.
9require_once dirname(__FILE__) . '/_config.inc.php';
10
11$op = null;
12$valid_ops = array('sortorder', 'insert', 'update', 'delete', 'search', 'filter');
13
14// Test arguments.
15if ($_SERVER['argc'] == 3) {
16    $db_tbl = $_SERVER['argv'][2];
17} else if ($_SERVER['argc'] == 4) {
18    $db_tbl = $_SERVER['argv'][2];
19    $op = $_SERVER['argv'][3];
20} else {
21    die(basename($_SERVER['argv'][0]) . " Warning: You must specify a DB table as the second argument.\n");
22}
23
24// Get DB tables.
25$qid = dbQuery("SHOW TABLES");
26while (list($row) = mysql_fetch_row($qid)) {
27    $tables[] = $row;
28}
29
30// Make sure requested table is in database.
31if (!in_array($db_tbl, $tables)) {
32    die(basename($_SERVER['argv'][0]) . " Warning: $db_tbl does not exist in database $CFG->database. Please select one of: \n\n" . join("\n", $tables) . "\n\n");
33}
34
35// Make sure op is valid.
36if (isset($op) && !in_array($op, $valid_ops)) {
37    die(basename($_SERVER['argv'][0]) . " Warning: Operation '$op' is not something I know how to do Please select one of: " . join(", ", $valid_ops) . "\n");
38}
39
40// Get DB table column info.
41$qid = dbQuery("DESCRIBE " . mysql_real_escape_string($db_tbl));
42while ($row = mysql_fetch_row($qid)) {
43    $cols[] = $row;
44}
45
46$sort_columns = '';
47
48// Loop through columns
49if (is_array($cols) && !empty($cols)) {
50    foreach ($cols as $col) {
51       
52        // Human readable.
53        $field = $col[0];
54        $type = preg_replace('/^(\w+).*$/', '\\1', $col[1]);
55        $is_primary_key = ('PRI' == $col[3]);
56       
57        $sort_columns .= "\$so->setColumn('$field', '$field ASC', '$field DESC');\n";
58       
59        if ($is_primary_key) {
60            // This is the primary key. Deal with separately.
61            $primary_key = $field;
62        } else if ('set' == $type) {
63            // Set types usually need to be converted to comma-delimited lists.
64            $c[$field] = "'\" . dbArrayToList(\$frm['$field']) . \"'";
65        } else if ('featured' == $field || 'publish' == $field || preg_match("/enum\('true'\)/", $col[1])) {
66            // Toggle types.
67            $c[$field] = "'\" . isset(\$frm['$field']) . \"'";
68        } else if ('added_by_admin_id' == $field || 'modified_by_admin_id' == $field) {
69            // Toggle types.
70            $c[$field] = "'\" . mysql_real_escape_string(\$_admin->getVal('user_id')) . \"'";
71        } else if ('added_datetime' == $field || 'modified_datetime' == $field) {
72            // DB record insertion datetime.
73            $c[$field] = "NOW()";
74        } else {
75            // Default. Just insert data.
76            $c[$field] = "'\" . mysql_real_escape_string(\$frm['$field']) . \"'";
77        }
78    }
79   
80} else {
81    die(basename($_SERVER['argv'][0]) . " Warning: $db_tbl does not have any columns.\n");
82}
83
84
85echo isset($op) ? '' : "\n\n\n";
86
87// Insert SQL.
88if (!isset($op) || 'insert' == $op) {
89$insert_skip_columns = array('modified_datetime', 'modified_by_admin_id');
90$insert_c = array();
91foreach ($c as $k=>$v) {
92    if (in_array($k, $insert_skip_columns)) {
93        continue;
94    }
95    $insert_c[$k] = $v;
96}
97$db_keys = join(",\n            ", array_keys($insert_c));
98$db_vals = join(",\n            ", $insert_c);
99echo <<<E_O_F
100    // Insert record data.
101    dbQuery("
102        INSERT INTO $db_tbl (
103            $db_keys
104        ) VALUES (
105            $db_vals
106        )
107    ");
108E_O_F;
109}
110
111echo isset($op) ? '' : "\n\n\n";
112
113// Update SQL.
114if (!isset($op) || 'update' == $op) {
115$update_skip_columns = array('added_datetime', 'added_by_admin_id');
116$comma = '';
117$key_eq_val = '';
118foreach ($c as $k=>$v) {
119    if (in_array($k, $update_skip_columns)) {
120        continue;
121    }
122    $key_eq_val .= $comma . "\n                $k = $v";
123    $comma = ',';
124}
125echo <<<E_O_F
126        // Update record data.
127        dbQuery("
128            UPDATE $db_tbl SET$key_eq_val
129            WHERE $primary_key = '" . mysql_real_escape_string(\$frm['$primary_key']) . "'
130        ");
131E_O_F;
132}
133
134echo isset($op) ? '' : "\n\n\n";
135
136// Delete SQL.
137if (!isset($op) || 'delete' == $op) {
138$where_clause = '';
139$delete_skip_columns = array();
140$delim = 'WHERE';
141if (!empty($primary_key)) {
142    $where_clause = "            $delim $primary_key = '\" . mysql_real_escape_string(\$frm['$primary_key']) . \"'\n";
143    $delim = 'AND';
144}
145foreach ($c as $k=>$ignore) {
146    if (in_array($k, $delete_skip_columns)) {
147        continue;
148    }
149    $where_clause .= "            $delim $k = '\" . mysql_real_escape_string(\$frm['$k']) . \"'\n";
150    $delim = 'AND';
151}
152echo <<<E_O_F
153        // Delete record data.
154        dbQuery("
155            DELETE FROM $db_tbl
156$where_clause        ");
157E_O_F;
158}
159
160echo isset($op) ? '' : "\n\n\n";
161
162// SortOrder methods SQL.
163if (!isset($op) || 'sortorder' == $op) {
164    echo "// Instantiate a sorting object with the default sort and order. Add SQL for each column.\n";
165    echo "\$so = new SortOrder('$db_tbl.$primary_key', 'DESC');\n";
166    echo "\$so->setColumn('$db_tbl.$primary_key', '$db_tbl.$primary_key ASC', '$db_tbl.$primary_key DESC');\n";
167    foreach ($c as $k=>$v) {
168        echo "\$so->setColumn('$db_tbl.$k', '$db_tbl.$k ASC', '$db_tbl.$k DESC');\n";
169    }
170}
171
172echo isset($op) ? '' : "\n\n\n";
173
174// Search SQL
175if (!isset($op) || 'search' == $op) {
176$search_skip_columns = array('added_datetime', 'added_by_admin_id', 'modified_datetime', 'modified_by_admin_id', 'publish', 'featured');
177$search_columns = $db_tbl . '.' . join(" LIKE '%\" . mysql_real_escape_string(\$qry_words[\$i]) . \"%'\n                    OR $db_tbl.", array_diff(array_keys($c), $search_skip_columns));
178echo <<<E_O_F
179            \$where_clause .= (empty(\$where_clause) ? 'WHERE' : 'AND') . "
180                (
181                    $search_columns LIKE '%" . mysql_real_escape_string(\$qry_words[\$i]) . "%'
182                )
183            ";
184E_O_F;
185}
186
187
188echo isset($op) ? '' : "\n\n\n";
189?>
Note: See TracBrowser for help on using the repository browser.