#!/usr/local/bin/php -q query("SHOW TABLES"); while (list($row) = mysql_fetch_row($qid)) { $tables[] = $row; } // Make sure requested table is in database. if (!in_array($db_tbl, $tables)) { die(sprintf("%s Warning: %s does not exist in database %s. Please select one of: \n\n%s\n\n", basename($_SERVER['argv'][0]), $db_tbl, $app->getParam('db_name'), join("\n", $tables))); } // Make sure op is valid. if (isset($op) && !in_array($op, $valid_ops)) { die(basename($_SERVER['argv'][0]) . " Warning: Operation '$op' is not something I know how to do Please select one of: " . join(", ", $valid_ops) . "\n"); } // Get DB table column info. $qid = $db->query("DESCRIBE " . $db->escapeString($db_tbl)); while ($row = mysql_fetch_row($qid)) { $cols[] = $row; } $sort_columns = ''; $primary_key = '__///__'; // Loop through columns if (is_array($cols) && !empty($cols)) { foreach ($cols as $col) { // Human readable. $field = $col[0]; $type = preg_replace('/^(\w+).*$/', '\\1', $col[1]); $is_primary_key = ('PRI' == $col[3]); $sort_columns .= "\$so->setColumn('$field', '$field ASC', '$field DESC');\n"; if ($is_primary_key) { // This is the primary key. Deal with separately. $primary_key = $field; } else if ('set' == $type) { // Set types usually need to be converted to comma-delimited lists. $c[$field] = "'\" . escapedList(array_keys(\$frm['$field'])) . \"'"; } else if ('featured' == $field || 'publish' == $field || preg_match("/enum\('true'\)/", $col[1])) { // Toggle types. $c[$field] = "'\" . isset(\$frm['$field']) . \"'"; } else if ('added_by_user_id' == $field || 'modified_by_user_id' == $field) { // Toggle types. $c[$field] = "'\" . \$db->escapeString(\$auth->get('user_id')) . \"'"; } else if ('added_datetime' == $field || 'modified_datetime' == $field) { // DB record insertion datetime. $c[$field] = "NOW()"; } else { // Default. Just insert data. $c[$field] = "'\" . \$db->escapeString(\$frm['$field']) . \"'"; } } } else { die(basename($_SERVER['argv'][0]) . " Warning: $db_tbl does not have any columns.\n"); } echo isset($op) ? '' : "\n\n\n"; // Insert SQL. if (!isset($op) || 'insert' == $op) { $insert_skip_columns = array('modified_datetime', 'modified_by_user_id'); $insert_c = array(); foreach ($c as $k=>$v) { if (in_array($k, $insert_skip_columns)) { continue; } $insert_c[$k] = $v; } $db_keys = join(",\n ", array_keys($insert_c)); $db_vals = join(",\n ", $insert_c); echo <<query(" INSERT INTO $db_tbl ( $db_keys ) VALUES ( $db_vals ) "); E_O_F; } echo isset($op) ? '' : "\n\n\n"; // Update SQL. if (!isset($op) || 'update' == $op) { $update_skip_columns = array('added_datetime', 'added_by_user_id'); $comma = ''; $key_eq_val = ''; foreach ($c as $k=>$v) { if (in_array($k, $update_skip_columns)) { continue; } $key_eq_val .= $comma . "\n $k = $v"; $comma = ','; } echo <<query(" UPDATE $db_tbl SET$key_eq_val WHERE $primary_key = '" . \$db->escapeString(\$frm['$primary_key']) . "' "); E_O_F; } echo isset($op) ? '' : "\n\n\n"; // Delete SQL. if (!isset($op) || 'delete' == $op) { $where_clause = ''; $delete_skip_columns = array(); $delim = 'WHERE'; if (!empty($primary_key)) { $where_clause = " $delim $primary_key = '\" . \$db->escapeString(\$frm['$primary_key']) . \"'\n"; $delim = 'AND'; } foreach ($c as $k=>$ignore) { if (in_array($k, $delete_skip_columns)) { continue; } $where_clause .= " $delim $k = '\" . \$db->escapeString(\$frm['$k']) . \"'\n"; $delim = 'AND'; } echo <<query(" DELETE FROM $db_tbl $where_clause "); E_O_F; } echo isset($op) ? '' : "\n\n\n"; // SortOrder methods SQL. if (!isset($op) || 'sortorder' == $op) { echo "// Instantiate a sorting object with the default sort and order. Add SQL for each column.\n"; echo "\$so = new SortOrder('$db_tbl.$primary_key', 'DESC');\n"; echo "\$so->setColumn('$db_tbl.$primary_key', '$db_tbl.$primary_key ASC', '$db_tbl.$primary_key DESC');\n"; foreach ($c as $k=>$v) { echo "\$so->setColumn('$db_tbl.$k', '$db_tbl.$k ASC', '$db_tbl.$k DESC');\n"; } } echo isset($op) ? '' : "\n\n\n"; // Search SQL if (!isset($op) || 'search' == $op) { $search_skip_columns = array('added_datetime', 'added_by_user_id', 'modified_datetime', 'modified_by_user_id', 'publish', 'featured'); $search_columns = $db_tbl . '.' . join(" LIKE '%\" . \$db->escapeString(\$qry_words[\$i]) . \"%'\n OR $db_tbl.", array_diff(array_keys($c), $search_skip_columns)); echo <<escapeString(\$qry_words[\$i]) . "%' ) "; E_O_F; } echo isset($op) ? '' : "\n\n\n"; ?>