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

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

Initial import.

File size: 16.9 KB
Line 
1#!/usr/local/bin/php -q
2<?php
3/**
4 * module.cli.php
5 * Code by Strangecode :: www.strangecode.com :: This document contains copyrighted information
6 */
7
8
9$CFG->enable_session = false;
10$CFG->log_screen_priority = LOG_DEBUG;
11error_reporting(E_ALL);
12require_once dirname(__FILE__) . '/../../config/boot.inc.php';
13
14
15/******************************************************************************
16 * CONFIG
17 *****************************************************************************/
18
19// Test for a single argument.
20if ($_SERVER['argc'] == 4 && $_SERVER['argv'][3] == 'clean') {
21    $module_name_singular = $_SERVER['argv'][1];
22    $module_name_plural = $_SERVER['argv'][2];
23} else if ($_SERVER['argc'] == 3) {
24    // Normal operation.
25    $module_name_singular = $_SERVER['argv'][1];
26    $module_name_plural = $_SERVER['argv'][2];
27} else if ($_SERVER['argc'] == 2 && $_SERVER['argv'][1] == '_default_') {
28    // Hacked mode: use these module names:
29    $module_name_singular = 'event';
30    $module_name_plural = 'events';
31    echo "Notice: using hacked module names.\n";
32} else {
33    die(basename($_SERVER['argv'][0]) . " Error: invalid arguments. Try like this:
34   
35    " . basename($_SERVER['argv'][0]) . " <namesingular> <nameplural>
36
37There is also a secret _default_ option that uses options hard-coded into the script. Hack the script for more info.
38The following files will be generated by this script:
39/admin/nameplural.php
40/admin/_templates/namesingular_list.ihtml
41/admin/_templates/namesingular_form.ihtml
42/html/nameplural.php
43/html/_templates/namesingular_list.ihtml
44/html/_templates/namesingular.ihtml
45
46");
47}
48
49// Where deleted files go:
50$user_trash_folder = "/Users/" . get_current_user() . "/.Trash";
51
52// Directories
53$skel_dir = realpath(CODE_BASE . '/bin/module_maker/skel');
54$admin_dir = realpath(CODE_BASE . '/../admin');
55$admin_tpl_dir = realpath(CODE_BASE . '/../admin/_templates');
56$public_dir = realpath(CODE_BASE . '/../html');
57$public_tpl_dir = realpath(CODE_BASE . '/../html/_templates');
58
59// Names
60$module_title = ucwords($module_name_plural);
61$item_title = ucwords($module_name_singular);
62$module_name_upper = strtoupper($module_name_plural);
63
64// Admin files
65$admin_script = $module_name_plural . '.php';
66$admin_list_template = $module_name_singular . '_list.ihtml';
67$admin_form_template = $module_name_singular . '_form.ihtml';
68
69// Public files
70$public_script = $module_name_plural . '.php';
71$public_list_template = $module_name_singular . '_list.ihtml';
72$public_detail_template = $module_name_singular . '.ihtml';
73
74// Databaes names
75$db_tbl = $module_name_singular . '_tbl';
76$primary_key = $module_name_singular . '_id';
77
78
79if ($_SERVER['argc'] == 4 && $_SERVER['argv'][3] == 'clean') {
80    cleanFiles();
81    die;
82}
83
84/******************************************************************************
85 * PREPROCESSING
86 *****************************************************************************/
87
88// Ensure skel files exist.
89if (
90    !file_exists("$skel_dir/admin.php") ||
91    !file_exists("$skel_dir/public.php") ||
92    !file_exists("$skel_dir/public.ihtml") ||
93    !file_exists("$skel_dir/public_list.ihtml")
94) {
95    die(basename($_SERVER['argv'][0]) . " Warning: one or more skeleton source files missing. Please check $skel_dir.\n");
96}
97
98// Ensure essential directories exist.
99if (!is_dir("$admin_dir")) {
100    die(basename($_SERVER['argv'][0]) . " Error: $admin_dir directory not found.\n");
101}
102if (!is_dir("$admin_tpl_dir")) {
103    die(basename($_SERVER['argv'][0]) . " Error: $admin_tpl_dir directory not found.\n");
104}
105if (!is_dir("$public_dir")) {
106    die(basename($_SERVER['argv'][0]) . " Error: $public_dir directory not found.\n");
107}
108if (!is_dir("$public_tpl_dir")) {
109    die(basename($_SERVER['argv'][0]) . " Error: $public_tpl_dir directory not found.\n");
110}
111
112// Get DB tables.
113$qid = dbQuery("SHOW TABLES");
114while (list($row) = mysql_fetch_row($qid)) {
115    $tables[] = $row;
116}
117
118// Make sure requested table is in database.
119if (!in_array($db_tbl, $tables)) {
120    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");
121}
122
123// Ensure requested table contains columns.
124// Get DB table column info.
125$qid = dbQuery("DESCRIBE " . addslashes($db_tbl));
126while ($row = mysql_fetch_row($qid)) {
127    $cols[] = $row;
128}
129if (!is_array($cols) || empty($cols)) {
130    die(basename($_SERVER['argv'][0]) . " Warning: $db_tbl does not have any columns.\n");
131}
132
133
134/******************************************************************************
135 * SETUP VARIABLES
136 *****************************************************************************/
137
138
139// Loop through columns
140$multipart_form_required = false;
141$headers = array();
142$public_list_page_vars = array();
143$public_detail_page_vars = array();
144if (is_array($cols) && !empty($cols)) {
145    foreach ($cols as $col) {
146       
147        // Human readable.
148        $field = $col[0];
149        $field_title = ucfirst(str_replace('_', ' ', $field));
150        $type = preg_replace('/^(\w+).*$/', '\\1', $col[1]);
151       
152        // Get primary key.
153//         if ('PRI' == $col[3]) {
154//             $primary_key = $field;
155//         }
156       
157        // Our form will require type="multipart/form-data".
158        if (preg_match('/file/i', $field)) {
159            $multipart_form_required = false;
160        }
161       
162        // Column headers.
163        $headers[$field] = $field_title;
164       
165        // Get php code for printing variables.
166        $public_list_page_vars[] = "<\x3fphp echo oTxt(\$" . $module_name_singular . "_list[\$i]['$field']); \x3f>";
167        $public_detail_page_vars[] = "<\x3fphp echo oTxt(\$item['$field']); \x3f>";
168    }
169}
170
171// -------------FILES-------------
172
173$skel_files['admin_script'] = file_get_contents($skel_dir . '/admin.php');
174$skel_files['admin_list_template'] = file_get_contents($skel_dir . '/adm_list.ihtml');
175$skel_files['admin_form_template'] = file_get_contents($skel_dir . '/adm_form.ihtml');
176$skel_files['public_script'] = file_get_contents($skel_dir . '/public.php');
177$skel_files['public_list_template'] = file_get_contents($skel_dir . '/public_list.ihtml');
178$skel_files['public_detail_template'] = file_get_contents($skel_dir . '/public.ihtml');
179
180
181// -------------VARS-------------
182
183// Simple...
184
185$search['date'] = '/%DATE%/';
186$replace['date'] = date($CFG->date_format);
187
188$search['name_plural'] = '/%NAME_PLURAL%/';
189$replace['name_plural'] = $module_name_plural;
190
191$search['name_singular'] = '/%NAME_SINGULAR%/';
192$replace['name_singular'] = $module_name_singular;
193
194$search['title'] = '/%TITLE%/';
195$replace['title'] = $module_title;
196
197$search['item_title'] = '/%ITEM_TITLE%/';
198$replace['item_title'] = $item_title;
199
200$search['primary_key'] = '/%PRIMARY_KEY%/';
201$replace['primary_key'] = $primary_key;
202
203$search['db_tbl'] = '/%DB_TBL%/';
204$replace['db_tbl'] = $db_tbl;
205
206$search['name_upper'] = '/%NAME_UPPER%/';
207$replace['name_upper'] = $module_name_upper;
208
209$search['admin_script'] = '/%ADMIN_SCRIPT%/';
210$replace['admin_script'] = $admin_script;
211
212$search['admin_list_template'] = '/%ADMIN_LIST_TEMPLATE%/';
213$replace['admin_list_template'] = $admin_list_template;
214
215$search['admin_form_template'] = '/%ADMIN_FORM_TEMPLATE%/';
216$replace['admin_form_template'] = $admin_form_template;
217
218$search['public_script'] = '/%PUBLIC_SCRIPT%/';
219$replace['public_script'] = $public_script;
220
221$search['public_list_template'] = '/%PUBLIC_LIST_TEMPLATE%/';
222$replace['public_list_template'] = $public_list_template;
223
224$search['public_detail_template'] = '/%PUBLIC_DETAIL_TEMPLATE%/';
225$replace['public_detail_template'] = $public_detail_template;
226
227$search['public_detail_page_vars'] = '/%PUBLIC_DETAIL_PAGE_VARS%/';
228$replace['public_detail_page_vars'] = join("\n", $public_detail_page_vars);
229
230$search['public_list_page_vars'] = '/%PUBLIC_LIST_PAGE_VARS%/';
231$replace['public_list_page_vars'] = join("\n", $public_list_page_vars);
232
233$search['search_fields'] = '/%SEARCH_FIELDS%/';
234$replace['search_fields'] = join(", ", $headers);
235
236$search['admin_form_tag_init'] = '/%ADMIN_FORM_TAG_INIT%/';
237if ($multipart_form_required) {
238    $replace['admin_form_tag_init'] = "<form enctype=\"multipart/form-data\" method=\"post\" action=\"<\x3fphp echo \$_SERVER['PHP_SELF']; \x3f>\">\n<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"12000000\">";
239} else {
240    $replace['admin_form_tag_init'] = "<form method=\"post\" action=\"<\x3fphp echo \$_SERVER['PHP_SELF']; \x3f>\">";
241}
242
243
244// Complex....
245
246echo "Generating admin form table rows...\n";
247$output = array();
248exec(dirname($_SERVER['argv'][0]) . "/form_template.cli.php $db_tbl", $output, $return_val);
249if ($return_val == 0) {
250    $search['adm_form_table_rows'] = '/%ADM_FORM_TABLE_ROWS%/';
251    $replace['adm_form_table_rows'] = join("\n", $output);
252} else {
253    die(basename($_SERVER['argv'][0]) . " Error: could not execute form_template.cli.php.\n");
254}
255
256echo "Generating admin list table header rows...\n";
257$output = array();
258exec(dirname($_SERVER['argv'][0]) . "/list_template.cli.php $db_tbl headerrows", $output, $return_val);
259if ($return_val == 0) {
260    $search['adm_list_header_rows'] = '/%ADM_LIST_HEADER_ROWS%/';
261    $replace['adm_list_header_rows'] = join("\n", $output);
262} else {
263    die(basename($_SERVER['argv'][0]) . " Error: could not execute list_template.cli.php.\n");
264}
265
266echo "Generating admin list table rows...\n";
267$output = array();
268exec(dirname($_SERVER['argv'][0]) . "/list_template.cli.php $db_tbl listrows", $output, $return_val);
269if ($return_val == 0) {
270    $search['adm_list_rows'] = '/%ADM_LIST_ROWS%/';
271    $replace['adm_list_rows'] = join("\n", $output);
272} else {
273    die(basename($_SERVER['argv'][0]) . " Error: could not execute list_template.cli.php.\n");
274}
275
276echo "Generating sortorder...\n";
277$output = array();
278exec(dirname($_SERVER['argv'][0]) . "/sql.cli.php $db_tbl sortorder", $output, $return_val);
279if ($return_val == 0) {
280    $search['sort_order'] = '/%SORT_ORDER%/';
281    $replace['sort_order'] = join("\n", $output);
282} else {
283    die(basename($_SERVER['argv'][0]) . " Error: could not execute sql.cli.php.\n");
284}
285
286echo "Generating insert data...\n";
287$output = array();
288exec(dirname($_SERVER['argv'][0]) . "/sql.cli.php $db_tbl insert", $output, $return_val);
289if ($return_val == 0) {
290    $search['insert'] = '/%INSERT%/';
291    $replace['insert'] = join("\n", $output);
292} else {
293    die(basename($_SERVER['argv'][0]) . " Error: could not execute sql.cli.php.\n");
294}
295
296echo "Generating update data...\n";
297$output = array();
298exec(dirname($_SERVER['argv'][0]) . "/sql.cli.php $db_tbl update", $output, $return_val);
299if ($return_val == 0) {
300    $search['update'] = '/%UPDATE%/';
301    $replace['update'] = join("\n", $output);
302} else {
303    die(basename($_SERVER['argv'][0]) . " Error: could not execute sql.cli.php.\n");
304}
305
306echo "Generating search data...\n";
307$output = array();
308exec(dirname($_SERVER['argv'][0]) . "/sql.cli.php $db_tbl search", $output, $return_val);
309if ($return_val == 0) {
310    $search['search'] = '/%SEARCH%/';
311    $replace['search'] = join("\n", $output);
312} else {
313    die(basename($_SERVER['argv'][0]) . " Error: could not execute sql.cli.php.\n");
314}
315
316echo "Generating form validation data...\n";
317$output = array();
318exec(dirname($_SERVER['argv'][0]) . "/validation.cli.php $db_tbl", $output, $return_val);
319if ($return_val == 0) {
320    $search['form_validation'] = '/%FORM_VALIDATION%/';
321    $replace['form_validation'] = join("\n", $output);
322} else {
323    die(basename($_SERVER['argv'][0]) . " Error: could not execute validation.cli.php.\n");
324}
325
326/******************************************************************************
327 * WRITE FILES
328 *****************************************************************************/
329
330// (1) Admin script.
331if (file_exists("$admin_dir/$admin_script")) {
332    echo "Admin script already exists: $admin_dir/$admin_script\n";
333} else {
334    echo "Writing admin script: $admin_dir/$admin_script\n";
335    $fp = fopen("$admin_dir/$admin_script", "w");
336    fwrite($fp, preg_replace($search, $replace, $skel_files['admin_script']));
337    fclose($fp);
338}
339
340// (2) Admin list template.
341if (file_exists("$admin_tpl_dir/$admin_list_template")) {
342    echo "Admin list template already exists: $admin_tpl_dir/$admin_list_template\n";
343} else {
344    echo "Writing admin list template: $admin_tpl_dir/$admin_list_template\n";
345    $fp = fopen("$admin_tpl_dir/$admin_list_template", "w");
346    fwrite($fp, preg_replace($search, $replace, $skel_files['admin_list_template']));
347    fclose($fp);
348}
349
350// (3) Admin form template.
351if (file_exists("$admin_tpl_dir/$admin_form_template")) {
352    echo "Admin form template already exists: $admin_tpl_dir/$admin_form_template\n";
353} else {
354    echo "Writing admin form template: $admin_tpl_dir/$admin_form_template\n";
355    $fp = fopen("$admin_tpl_dir/$admin_form_template", "w");
356    fwrite($fp, preg_replace($search, $replace, $skel_files['admin_form_template']));
357    fclose($fp);
358}
359
360// (4) Public script.
361if (file_exists("$public_dir/$public_script")) {
362    echo "Public script already exists: $public_dir/$public_script\n";
363} else {
364    echo "Writing public script: $public_dir/$public_script\n";
365    $fp = fopen("$public_dir/$public_script", "w");
366    fwrite($fp, preg_replace($search, $replace, $skel_files['public_script']));
367    fclose($fp);
368}
369
370// (5) Public list template.
371if (file_exists("$public_tpl_dir/$public_list_template")) {
372    echo "Public list template already exists: $public_tpl_dir/$public_list_template\n";
373} else {
374    echo "Writing public list template: $public_tpl_dir/$public_list_template\n";
375    $fp = fopen("$public_tpl_dir/$public_list_template", "w");
376    fwrite($fp, preg_replace($search, $replace, $skel_files['public_list_template']));
377    fclose($fp);
378}
379
380// (6) Public detail template.
381if (file_exists("$public_tpl_dir/$public_detail_template")) {
382    echo "Public detail template already exists: $public_tpl_dir/$public_detail_template\n";
383} else {
384    echo "Writing public detail template: $public_tpl_dir/$public_detail_template\n";
385    $fp = fopen("$public_tpl_dir/$public_detail_template", "w");
386    fwrite($fp, preg_replace($search, $replace, $skel_files['public_detail_template']));
387    fclose($fp);
388}
389
390echo "Done!\n";
391
392
393/******************************************************************************
394 * FUNCTIONS
395 *****************************************************************************/
396
397/**
398 * Removes existing modules files. Danger!
399 */
400function cleanFiles()
401{
402    global $user_trash_folder;
403    global $admin_dir;
404    global $admin_script;
405    global $admin_tpl_dir;
406    global $admin_list_template;
407    global $admin_form_template;
408    global $public_dir;
409    global $public_script;
410    global $public_tpl_dir;
411    global $public_detail_template;
412    global $public_list_template;
413   
414    echo "Beginning file cleanup\n";
415
416    if (!dir($user_trash_folder)) {
417        mkdir($user_trash_folder);
418        chmod($user_trash_folder, 0777);
419        echo "Attempting to create user trash folder: $user_trash_folder/\n";
420    }
421    if (!dir("$user_trash_folder/") || !is_writable("$user_trash_folder/")) {
422        die("User trash directory not available: $user_trash_folder/\n");
423    }
424
425    if (file_exists("$admin_dir/$admin_script")) {
426        rename("$admin_dir/$admin_script", "$user_trash_folder/$admin_script" . '_' . md5(microtime()));
427        printf("Moved to trash: %s\n", "$admin_dir/$admin_script");
428    } else {
429        printf("File not found: %s\n", "$admin_dir/$admin_script");
430    }
431
432    if (file_exists("$admin_tpl_dir/$admin_list_template")) {
433        rename("$admin_tpl_dir/$admin_list_template", "$user_trash_folder/$admin_list_template" . '_' . md5(microtime()));
434        printf("Moved to trash: %s\n", "$admin_tpl_dir/$admin_list_template");
435    } else {
436        printf("File not found: %s\n", "$admin_tpl_dir/$admin_list_template");
437    }
438
439    if (file_exists("$admin_tpl_dir/$admin_form_template")) {
440        rename("$admin_tpl_dir/$admin_form_template", "$user_trash_folder/$admin_form_template" . '_' . md5(microtime()));
441        printf("Moved to trash: %s\n", "$admin_tpl_dir/$admin_form_template");
442    } else {
443        printf("File not found: %s\n", "$admin_tpl_dir/$admin_form_template");
444    }
445
446    if (file_exists("$public_dir/$public_script")) {
447        rename("$public_dir/$public_script", "$user_trash_folder/$public_script" . '_' . md5(microtime()));
448        printf("Moved to trash: %s\n", "$public_dir/$public_script");
449    } else {
450        printf("File not found: %s\n", "$public_dir/$public_script");
451    }
452
453    if (file_exists("$public_tpl_dir/$public_list_template")) {
454        rename("$public_tpl_dir/$public_list_template", "$user_trash_folder/$public_list_template" . '_' . md5(microtime()));
455        printf("Moved to trash: %s\n", "$public_tpl_dir/$public_list_template");
456    } else {
457        printf("File not found: %s\n", "$public_tpl_dir/$public_list_template");
458    }
459
460    if (file_exists("$public_tpl_dir/$public_detail_template")) {
461        rename("$public_tpl_dir/$public_detail_template", "$user_trash_folder/$public_detail_template" . '_' . md5(microtime()));
462        printf("Moved to trash: %s\n", "$public_tpl_dir/$public_detail_template");
463    } else {
464        printf("File not found: %s\n", "$public_tpl_dir/$public_detail_template");
465    }
466   
467    echo "End file cleanup\n";
468}
469
470?>
Note: See TracBrowser for help on using the repository browser.