diff --git a/model/CliScheme.php b/model/CliScheme.php new file mode 100644 index 00000000..1cc13321 --- /dev/null +++ b/model/CliScheme.php @@ -0,0 +1,104 @@ +handler_to_use); + $module = strtolower($module); + + $handler = new $this->handler_to_use($this->new); + $struct = $handler->getStruct(); + + foreach (array_keys($struct) as $field) { + if ($field == 'created') { + $struct[$field]['db_code'] = '{DATE}'; + } elseif ($field == 'modified') { + $struct[$field]['db_code'] = '{DATECURRENT}'; + } else { + switch ($struct[$field]['type']) { + case 'int': + $struct[$field]['db_code'] = '{BIGINT}'; + break; + case 'bool': + $struct[$field]['db_code'] = '{BOOLEAN}'; + break; + default: + $struct[$field]['db_code'] = 'VARCHAR(255) {LATIN1} NOT NULL'; + } + } + } + + $this->out("For creating a new table with upgrade.php:"); + $this->out(""); + + $this->out('db_query_parsed("'); + $this->out(' CREATE TABLE {IF_NOT_EXISTS} " . table_by_key("' . $module . '") . " ('); + # TODO: $module is not really correct - $handler->db_table would be + + foreach (array_keys($struct) as $field) { + if ($struct[$field]['not_in_db'] == 0 && $struct[$field]['dont_write_to_db'] == 0) { + $this->out(" $field " . $struct[$field]['db_code'] . ","); + } + } + + $this->out(" INDEX domain(domain,username), // <--- change as needed"); + $this->out(" PRIMARY KEY (" . $handler->getId_field() . ")"); + $this->out(' ) {MYISAM} '); + $this->out('");'); + + $this->out(''); + $this->hr(); + $this->out('For adding fields with upgrade.php:'); + $this->out(''); + + $prev_field = ''; + foreach (array_keys($struct) as $field) { + if ($struct[$field]['not_in_db'] == 0 && $struct[$field]['dont_write_to_db'] == 0) { + $this->out(" _db_add_field('$module', '$field',\t'" . $struct[$field]['db_code'] . "',\t'$prev_field');"); + $prev_field = $field; + } + } + + $this->out(''); + $this->hr(); + $this->out('Note that the above is only a template.'); + $this->out('You might need to adjust some parts.'); + return; + } + + /** + * Displays help contents + */ + public function help() { + $module = preg_replace('/Handler$/', '', $this->handler_to_use); + $module = strtolower($module); + + $this->out( +"Usage: + + postfixadmin-cli $module scheme + + Print the $module database scheme in a way that can be + pasted into upgrade.php. + +"); + + $this->_stop(); + } + +} +/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ diff --git a/model/PFAHandler.php b/model/PFAHandler.php index a95130f2..8c7551a8 100644 --- a/model/PFAHandler.php +++ b/model/PFAHandler.php @@ -12,7 +12,7 @@ abstract class PFAHandler { public $infomsg = array(); # array of tasks available in CLI - public $taskNames = array('Help', 'Add', 'Update', 'Delete', 'View'); + public $taskNames = array('Help', 'Add', 'Update', 'Delete', 'View', 'Scheme'); /** * variables that must be defined in all *Handler classes diff --git a/scripts/postfixadmin-cli.php b/scripts/postfixadmin-cli.php index f7d75a1c..bea17d42 100644 --- a/scripts/postfixadmin-cli.php +++ b/scripts/postfixadmin-cli.php @@ -472,6 +472,7 @@ class PostfixAdmin { $this->stdout(" add Add an item"); $this->stdout(" update Update an item"); $this->stdout(" delete Delete an item"); + $this->stdout(" scheme Print database scheme (useful for developers only)"); $this->stdout(" help Print help output"); $this->stdout(""); $this->stdout("");