Esta es la herramienta que genera las clases del model para las aplicaciones basadas en Motte que utilicen Mysql como motor de base de datos.
Está basado en 2(dos) archivos:
Esta herramienta reemplazará las variables('@NOMBRE') del template por los datos recabados de las tablas de la base de datos y creará una clase por cada tabla del modelo.
#!/bin/bash # Motte MySQL2Class Generator # PHP Class Generator based on MySQL database structure # Authors: Pedro Gauna: pgauna@gmail.com, Carlos Gagliardi: carlosgag@gmail.com, # Jose Dodero: jose.dodero@gmail.com, GBoksar\/Perro: gustavo@boksar.info), # Pablo Erartes: pabloeuy@gmail.com, # LinuxTeros: http://linuxteros.codigolibre.net/mottte, INDT Sistemas: http://www.indt.hc.edu.uy # License: GPLv2+ (http://opensource.org/licenses/gpl-license.php GNU Public license) # Link: http://motte.codigolibre.net # Last update: Wed Set 12 09:09:48 UYT 2007 # VERBOSE=0 INCREMENTAL=0 DBUSER="" DBPASS="" DBHOST="" DBNAME="" DBHOSTPORT="" DBHOST="" CLSPATH="." TBLSTRUCT="" TPLFILE="" URL="LinuxTeros - http:\/\/motte.codigolibre.net/" AUTHOR="Pedro Gauna, Carlos Gagliardi, Jose Dodero, GBoksar\/Perro, Pablo Erartes" PACKAGE="motte_project" # finish <message> # if a message is received the program finishes # function finish { eraseTmp VERBOSE=1 if [ "$1" == "help" ]; then shift message "$1" 1 message "MySQL2Motte - Mysql database parser for automagic creation of classes" message "Motte v1.0 <http://motte.codigolibre.net> <http://linuxteros.codigolibre.net/proyectos/motte>\nThis program is licensed under GPLv2+(http://opensource.org/licenses/gpl-license.php GNU Public license)\n\nAuthors:\tPedro Gauna, Carlos Gagliardi, Jose Dodero, GBoksar/Perro, Pablo Erartes" 1 message "Parameters: (order is irrelevant)\n\tOptionals:\n\t\t-v or --verbose\n\t\t-i or --autoincremental (not functional yet)\n\t\t-o= or --output= <TargetDirectory>\n\t\t-t= or --template= <template_file>\t(If none specified default Motte class template will be used)\n\t\t\tVariables to replaced on template:\n\t\t\t\t@AUTHOR\t\tApplication authors.\n\t\t\t\t@URL\t\tApplication URL.\n\t\t\t\t@PACKAGE\tApplication package name.\n\t\t\t\t@DATE\t\tDate/time when class was created.\n\t\t\t\t@TBLSTRUCT\tOriginal DB table structure for the class.\n\t\t\t\t@INCLUDES\tOther classes needed for foreign keys validation and default values.\n\t\t\t\t@TABLE\t\tDB table name being processed.\n\t\t\t\t@CTR\t\tControls for NOT NULL fields.\n\t\t\t\t@INICIALIZE\tDefault values for each fields.\n\t\t\t\t@SERIAL\t\tFunction to obtain auto-numeric ID form serial table.\n\t\t\t\t@CTRI\t\tIntegrity checks.\n\t\t-a= or --author= <authors>*\n\t\t-l= or --url= <url>*\n\t\t-k= or --package= <package_name>*\n\n\t\t\t*Can't contain special chars(\\ or \") or the should be escaped like \\\\\ and \\\".\n\n\tConnection Values:\n\t\t-u= or --user= <BDuser>\n\t\t-p= or --passwd= <BDpass>\n\t\t-d= or --database= <BDname>\n\n\tOptional Connection values:\n\t\t-h= or --host= <BDhost>\n\t\t-P= or --port= <BDhostport>" 1 message "\t\t\-x= or --export= <file>\tExports default Motte class template to specified file. If none is specified will be exported to \"mteTpl.mte\"." 1 message "Syntax:\t$0 [-v] [-i] -u=<user> -p=<passwd> -d=<database> [-h=<host_ip>] [-P=<host_port>] [-o=<output_directory>] [-t=<my_template_file>] [-a=<author_name>] [-u=<app_url>] [-k=<package_name>]\nor\n\t$0 -x[=<destination_file>]" 1 message "Usage:\t$0 -v -u=myuser -p=mypass -d=testdb\n\t\tor\n\t$0 -x" 1 if [ "$1" != "" ]; then exit 1 else exit 0 fi else message "$1" 1 exit 1 fi } # message <text> [1|2] # show runtime messages if verbose option was set (-v or --verbose) # 1- leaves an empty line after the text # 2- leaves an empty line before and after the text # function message { if [ "$VERBOSE" == "1" ]; then if [ "$2" == "2" ]; then echo ""; fi echo -e "$1" if [ "$2" == "2" ] || [ "$2" == "1" ]; then echo ""; fi fi } # eraseTmp [<file_pattern>] # erase temporary files with name starting with argument received and ending with .mte.tmp # if no argument is received, will erase all temporary files. # function eraseTmp { if [ -d ./mte_Tmp_dir ] && [ "$1" == "" ]; then rm -rf ./mte_Tmp_dir fi if [ "$1" != "" ]; then FILE_PATTERN="_$1_*.mte.tmp" if [ $(ls ./mte_Tmp_dir/${FILE_PATTERN}|> | wc -w) -gt 0 ]; then rm ./mte_Tmp_dir/$FILE_PATTERN fi fi } # # # # function createTplFile { # ToDo Perro... # >> ./mte_Tmp_dir/mteTpl.mte # echo not implemented yet... cp ./mteTpl.mte ./mte_Tmp_dir } # # ============================================================================================== # # A R G U M E N T S C H E C K # # ============================================================================================== # # Check for at least 3 args received # if [ "$#" -lt "3" ] && [ "$#" != "1" ]; then finish help "Too few arguments($# of 3)..." fi if [ "$#" != "1" ]; then while [ $# -gt 0 ]; do value=$1 PAR=${value%=*} PARVALUE=${value#*=} case "$PAR" in -v | --verbose) VERBOSE=1 ;; -i | --autoincremental) INCREMENTAL=1 ;; -u | --user) DBUSER="-u $PARVALUE" ;; -p | --passwd) DBPASS="--password=$PARVALUE" ;; -d | --database) DBNAME=$PARVALUE ;; -h | --host) DBHOST="-h $PARVALUE" ;; -P | --port) DBHOSTPORT="-P$PARVALUE" ;; -o | --output) CLSPATH=$PARVALUE ;; -h | --help) finish "help" ;; -t | --template) TPLFILE="$PARVALUE" ;; -k | --package) PACKAGE="$PARVALUE" ;; -a | --author) AUTHOR="$PARVALUE" ;; -l | --url) URL="$PARVALUE" ;; *) finish help "You have specified an invalid argument!" esac shift done else value=$1 PAR=${value%=*} PARVALUE=${value#*=} if [ "$PAR" != "-x" ] && [ "$PAR" != "--export" ]; then finish help "You have specified an invalid argument!" fi if [ "$PARVALUE" == "" ] || [ "$PARVALUE" == "-x" ]; then TPLFILE="./mteTpl.mte" else TPLFILE="$PARVALUE" fi eraseTmp mkdir ./mte_Tmp_dir if [ "$?" -gt "0" ]; then finish help "You don't have writing privileges on this folder... Unable to continue!" fi createTplFile cp ./mte_Tmp_dir/mteTpl.mte $TPLFILE finish "Motte Class Template succesfully created: $TPLFILE" fi if [ "$DBUSER" == "" ] || [ "$DBNAME" == "" ]; then finish help "Missing DB connection info(User/Database). Unable to continue!" fi if [ "$DBPASS" == "" ]; then DBPASS="-p" fi if [ "$CLSPATH" != "." ]; then if [ ! -d "$CLSPATH" ]; then finish help "Specified output directory don't exist! ($CLSPATH)" fi fi # # Testing temporary directory and directory privileges # eraseTmp mkdir ./mte_Tmp_dir if [ "$?" -gt "0" ]; then finish help "You don't have writing privileges on this folder... Unable to continue!" fi # Verify if template file exists. # if [ "$TPLFILE" == "" ]; then message "No template file specified, usig Motte default class schema..." 1 createTplFile TPLFILE="./mte_Tmp_dir/mteTpl.mte" fi if [ ! -f $TPLFILE ]; then finish help "Missing template file. The file you specified cannot be found($TPLFILE). Unable to continue!" fi # # ============================================================================================== # # S T A R T S D A T A B A S E P A R S I N G # # ============================================================================================== # # Create temporary file with database tables mysql -N $DBUSER $DBPASS $DBHOST $DBHOSTPORT $DBNAME --execute="SHOW TABLES">./mte_Tmp_dir/_tmp_tables.mte.tmp if [ "$?" -gt "0" ]; then finish "Errors trying to connect with server\nUsing: $DBUSER $DBPASS $DBHOST $DBHOSTPORT $DBNAME" fi # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GENERATES TMP FILE FOR STRUCTURE - MUST BE DONE BEFORE PROCESSING TABLE CONTENTS # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - message "Creating temporary files..." for TABLE in $(cat ./mte_Tmp_dir/_tmp_tables.mte.tmp); do # Create temporary files for Motte(php) code for eache class touch ./mte_Tmp_dir/_${TABLE}|>_INI.mte.tmp touch ./mte_Tmp_dir/_${TABLE}|>_INI_COM.mte.tmp touch ./mte_Tmp_dir/_${TABLE}|>_INCLUDE.mte.tmp touch ./mte_Tmp_dir/_${TABLE}|>_CTR.mte.tmp touch ./mte_Tmp_dir/_${TABLE}|>_CTRI.mte.tmp touch ./mte_Tmp_dir/_${TABLE}|>_SERIAL.mte.tmp touch ./mte_Tmp_dir/_${TABLE}|>_TBLSTRUCT.mte.tmp done # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GENERATES CLASS CONTENT BASED ON TABLE STRUCTURE # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - message "Obtaining table structure from server..." for TABLE in $(cat ./mte_Tmp_dir/_tmp_tables.mte.tmp); do if [ -f ${CLSPATH}|>/${TABLE}|>.model.php ]; then CLASS_CUSTOMIZED=$(echo $(grep @Customized ${CLSPATH}|>/${TABLE}|>.model.php | cut -f3 -d' ')) else CLASS_CUSTOMIZED="false" fi if [ "$CLASS_CUSTOMIZED" == "false" ]; then # create temporary files based on table structure message " Reading table structure for (${TABLE}) from server..." mysql -N $DBUSER $DBPASS $DBHOST $DBHOSTPORT $DBNAME --execute="DESCRIBE ${TABLE}" | sed s/"\t"/":"/g > ./mte_Tmp_dir/_tmp_fields.mte.tmp if [ "$?" -gt "0" ]; then finish "Error when trying to connect to DB\nUsing: $DBUSER $DBPASS $DBHOST $DBHOSTPORT $DBNAME" fi message " Processing fields from table: ${TABLE}" TBLSTRUCT="\n*\tTable Structure: ${TABLE}\n*\n"; for LINE in $(cat ./mte_Tmp_dir/_tmp_fields.mte.tmp); do # Get field name FIELD=$(echo "${LINE}"|cut -d: -f1) # Get field type TIPO=$(echo "${LINE}"|cut -d: -f2|cut -d'(' -f1) # Set 1 if field is table Primary key (Should be named as table with "_id" sufix) FIELD_KEY=0 if [ "${FIELD}" == "${TABLE}_id" ]; then FIELD_KEY=1 fi # Set 1 if field is required (NOT NULL/YES) FIELD_CTR=0 if [ "$(echo ${LINE}|cut -d: -f3)" != "YES" ]; then FIELD_CTR=1 fi # Getting default value from table structure FIELD_DEFAULT=$(echo "${LINE}"|cut -d: -f5) # Set 1 if Field is a foreign key (Foreing keys should be named as referenced table name and "_id" sufix) FIELD_FK=0 FIELD_FK_ID=$(echo ${FIELD}|>|cut -d_ --fields=1-$(expr $(echo ${FIELD}|>|sed "s/_/\n/g"|wc -l) - 1)) FIELD_FK_TABLE=$(echo ${FIELD_FK_ID}|>|cut -d_ --fields=1-$(expr $(echo ${FIELD_FK_ID}|>|sed "s/_/\n/g"|wc -l) - 1)) if [ "$(echo ${FIELD}|grep _id|wc -w)" == "1" ] && [ "${FIELD_FK_TABLE}" != "${TABLE}" ]; then FIELD_FK=1 fi # Generating Motte(php) code based on field type and expected behavior if [ "${FIELD_KEY}" == "1" ]; then # Auto_incremental / Uses a "serial" table for autonumeric values on InnoDB echo "include_once(MTE_MODEL.'\/serial.model.php');\n">>./mte_Tmp_dir/_${TABLE}|>_INCLUDE.mte.tmp echo "\n\t\t\/\/ Load autoincremental value\n\t\tif (\$this->countErrorExec() == 0){\n\t\t\t\/\/ Ask for autoincremental value\n\t\t\t\$tblSerial = new tbl_serial(\$this->getEngine());\n\t\t\t\$record['${FIELD}'] = \$tblSerial->getNextValue('${FIELD}');\n\t\t}\n">>./mte_Tmp_dir/_${TABLE}|>_SERIAL.mte.tmp else if [ "${FIELD_FK}" == "1" ]; then # Add include_once based on foreign fields echo "include_once(MTE_MODEL.'\/$(echo ${FIELD}|cut -d_ -f1).model.php');\t\/\/ Foreign field\n">>./mte_Tmp_dir/_${TABLE}|>_INCLUDE.mte.tmp # Initialize foreign fields with corresponding table default value echo "\n\t\t\/\/ Initialize foreign fields ${FIELD}\n\t\t\$tbl${FIELD_FK_TABLE} = new tbl_${FIELD_FK_TABLE}(\$this->getEngine());\n\t\t\$record['${FIELD}'] = \$tbl$tbl${FIELD_FK_TABLE}->getDafaultId();\n\n">>./mte_Tmp_dir/_${TABLE}|>_INI.mte.tmp # Record check for needed values (NOT NULL Fields) echo "\n\t\t\/\/ ${FIELD}\n\t\t\$tbl${FIELD_FK_TABLE} = new tbl_${FIELD_FK_TABLE}(\$this->getEngine());\n\t\tif (!\$tbl${FIELD_FK_TABLE}->exists(\"${FIELD_FK_ID}_id='\".\$record['${FIELD}'].\"'\"))\n\t\t\t\$this->addErrorExec(\$this->_i18n('No data could be found for field').' ${FIELD} ');\n">>./mte_Tmp_dir/_${TABLE}|>_CTR.mte.tmp # Integrity check control for record deletion based on foreign key on other tables echo "\n\t\t\/\/ Integrity for ${TABLE}\n\t\t\$tbl${TABLE} = new tbl_${TABLE}(\$this->getEngine());\n\t\t if (\$tbl${TABLE}->exists(\"${FIELD}='\".\$record['${FIELD}'].\"'\"))\n\t\t\t\$this->addErrorExec(\$tbl${TABLE}->getTableComment());\n">>./mte_Tmp_dir/_${FIELD_FK_TABLE}|>_CTRI.mte.tmp # Add include_once for tables used at Integrity check on record deletion. echo "include_once(MTE_MODEL.'\/${TABLE}.model.php');\t\/\/ Integrity Check\n">>./mte_Tmp_dir/_${FIELD_FK_TABLE}|>_INCLUDE.mte.tmp else # Inicializing class attributes with default values if [ "${FIELD_DEFAULT}" != "" ] && [ "${FIELD_DEFAULT}" != "NULL" ]; then VALUE="\"$(echo ${FIELD_DEFAULT} | sed "s/\\//\\\\\//g" )\""; else case "$(echo ${TIPO} | tr 'A-Z' 'a-z' )" in numeric | bit | int | decimal | tinyint | smallint | mediumint | integer | bigint | real | double | float | decimal) VALUE='0' ;; varchar | char | text | tinytext | mediumtext | longtext) VALUE='\"\"' ;; date) VALUE="date('Y-m-d')" ;; time) VALUE="date('H:i:s')" ;; year) VALUE="date('Y')" ;; datetime | timestamp) VALUE="date('Y-m-d H:i:s')" ;; esac fi echo "${FIELD}=${VALUE}">>./mte_Tmp_dir/_${TABLE}|>_INI_COM.mte.tmp # Control de datos VALUE='' if [ "${FIELD_CTR}" == "1" ]; then COMMON_FIELD="\n\t\t\/\/ ${FIELD}\n\t\tif (" COMMON_FIELD2="\$record['${FIELD}'] == '')\n\t\t\t\$this->addErrorExec(\$this->_i18n('Field').' " # based on field type case "$(echo ${TIPO} | tr 'A-Z' 'a-z' )" in int) VALUE="$COMMON_FIELD !is_int($COMMON_FIELD2 ${FIELD} '.\$this->_i18n('must receive an integer value.'));" ;; decimal) VALUE="$COMMON_FIELD !is_float($COMMON_FIELD2 ${FIELD} '.\$this->_i18n('must receive a numeric value.'));" ;; varchar | char) VALUE="$COMMON_FIELD $COMMON_FIELD2 ${FIELD} '.\$this->_i18n('cannot be empty.'));" ;; esac echo "${VALUE}">>./mte_Tmp_dir/_${TABLE}|>_CTR.mte.tmp fi fi fi message " Field ${LINE}..." done # Var assignment alingment if [ "$(cat ./mte_Tmp_dir/_${TABLE}_INI_COM.mte.tmp | wc -l)" -gt "0" ]; then echo "\n\t\t\/\/ Initialize others fields\n">>./mte_Tmp_dir/_${TABLE}|>_INI.mte.tmp # Max length MAX_LENGTH=0 for LINE in $(cat ./mte_Tmp_dir/_${TABLE}|>_INI_COM.mte.tmp); do LINE_LENGTH=$(echo ${LINE}|> | cut -d= -f1 | wc -m) if [ ${LINE_LENGTH}|> -gt ${MAX_LENGTH}|> ]; then MAX_LENGTH=${LINE_LENGTH}|> fi done MAX_LENGTH=$(expr ${MAX_LENGTH}|> + 1) for LINE in $(cat ./mte_Tmp_dir/_${TABLE}|>_INI_COM.mte.tmp); do LINE_LENGTH=$(echo ${LINE}|> | cut -d= -f1 | wc -m) BEFORE="\t\t\$record['$(echo ${LINE} | cut -d= -f1)']" AFTER="$(echo ${LINE} | cut -d= -f2);\n" SPACES=$(echo '################################' | cut -c 1-$(expr ${MAX_LENGTH}|> - ${LINE_LENGTH}|>)) echo "${BEFORE}${SPACES}= ${AFTER}"|sed s/'#'/'\\ '/g>>./mte_Tmp_dir/_${TABLE}|>_INI.mte.tmp done fi # Add comment line for Class MAX_LENGTH='0:0:0:0:0:0' echo "field:type:null:key:default:extra">./mte_Tmp_dir/_tmp_fieldsc.mte.tmp cat ./mte_Tmp_dir/_tmp_fields.mte.tmp>>./mte_Tmp_dir/_tmp_fieldsc.mte.tmp for LINE in $(cat ./mte_Tmp_dir/_tmp_fieldsc.mte.tmp); do COUNTER=1 LENAUX='' while [ $COUNTER -lt 7 ]; do # Maximo actual MAX_LENGTH_AUX=$(echo ${MAX_LENGTH}|> | cut -d: -f${COUNTER}|>) declare -i MAX_LENGTH_AUX LINE_LENGTH=$(echo ${LINE}|> | cut -d: -f${COUNTER}|> | wc -m) LINE_LENGTH=$(expr ${LINE_LENGTH}|> + 1) if [ ${LINE_LENGTH}|> -gt ${MAX_LENGTH_AUX}|> ]; then LENAUX=${LENAUX}|>${LINE_LENGTH}|>':' else LENAUX=${LENAUX}|>${MAX_LENGTH_AUX}|>':' fi COUNTER=$(expr ${COUNTER}|> + 1) done MAX_LENGTH=${LENAUX}|> done echo "\n*\tTable structure: ${TABLE}\n*\n">>./mte_Tmp_dir/_${TABLE}|>_TBLSTRUCT.mte.tmp HEADER='' COUNTER=1 while [ $COUNTER -lt 7 ]; do MAX_LENGTH_AUX=$(echo ${MAX_LENGTH}|> | cut -d: -f${COUNTER}|>) SPACES=$(echo '----------------------------------------------------------------------------' | cut -c 1-${MAX_LENGTH_AUX}|>) HEADER="${HEADER}${SPACES}+" COUNTER=$(expr ${COUNTER}|> + 1) done echo "*\t+${HEADER}\n">>./mte_Tmp_dir/_${TABLE}|>_TBLSTRUCT.mte.tmp LINE_NBR=1 for LINE in $(cat ./mte_Tmp_dir/_tmp_fieldsc.mte.tmp); do COUNTER=1 AUX='#' while [ $COUNTER -lt 7 ]; do LINE_LENGTH=$(echo ${LINE}|> | cut -d: -f${COUNTER}|> | wc -m) MAX_LENGTH_AUX=$(echo ${MAX_LENGTH}|> | cut -d: -f${COUNTER}|>) BEFORE=$(echo ${LINE}|> | cut -d: -f${COUNTER}|>) SPACES=$(echo '#################################################' | cut -c 1-$(expr ${MAX_LENGTH_AUX}|> - ${LINE_LENGTH}|>)) AUX=${AUX}|>${BEFORE}|>${SPACES}|>"|#" COUNTER=$(expr ${COUNTER}|> + 1) done echo "*\t|${AUX}\n" | sed s/'#'/'\\ '/g | sed -r s/'\/'/'\\\/'/g >>./mte_Tmp_dir/_${TABLE}|>_TBLSTRUCT.mte.tmp if [ "${LINE_NBR}" == "1" ]; then echo "*\t+${HEADER}\n">>./mte_Tmp_dir/_${TABLE}|>_TBLSTRUCT.mte.tmp fi LINE_NBR=$(expr ${LINE_NBR}|> + 1) done echo "*\t+${HEADER}">>./mte_Tmp_dir/_${TABLE}|>_TBLSTRUCT.mte.tmp else message " Ignoring table (${TABLE}) because \"CUSTOMIZED\" tag is set to TRUE..." fi done # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # GENERATES MOTTE(php) CLASS AND REPLACE TEMPLATE VARIABLES WITH GENERATED CONTENT # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - message "DB Structure scan completed. Generating Motte Classes..." 2 for TABLE in $(cat ./mte_Tmp_dir/_tmp_tables.mte.tmp); do if [ -f ${CLSPATH}|>/${TABLE}|>.model.php ]; then CLASS_CUSTOMIZED=$(echo $(grep @Customized ${CLSPATH}|>/${TABLE}|>.model.php | cut -f3 -d' ')) else CLASS_CUSTOMIZED="false" fi if [ "$CLASS_CUSTOMIZED" == "false" ]; then message " Motte Class: ${TABLE}.model.php" INI=$(cat ./mte_Tmp_dir/_${TABLE}|>_INI.mte.tmp) CTR=$(cat ./mte_Tmp_dir/_${TABLE}|>_CTR.mte.tmp) INCLUDE=$(cat ./mte_Tmp_dir/_${TABLE}|>_INCLUDE.mte.tmp | uniq) SERIAL=$(cat ./mte_Tmp_dir/_${TABLE}|>_SERIAL.mte.tmp) CTRI=$(cat ./mte_Tmp_dir/_${TABLE}|>_CTRI.mte.tmp) TBLSTRUCT=$(cat ./mte_Tmp_dir/_${TABLE}|>_TBLSTRUCT.mte.tmp) sed -e "s/@DATE/$(date)/g" \ -e "s/@TABLE/$(echo ${TABLE})/g" \ -e "s/@INICIALIZE/$(echo ${INI})/g" \ -e "s/@SERIAL/$(echo ${SERIAL})/g" \ -e "s/@CTRI/$(echo ${CTRI})/g" \ -e "s/@CTR/$(echo ${CTR})/g" \ -e "s/@INCLUDES/$(echo ${INCLUDE})/g" \ -e "s/@TBLSTRUCT/$(echo $TBLSTRUCT)/g" \ $TPLFILE > ./mte_Tmp_dir/${TABLE}|>.model.tmp cat ./mte_Tmp_dir/${TABLE}|>.model.tmp |sed -r s/^[' ']//g> $CLSPATH/${TABLE}|>.model.php else message " Ignoring table (${TABLE}) because \"CUSTOMIZED\" tag is set to TRUE..." fi done message "Erasing temporary files..." # Erasing tmp files eraseTmp message "Task finished." 1 exit 0
<?php /** * @filesource * @author Sistemas INDT / Pablo Erartes (pabloeuy@gmail.com) / Gustavo Boksar (gustavo@boksar.info) * @url http://decreto.indt.edu.uy * @package Decreto_160_006 * @subpackage model * @version 2.0 * @license http://opensource.org/licenses/gpl-license.php GNU Public license (GPLv2+) * * Ultima actualizacion: @DATE * * @Customized false * *@TBLSTRUCT * */ /** * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * I N C L U D E S * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ @INCLUDES /** * Clase para manejar Tabla tbl_@TABLE * */ class tbl_@TABLE extends mteTableSql{ /** * Table Comment * * @var string * @access private */ private $_tableComment; /** * Constructor * * @param mteCnxMySql $engine * @access public * @return tbl_@TABLE */ public function __construct($engine) { // Invoking parent constructor parent::__construct('@TABLE',$engine); $this->setTableComment("@TABLE"); // Replace this value for a more user-friendly description } /** * Destructor * * @access public */ public function __destruct(){ } /** * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * C L A S S M E T H O D S * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /** * Set table comment * * @access public * @param string $comment */ public function setTableComment($comment){ $this->_tableComment = $comment; } /** * Get table comment * * @access public * @return string */ public function getTableComment(){ return $this->_tableComment; } /** * Checking record and fields values * * @access private * @param array $record */ private function _ctrRecord($record){ @CTR } /** * Returns default Id * * @access public * @param array $record */ public function getDafaultId(){ return 0; } /** * Create select * * @access public * @param string $fieldName * @param string $where * @param string $order * @return array */ public function createSelect($fieldName, $where = '', $order = ''){ $result = array(); return $result; } /** * Returns select data * * @access public * @param string $where * @param string $order * @return array */ public function getSelectData($where = '', $order = ''){ $result = array(); return $result; } /** * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * M O T T E E V E N T S H A N D L I N G * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /** * When new record is created * * @access public * @param array $record * @return string */ public function onNewRecord(&$record){ // Inicialize Error management $this->clearErrorExec(); @INICIALIZE // Returns return $this->parseErrorExec($this->getLiteralError().$this->i18n('while initializing data in').' '.$this->getTableComment().":", $this->i18n('Please verify'),"\n"); } /** * Things to do before inserting record to DB * * @access public * @param array $record * @return string */ public function beforeInsert(&$record){ // Inicialize error management $this->clearErrorExec(); // Data control $this->_ctrRecord($record); @SERIAL // Returns return $this->parseErrorExec($this->getLiteralError().$this->i18n('when inserting new record in').' '.$this->getTableComment().":", $this->i18n('Please verify'),"\n"); } /** * After inserting a record to DB * * @access public * @param array $record * @return string */ public function afterInsert(&$record){ // Inicialize error management $this->clearErrorExec(); // Returns return $this->parseErrorExec($this->getLiteralError().$this->i18n('after inserting new record in').' '.$this->getTableComment().":", $this->i18n('Please verify'),"\n"); } /** * Before updating a record * * @access public * @param array $record * @return string */ public function beforeUpdate(&$record){ // Inicialize error management $this->clearErrorExec(); // Data control $error = $this->_ctrRecord($record); // Returns return $this->parseErrorExec($this->getLiteralError().$this->i18n('when updating record data of').' '.$this->getTableComment().":", $this->i18n('Please verify'),"\n"); } /** * After updating a record * * @access public * @param array $record * @return string */ public function afterUpdate(&$record){ // Inicialize error management $this->clearErrorExec(); // Returns return $this->parseErrorExec($this->getLiteralError().$this->i18n('after updating record data of').' '.$this->getTableComment().":", $this->i18n('Please verify'),"\n"); } /** * Before deleting a record * * @access public * @param array $record * @return string */ public function beforeDelete(&$record){ // Inicialize error management $this->clearErrorExec(); @CTRI // Returns return $this->parseErrorExec($this->getLiteralError().$this->i18n('when deleting a record of').' '.$this->getTableComment().":", $this->i18n('Please verify'),"\n"); } /** * After deleting a record * * @access public * @param array $record * @return string */ public function afterDelete(&$record){ // Inicialize error management $this->clearErrorExec(); // Returns return $this->parseErrorExec($this->getLiteralError().$this->i18n('after deleting a record of').' '.$this->getTableComment().":", $this->i18n('Please verify'),"\n"); } /** * Calculated fields * * @access public * @param array $record * @return string */ public function onCalcFields(&$record){ // Inicialize error management $this->clearErrorExec(); // Returns return $this->parseErrorExec($this->getLiteralError().$this->i18n('on generating calculated fields for').' '.$this->getTableComment().":", $this->i18n('Please verify'),"\n"); } } ?>