processSimple();
$oTpl= $this->getView('index');
$oTpl->msg=$msg;
$oTpl->error=null;
$oTpl=$this->analyze($oTpl);
$oTpl->detail=$detail;
return $oTpl;
}
private function processSimple(){
if(!_root::getRequest()->isPost()){
return array(null,null);
}
if(_root::getParam('model') =='' or _root::getParam('method')=='' ){
return array(null,null);
}
if(!file_exists('data/genere/'._root::getParam('id').'/module/table')){
//copie module table + images
$this->importModuleTable();
}
$sModule=_root::getParam('module');
$sView=_root::getParam('view');
$tableClass=_root::getParam('tableClass');
$enableAlt=_root::getParam('enableAlt');
$sModel=_root::getParam('model');
$sMethod=_root::getParam('method');
$arrayAlt=_root::getParam('arrayAlt');
$tColumn=_root::getParam('tColumn');
$tLabel=_root::getParam('tLabel');
$tType=_root::getParam('tType');
$tEnable=_root::getParam('tEnable');
foreach($tColumn as $i => $sColumn){
if(!in_array($sColumn, $tEnable) ){
unset($tColumn[$i]);
unset($tLabel[$i]);
}
}
$ret="\n";
$t="\t";
$sViewContent='setClass(\''.$tableClass.'\');'.$ret;
if(!$enableAlt){
$sViewContent.='/*';
}
$sViewContent.='$oTable->setCycleClass( '.var_export($arrayAlt,true ).');'.$ret;
if(!$enableAlt){
$sViewContent.='*/';
}
$sViewContent.=$ret;
$sViewContent.='$oTable->setHeader('.var_export($tLabel,true).');'.$ret;
$sViewContent.=$ret;
$sViewContent.='if($this->tData){'.$ret;
$sViewContent.=$t.'foreach($this->tData as $oData){'.$ret;
$sViewContent.=$t.$t.'$oTable->addLine(array('.$ret;
foreach($tColumn as $sColumn){
$sViewContent.=$t.$t.$t.'$oData->'.$sColumn.','.$ret;
}
$sViewContent.=$t.$t.'));'.$ret;
$sViewContent.=$t.'}'.$ret;
$sViewContent.='}'.$ret;
$sViewContent.=$ret;
$sViewContent.='echo $oTable->build()->show();';
$oFile=new _file('data/genere/'._root::getParam('id').'/module/'.$sModule.'/view/'.$sView.'.php');
if($oFile->exist()){
return array(tr('vueDejaExistante'),null);
}
$oFile->setContent($sViewContent);
$oFile->save();
$oFile->chmod(0666);
$sModel=str_replace('.php','',$sModel);
$msg=trR('CreationDuFichierVAR',array('#FICHIER#'=>$sView.'.php'));
$detail='';
$detail.=trR('CreationDuFichierVAR',array('#FICHIER#'=>'module/'.$sModule.'/view/'.$sView.'.php'));
$sCode=''.$sMethod.'();'.$ret;
$sCode.='//recupere la vue du module'."\n";
$sCode.='$oView=new _view(\''.$sModule.'::'.$sView.'\');'."\n";
$sCode.='$oView->tData=$tData;'.$ret;
$sCode.="\n";
$sCode.='//assigner la vue retournee a votre layout'."\n";
$sCode.='$this->oLayout->add(\'main\',$oView);'."\n";
$detail.='
'.tr('pourLutiliser').'
'.highlight_string($sCode,1);
return array($msg,$detail);
}
private function analyze($oTpl){
$error=null;
$msg=null;
$detail=null;
module_builder::getTools()->rootAddConf('conf/connexion.ini.php');
$oDir=new _dir(_root::getConfigVar('path.generation')._root::getParam('id').'/model/');
$tFile=array();
$tRowMethodes=array();
foreach($oDir->getListFile() as $oFile){
if(preg_match('/.sample.php/',$oFile->getName()) or !preg_match('/.php$/',$oFile->getName())) continue;
$tFile[]=$oFile->getName();
require_once( $oFile->getAdresse() );
$sClassFoo=substr($oFile->getName(),0,-4);
$oModelFoo=new $sClassFoo;
if( method_exists( $oModelFoo, 'getSelect')){
$tRowMethodes[substr($oFile->getName(),0,-4)]=substr($oFile->getName(),0,-4).'::getSelect()';
}
}
if(_root::getParam('model')!=''){
$sClass=substr(_root::getParam('model'),0,-4);
require_once(_root::getConfigVar('path.generation')._root::getParam('id').'/model/'.$sClass.'.php');
$tBlackListMethod=get_class_methods('abstract_model');
$tBlackListMethod[]='getInstance';
$tMethod=array();
$tMethod0=get_class_methods($sClass);
foreach($tMethod0 as $sMethod){
if(!in_array($sMethod,$tBlackListMethod)){
$tMethod[]=$sMethod;
}
}
$oTpl->tMethod=$tMethod;
}
if(_root::getParam('model') !='' and _root::getParam('method')!='' ){
$tModule=module_builder::getTools()->getListModule();
$sClass=substr(_root::getParam('model'),0,-4);
require_once(_root::getConfigVar('path.generation')._root::getParam('id').'/model/'.$sClass.'.php');
$sMethod=_root::getParam('method');
module_builder::getTools()->loadConfig($sClass);
$oModel=new $sClass;
$tData=array();
try{
$tData=$oModel->$sMethod();
if(!$tData){
$error='Votre methode '.$sMethod.' ne retourne pas d\'enregistrement.
';
$error.='Ce generateur necessite d\'avoir des donnees pour construire le tableau';
}
}catch(Exception $e){
$error='La methode '.$sMethod.' n\'est pas compatible avec ce generateur';
}
$tColumn=array();
if($tData){
foreach($tData as $oRow){
if(is_subclass_of($oRow,'abstract_row')){
$tColumn0=$oRow->getTab();
}else{
$tColumn0=get_object_vars($oRow);
}
$tColumn=array_keys($tColumn0);
break;
}
}
else{
}
$oTpl->sClass=$sClass;
$oTpl->tModule=$tModule;
$tId=module_builder::getTools()->getIdTabFromClass($sClass);
foreach($tColumn as $i => $sColumn){
if(in_array($sColumn, $tId) ){
unset($tColumn[$i]);
}
}
$oTpl->tColumn=$tColumn;
$oTpl->tRowMethodes=$tRowMethodes;
$oModel=new $sClass;
$oTpl->sModuleToCreate=$oModel->getTable();
}
$oTpl->msg=$msg;
$oTpl->detail=$detail;
$oTpl->tFile=$tFile;
$oTpl->error=$error;
return $oTpl;
}
/*---------------------------------------
COMPLEX WITH ORDER
---------------------------------------*/
public function _complexWithOrder(){
list($msg,$detail)=$this->processComplexWithOrder();
$oTpl= new _Tpl('moduleViewTable::complexWithOrder');
$oTpl->msg=$msg;
$oTpl->detail=$detail;
$oTpl=$this->analyze($oTpl);
return $oTpl;
}
private function processComplexWithOrder(){
if(!_root::getRequest()->isPost()){
return array(null,null);
}
if(_root::getParam('model') =='' or _root::getParam('method')=='' ){
return array(null,null);
}
if(!file_exists('data/genere/'._root::getParam('id').'/module/table')){
//copie module table + images
$this->importModuleTable();
}
$sModule=_root::getParam('module');
$sView=_root::getParam('view');
$tableClass=_root::getParam('tableClass');
$enableAlt=_root::getParam('enableAlt');
$sModel=_root::getParam('model');
$sMethod=_root::getParam('method');
$arrayAlt=_root::getParam('arrayAlt');
$tColumn=_root::getParam('tColumn');
$tLabel=_root::getParam('tLabel');
$tType=_root::getParam('tType');
$tEnable=_root::getParam('tEnable');
$tOrderEnable=_root::getParam('tOrderEnable');
$defaultOrder=_root::getParam('tOrderDefault');
foreach($tColumn as $i => $sColumn){
if(!in_array($sColumn, $tEnable) ){
unset($tColumn[$i]);
unset($tLabel[$i]);
}
}
$ret="\n";
$t="\t";
$sViewContent='setClass(\''.$tableClass.'\');'.$ret;
if(!$enableAlt){
$sViewContent.='/*';
}
$sViewContent.='$oTable->setCycleClass( '.var_export($arrayAlt,true ).');'.$ret;
if(!$enableAlt){
$sViewContent.='*/';
}
//header
$sViewContent.=$ret;
foreach($tLabel as $i => $sLabel){
if(in_array($tColumn[$i],$tOrderEnable)){
$sViewContent.='$oTable->addHeaderWithOrder(\''.$sLabel.'\',\''.$tColumn[$i].'\');'.$ret;
}else{
$sViewContent.='$oTable->addHeader(\''.$sLabel.'\');'.$ret;
}
}
$sViewContent.=$ret;
$sViewContent.='if($this->tData){'.$ret;
$sViewContent.=$t.'foreach($this->tData as $oData){'.$ret;
$sViewContent.=$t.$t.'$oTable->addLine(array('.$ret;
foreach($tColumn as $sColumn){
$sViewContent.=$t.$t.$t.'$oData->'.$sColumn.','.$ret;
}
$sViewContent.=$t.$t.'));'.$ret;
$sViewContent.=$t.'}'.$ret;
$sViewContent.='}'.$ret;
$sViewContent.=$ret;
$sViewContent.='echo $oTable->build()->show();';
$oFile=new _file('data/genere/'._root::getParam('id').'/module/'.$sModule.'/view/'.$sView.'.php');
if($oFile->exist()){
//return array('Vue deja existante',null);
}
$oFile->setContent($sViewContent);
$oFile->save();
$oFile->chmod(0666);
$msg='Vue '.$sView.'.php'.' généré avec succès';
$detail='';
$detail.='Création fichier module/'.$sModule.'/view/'.$sView.'.php ';
$sCode=''.$sMethod.'(module_table::getParam(\'order\',\''.$defaultOrder.'\'),module_table::getParam(\'side\',\'ASC\'));'.$ret;
$sCode.='//recupere la vue du module'."\n";
$sCode.='$oView=new _view(\''.$sModule.'::'.$sView.'\');'."\n";
$sCode.='$oView->tData=$tData;'.$ret;
$sCode.="\n";
$sCode.='//assigner la vue retournee a votre layout'."\n";
$sCode.='$this->oLayout->add(\'main\',$oView);'."\n";
$detail.='
Pour l\'utiliser, indiquez dans votre module:
'.highlight_string($sCode,1);
return array($msg,$detail);
}
private function importModuleTable(){
$this->copyFromTo('module/table','module/table');
$tImg=array(
'flecheDownOff.png',
'flecheDownOn.png',
'flecheUpOff.png',
'flecheUpOn.png',
);
foreach($tImg as $sImg){
$this->copyFromTo('module/table/css/images/'.$sImg,'public/css/images/'.$sImg);
}
}
}