source: tags/1.0.0/bin/module_maker/sql.cli.php @ 1

Last change on this file since 1 was 1, checked in by scdev, 19 years ago

Initial import.

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