| 
								
							 | 
							
								<?php
							 | 
						
						
						
							| 
								
							 | 
							
								    
							 | 
						
						
						
							| 
								
							 | 
							
								    /** Load in the QCodo framework
							 | 
						
						
						
							| 
								
							 | 
							
								    * @package QCodo
							 | 
						
						
						
							| 
								
							 | 
							
								    */
							 | 
						
						
						
							| 
								
							 | 
							
								    require('../prepend.inc.php');
							 | 
						
						
						
							| 
								
							 | 
							
								    /** Load in the QCodeGen Class
							 | 
						
						
						
							| 
								
							 | 
							
								    * @package QCodo
							 | 
						
						
						
							| 
								
							 | 
							
								    */
							 | 
						
						
						
							| 
								
							 | 
							
								    require(__QCODO__ . '/codegen/QCodeGen.class.php');
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								    // Security check for ALLOW_REMOTE_ADMIN
							 | 
						
						
						
							| 
								
							 | 
							
								    // To allow access REGARDLESS of ALLOW_REMOTE_ADMIN, simply remove the line below
							 | 
						
						
						
							| 
								
							 | 
							
								//    QApplication::CheckRemoteAdmin();
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								    /**
							 | 
						
						
						
							| 
								
							 | 
							
								    * Class CodeGenUI - this class provides a more flexible way to run the code generator. It is like codegen.php
							 | 
						
						
						
							| 
								
							 | 
							
								    * but allows you to select settings and the list of tables for which to generate ORM classes.
							 | 
						
						
						
							| 
								
							 | 
							
								    * Basically, this class loads the standard codegen_settings.xml, saves a temporary copy and gives
							 | 
						
						
						
							| 
								
							 | 
							
								    * the filename to QCodeGen::Run.
							 | 
						
						
						
							| 
								
							 | 
							
								    *
							 | 
						
						
						
							| 
								
							 | 
							
								    *@author Erik Winn <erikwinnmail@yahoo.com>
							 | 
						
						
						
							| 
								
							 | 
							
								    *
							 | 
						
						
						
							| 
								
							 | 
							
								    * $Id: codegen_ui.php 522 2009-04-02 18:14:53Z erikwinn $
							 | 
						
						
						
							| 
								
							 | 
							
								    *@version 0.1
							 | 
						
						
						
							| 
								
							 | 
							
								    * @package QCodo
							 | 
						
						
						
							| 
								
							 | 
							
								    */
							 | 
						
						
						
							| 
								
							 | 
							
								    class CodeGenUI extends QForm
							 | 
						
						
						
							| 
								
							 | 
							
								    {
							 | 
						
						
						
							| 
								
							 | 
							
								        ///@var QPanel - the panel containing controls for selecting settings
							 | 
						
						
						
							| 
								
							 | 
							
										public $pnlSettings;
							 | 
						
						
						
							| 
								
							 | 
							
								        ///@var QButton - triggers code generation
							 | 
						
						
						
							| 
								
							 | 
							
								        public $btnRun;
							 | 
						
						
						
							| 
								
							 | 
							
								        ///@var QListBox - a list of tables for which to generate code
							 | 
						
						
						
							| 
								
							 | 
							
								        public $lstTables;
							 | 
						
						
						
							| 
								
							 | 
							
								        ///@var QCheckBox - check to support old style manual queries
							 | 
						
						
						
							| 
								
							 | 
							
								        public $chkManualQuerySupport;
							 | 
						
						
						
							| 
								
							 | 
							
								        ///@var QTextBox - type table suffix
							 | 
						
						
						
							| 
								
							 | 
							
								        public $txtTypeTableIdentifier;
							 | 
						
						
						
							| 
								
							 | 
							
								        ///@var QTextBox - association table suffix
							 | 
						
						
						
							| 
								
							 | 
							
								        public $txtAssociationTableIdentifier;
							 | 
						
						
						
							| 
								
							 | 
							
								        ///@var QTextBox - optional table prefix to remove 
							 | 
						
						
						
							| 
								
							 | 
							
								        public $txtStripFromTableName;
							 | 
						
						
						
							| 
								
							 | 
							
								        ///@var QCheckBox - check to preserve previously generated QQN file
							 | 
						
						
						
							| 
								
							 | 
							
								        public $chkSaveORM;
							 | 
						
						
						
							| 
								
							 | 
							
								        
							 | 
						
						
						
							| 
								
							 | 
							
								        ///@var string - comma delimited list of tables to generate
							 | 
						
						
						
							| 
								
							 | 
							
								        private $strIncludeList;
							 | 
						
						
						
							| 
								
							 | 
							
								        ///@var DOMDocument - contains the codegen_settings.xml XML
							 | 
						
						
						
							| 
								
							 | 
							
										private $objSettingsDom;
							 | 
						
						
						
							| 
								
							 | 
							
								        ///@var string - file name for the QCodo standard codegen_settings.xml; adjust to fit your set up.
							 | 
						
						
						
							| 
								
							 | 
							
								        private $strSettingsTpl;
							 | 
						
						
						
							| 
								
							 | 
							
								        ///@var string - file name for the temporary settings XML; adjust to fit your set up.
							 | 
						
						
						
							| 
								
							 | 
							
								        private $strMySettingsFile = '/tmp/code_generator_settings.xml';
							 | 
						
						
						
							| 
								
							 | 
							
								        ///@var boolean - whether to preserve the old QQN.class.php
							 | 
						
						
						
							| 
								
							 | 
							
								        private $blnSaveORM;
							 | 
						
						
						
							| 
								
							 | 
							
								        ///@var array - contains names of ORM files to save and replace
							 | 
						
						
						
							| 
								
							 | 
							
								        private $aryORMFiles;
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								        ///Runs last .. replace old ORM if desired
							 | 
						
						
						
							| 
								
							 | 
							
								        protected function Form_Exit()
							 | 
						
						
						
							| 
								
							 | 
							
								        {
							 | 
						
						
						
							| 
								
							 | 
							
								            if($this->blnSaveORM)
							 | 
						
						
						
							| 
								
							 | 
							
								            {
							 | 
						
						
						
							| 
								
							 | 
							
								                foreach($this->aryORMFiles as $strFileName => $strTempFileName)
							 | 
						
						
						
							| 
								
							 | 
							
								                    if(file_exists($strTempFileName) )
							 | 
						
						
						
							| 
								
							 | 
							
								                        copy($strTempFileName, $strFileName);
							 | 
						
						
						
							| 
								
							 | 
							
								            }
							 | 
						
						
						
							| 
								
							 | 
							
								        }
							 | 
						
						
						
							| 
								
							 | 
							
								        ///Runs once, first time the page is accessed (in a session)
							 | 
						
						
						
							| 
								
							 | 
							
								        protected function Form_Create()
							 | 
						
						
						
							| 
								
							 | 
							
								        {
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->strSettingsTpl = __DOCROOT__ . __DEVTOOLS__ . '/codegen_settings.xml';
							 | 
						
						
						
							| 
								
							 | 
							
								//            $this->strTemplate = 'codegen_ui.tpl.php';            
							 | 
						
						
						
							| 
								
							 | 
							
								            if( !is_file($this->strSettingsTpl) )
							 | 
						
						
						
							| 
								
							 | 
							
								                throw new QCallerException('Settings template missing: ' . $this->strSettingsTpl);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								            //Set up array of ORM classes to preserve ..
							 | 
						
						
						
							| 
								
							 | 
							
								            $strBaseDir = __DATAGEN_CLASSES__;
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->aryORMFiles = array(
							 | 
						
						
						
							| 
								
							 | 
							
								                        $strBaseDir . '/_type_class_paths.inc.php' => $strBaseDir . '/_type_class_paths.inc.php-gentmp',
							 | 
						
						
						
							| 
								
							 | 
							
								                        $strBaseDir . '/_class_paths.inc.php' => $strBaseDir . '/_class_paths.inc.php-gentmp',
							 | 
						
						
						
							| 
								
							 | 
							
								                        $strBaseDir . '/QQN.class.php' => $strBaseDir . '/QQN.class.php-gentmp',
							 | 
						
						
						
							| 
								
							 | 
							
								                        $strBaseDir . '/QMetaDataBase.class.php' => $strBaseDir . '/QMetaDataBase.class.php-gentmp',
							 | 
						
						
						
							| 
								
							 | 
							
								                                                            );
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->objSettingsDom = new DOMDocument();
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->objSettingsDom->load( $this->strSettingsTpl );
							 | 
						
						
						
							| 
								
							 | 
							
								                        
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->pnlSettings = new QPanel($this);
							 | 
						
						
						
							| 
								
							 | 
							
								            //Note that we are setting a template for the child panel here:
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->pnlSettings->Template = 'codegen_ui_settings.tpl.php';
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->initTableList();
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								            //get the other settings in the standard file ..
							 | 
						
						
						
							| 
								
							 | 
							
								            $objTypeTableIdentifierNode = $this->objSettingsDom->getElementsByTagName('typeTableIdentifier')->item(0);
							 | 
						
						
						
							| 
								
							 | 
							
								            $objAssociationTableIdentifierNode = $this->objSettingsDom->getElementsByTagName('associationTableIdentifier')->item(0);
							 | 
						
						
						
							| 
								
							 | 
							
								            $objManualQueryNode = $this->objSettingsDom->getElementsByTagName('manualQuery')->item(0);
							 | 
						
						
						
							| 
								
							 | 
							
								            $objStripFromTableName= $this->objSettingsDom->getElementsByTagName('stripFromTableName')->item(0);
							 | 
						
						
						
							| 
								
							 | 
							
								            
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->chkManualQuerySupport = new QCheckBox($this->pnlSettings);
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->chkManualQuerySupport->Name = 'Support (old) Manual Queries';
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->chkManualQuerySupport->Checked =  ( 'true' == $objManualQueryNode->getAttribute('support') );
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->txtAssociationTableIdentifier = new QTextBox($this->pnlSettings);
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->txtAssociationTableIdentifier->Name = 'Association table suffix';
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->txtAssociationTableIdentifier->Text = $objAssociationTableIdentifierNode->getAttribute('suffix');
							 | 
						
						
						
							| 
								
							 | 
							
								            
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->txtTypeTableIdentifier = new QTextBox($this->pnlSettings);
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->txtTypeTableIdentifier->Name = 'Type table suffix';
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->txtTypeTableIdentifier->Text = $objTypeTableIdentifierNode->getAttribute('suffix');
							 | 
						
						
						
							| 
								
							 | 
							
								                       
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->txtStripFromTableName = new QTextBox($this->pnlSettings);
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->txtStripFromTableName->Name = 'Remove table prefix';
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->txtStripFromTableName->Text = $objStripFromTableName->getAttribute('prefix');
							 | 
						
						
						
							| 
								
							 | 
							
								            
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->chkSaveORM = new QCheckBox($this->pnlSettings);
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->chkSaveORM->Name = 'Preserve ORM (Recommended)';
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->chkSaveORM->Checked =  true;
							 | 
						
						
						
							| 
								
							 | 
							
								            
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->btnRun = new QButton($this);
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->btnRun->Text = 'Run Generator';
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->btnRun->AddAction(new QClickEvent(), new QServerAction('btnRun_Click'));
							 | 
						
						
						
							| 
								
							 | 
							
										}
							 | 
						
						
						
							| 
								
							 | 
							
								        /**
							 | 
						
						
						
							| 
								
							 | 
							
								        * Creates a list box with a list of the possible tables for which to generate ORM code
							 | 
						
						
						
							| 
								
							 | 
							
								        *
							 | 
						
						
						
							| 
								
							 | 
							
								        * @todo - suppport multiple databases ..
							 | 
						
						
						
							| 
								
							 | 
							
								        */
							 | 
						
						
						
							| 
								
							 | 
							
								        private function initTableList()
							 | 
						
						
						
							| 
								
							 | 
							
								        {
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->lstTables = new QListBox($this->pnlSettings);
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->lstTables->Name = 'Select tables';
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->lstTables->SelectionMode = QSelectionMode::Multiple;
							 | 
						
						
						
							| 
								
							 | 
							
								            
							 | 
						
						
						
							| 
								
							 | 
							
								            $objDbi = QApplication::$Database[1];
							 | 
						
						
						
							| 
								
							 | 
							
								            $aryTables = $objDbi->GetTables();
							 | 
						
						
						
							| 
								
							 | 
							
								            $intSize = 0;
							 | 
						
						
						
							| 
								
							 | 
							
								            foreach($aryTables as $strTableName)
							 | 
						
						
						
							| 
								
							 | 
							
								            {
							 | 
						
						
						
							| 
								
							 | 
							
								                $intSize += 1;
							 | 
						
						
						
							| 
								
							 | 
							
								                $this->lstTables->AddItem(new QListItem($strTableName, $strTableName));
							 | 
						
						
						
							| 
								
							 | 
							
								            }
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->lstTables->Rows = $intSize > 10 ? 10: $intSize;
							 | 
						
						
						
							| 
								
							 | 
							
								        }
							 | 
						
						
						
							| 
								
							 | 
							
								        
							 | 
						
						
						
							| 
								
							 | 
							
								        /**
							 | 
						
						
						
							| 
								
							 | 
							
								        * This is called when the user clicks "Run Generator". It collects the values set in the upper
							 | 
						
						
						
							| 
								
							 | 
							
								        * half of the page, writes a temporary XML doc for CodeGen settings and runs QCodeGen::Run
							 | 
						
						
						
							| 
								
							 | 
							
								        * using the temporary settings.
							 | 
						
						
						
							| 
								
							 | 
							
								        * Parameters are ignored.
							 | 
						
						
						
							| 
								
							 | 
							
								        */
							 | 
						
						
						
							| 
								
							 | 
							
										protected function btnRun_Click($strFormId, $strControlId, $strParameter)
							 | 
						
						
						
							| 
								
							 | 
							
								        {
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->objSettingsDom->load( $this->strSettingsTpl );
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->strIncludeList = '';
							 | 
						
						
						
							| 
								
							 | 
							
								            $arySelectedItems = $this->lstTables->SelectedItems;
							 | 
						
						
						
							| 
								
							 | 
							
								            if(!$arySelectedItems)
							 | 
						
						
						
							| 
								
							 | 
							
								                return;
							 | 
						
						
						
							| 
								
							 | 
							
								            foreach( $arySelectedItems as $objListItem)
							 | 
						
						
						
							| 
								
							 | 
							
								            {
							 | 
						
						
						
							| 
								
							 | 
							
								                if('' != $this->strIncludeList)
							 | 
						
						
						
							| 
								
							 | 
							
								                    $this->strIncludeList .= ',';
							 | 
						
						
						
							| 
								
							 | 
							
								                $this->strIncludeList .= $objListItem->Value;
							 | 
						
						
						
							| 
								
							 | 
							
								            }
							 | 
						
						
						
							| 
								
							 | 
							
								            if('' == $this->strIncludeList)
							 | 
						
						
						
							| 
								
							 | 
							
								                return;
							 | 
						
						
						
							| 
								
							 | 
							
								            
							 | 
						
						
						
							| 
								
							 | 
							
								            //first, set up the table selection ..
							 | 
						
						
						
							| 
								
							 | 
							
								            $objExcludesNode = $this->objSettingsDom->getElementsByTagName('excludeTables')->item(0);
							 | 
						
						
						
							| 
								
							 | 
							
								            $objIncludesNode = $this->objSettingsDom->getElementsByTagName('includeTables')->item(0);
							 | 
						
						
						
							| 
								
							 | 
							
								            $objExcludesNode->setAttribute('pattern','[0-9a-zA-Z_]*');
							 | 
						
						
						
							| 
								
							 | 
							
								            $objIncludesNode->setAttribute('list', $this->strIncludeList);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								            //extra settings ..
							 | 
						
						
						
							| 
								
							 | 
							
								            $objManualQueryNode = $this->objSettingsDom->getElementsByTagName('manualQuery')->item(0);
							 | 
						
						
						
							| 
								
							 | 
							
								            $objTypeTableIdentifierNode = $this->objSettingsDom->getElementsByTagName('typeTableIdentifier')->item(0);
							 | 
						
						
						
							| 
								
							 | 
							
								            $objAssociationTableIdentifierNode = $this->objSettingsDom->getElementsByTagName('associationTableIdentifier')->item(0);
							 | 
						
						
						
							| 
								
							 | 
							
								            $objStripFromTableName= $this->objSettingsDom->getElementsByTagName('stripFromTableName')->item(0);
							 | 
						
						
						
							| 
								
							 | 
							
								            
							 | 
						
						
						
							| 
								
							 | 
							
								            $objManualQueryNode->setAttribute('support', $this->chkManualQuerySupport->Checked ? 'true' : 'false');
							 | 
						
						
						
							| 
								
							 | 
							
								            $objAssociationTableIdentifierNode->setAttribute('suffix', trim($this->txtTypeTableIdentifier->Text));
							 | 
						
						
						
							| 
								
							 | 
							
								            $objTypeTableIdentifierNode->setAttribute('suffix', trim($this->txtTypeTableIdentifier->Text));
							 | 
						
						
						
							| 
								
							 | 
							
								            $objStripFromTableName->setAttribute('suffix', trim($this->txtStripFromTableName->Text));
							 | 
						
						
						
							| 
								
							 | 
							
								            
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->objSettingsDom->save( $this->strMySettingsFile );
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								            //By default QCodeGen creates new ORM files - save these and replace if desired ..
							 | 
						
						
						
							| 
								
							 | 
							
								            $this->blnSaveORM = $this->chkSaveORM->Checked;
							 | 
						
						
						
							| 
								
							 | 
							
								            if($this->blnSaveORM)
							 | 
						
						
						
							| 
								
							 | 
							
								            {
							 | 
						
						
						
							| 
								
							 | 
							
								                foreach($this->aryORMFiles as $strFileName => $strTempFileName)
							 | 
						
						
						
							| 
								
							 | 
							
								                    if(file_exists($strFileName) )
							 | 
						
						
						
							| 
								
							 | 
							
								                        copy($strFileName, $strTempFileName);
							 | 
						
						
						
							| 
								
							 | 
							
								            }
							 | 
						
						
						
							| 
								
							 | 
							
								            
							 | 
						
						
						
							| 
								
							 | 
							
								            QCodeGen::Run($this->strMySettingsFile);		
							 | 
						
						
						
							| 
								
							 | 
							
								        }
							 | 
						
						
						
							| 
								
							 | 
							
								        
							 | 
						
						
						
							| 
								
							 | 
							
								        /**
							 | 
						
						
						
							| 
								
							 | 
							
								        * Convenience function for formatting output - pretty prints the given text
							 | 
						
						
						
							| 
								
							 | 
							
								        *@param string strText - text to format and print to screen
							 | 
						
						
						
							| 
								
							 | 
							
								        */
							 | 
						
						
						
							| 
								
							 | 
							
								        protected function DisplayMonospacedText($strText)
							 | 
						
						
						
							| 
								
							 | 
							
								        {
							 | 
						
						
						
							| 
								
							 | 
							
								            $strText = QApplication::HtmlEntities($strText);
							 | 
						
						
						
							| 
								
							 | 
							
								            $strText = str_replace('    ', '    ', $strText);
							 | 
						
						
						
							| 
								
							 | 
							
								            $strText = str_replace(' ', ' ', $strText);
							 | 
						
						
						
							| 
								
							 | 
							
								            $strText = str_replace("\r", '', $strText);
							 | 
						
						
						
							| 
								
							 | 
							
								            $strText = str_replace("\n", '<br/>', $strText);
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								            _p($strText, false);
							 | 
						
						
						
							| 
								
							 | 
							
								        }
							 | 
						
						
						
							| 
								
							 | 
							
									}
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
									CodeGenUI::Run('CodeGenUI');
							 | 
						
						
						
							| 
								
							 | 
							
								?>
							 |