'install', ); $oTpl= $this->getView('menu'); $oTpl->tLink=$tLink; return $oTpl; } public function _index(){ $sAction=_root::getParam('saction','install'); if($sAction=='install'){ return $this->getActionPackages(); }else if($sAction=='installExtModule'){ return $this->getActionInstallExtModule(); }else if($sAction=='installExtPlugin'){ return $this->getActionInstallExtPlugin(); } return $this->getView('accueil'); } private function copyTo($sUrl,$sTarget){ $sDir=dirname($sTarget); if(is_writable($sDir)==false){ $this->errorZip=trR('repertoireNonWritable',array('#repertoire#'=>$sDir)); return false; } try{ file_put_contents($sTarget,file_get_contents($sUrl.'.down')); return true; } catch(Exception $e){ $this->errorZip=trR('urlNonDispo',array('#url#'=>$sUrl)).$e->getMessage(); return false; } } private function unzipTo($sUrl,$sTarget){ $sDir=dirname($sTarget); if(is_writable($sDir)==false){ $this->errorZip=trR('repertoireNonWritable',array('#repertoire#'=>$sDir)); return false; } try{ file_put_contents($sTarget.'.zip',file_get_contents($sUrl)); } catch(Exception $e){ $this->errorZip=trR('urlNonDispo',array('#url#'=>$sUrl)).$e->getMessage(); return false; } list($foo,$sTargetDirZip)=explode('.',$sTarget); $sTargetDir=$sDir.'/'.$sTargetDirZip; $zip = new ZipArchive; if ($zip->open($sTarget.'.zip')){ $zip->extractTo($sTargetDir); $zip->close(); try{ chmod($sTargetDir,0777); }catch(Exception $e){ } //menage unlink($sTarget.'.zip'); } return true; } /* pages/fr/index.xml content test toto pages/fr/bootstrap_list_1.xml list test presentation bootstrap couche model mods_all_model module crud mods_bootstrap_ */ private function getActionPackages(){ $tLocalIni=$this->getListIni(); $sPage=_root::getParam('market','index'); $oXml=$this->getRemoteMarketPage($sPage); $tType=array('content','list','detail_module','detail_plugin'); $sType=(string)$oXml->type; if(!in_array($sType,$tType)){ return $this->getView('error'); } $oViewHead=$this->getView('market_head'); $oViewHead->tNav=$this->getNav($oXml->nav->link); $sViewHead=$oViewHead->show(); $oView=$this->getView('market_'.$sType); $oView->sHead=$sViewHead; $oView->title=(string)$oXml->title; $oView->content=(string)$oXml->content; if($sType=='list'){ $oView->tBloc=$this->getBlocs($oXml->data->bloc); }else if(in_array($sType,array('detail','detail_module','detail_plugin'))){ $oView->id=(string)$oXml->id; $oView->version=(string)$oXml->version; $oView->author=(string)$oXml->author; $oView->presentation=(string)$oXml->presentation; $oView->utilisation=(string)$oXml->utilisation; $oView->actualites=(string)$oXml->actualites; } $oView->tLocalIni=$tLocalIni; return $oView; } //install private function getActionInstallExtModule(){ $sError= $this->installExtModuleInProject(_root::getParam('sid'),_root::getParam('version')); $oView=$this->getView('market_install'); $oView->error=$sError; return $oView; } private function installExtModuleInProject($sModule,$sVersion){ $sRootUrl=_root::getConfigVar('market.builder.url'); $sRootUrl=str_replace('Builder','Application',$sRootUrl); $sPathModule=$sModule; $sRootPathModule=module_builder::getTools()->getRootWebsite().'module'; $sRootPathApplication=module_builder::getTools()->getRootWebsite(); if(!$this->unzipTo($sRootUrl.'/module/'.$sModule.$sVersion.'.zip',$sRootPathModule.'/'.$sPathModule) ){ return $this->errorZip; } list($foo,$sModuleDir)=explode('.',$sPathModule); if(file_exists($sRootPathModule.'/'.$sModuleDir.'/install.ini')){ $tInstallIni= parse_ini_file($sRootPathModule.'/'.$sModuleDir.'/install.ini',true); foreach($tInstallIni as $tCopy){ $sFrom=$sRootPathModule.'/'.$sModuleDir.'/'.$tCopy['from']; $sTo=$sRootPathApplication.'/'.$tCopy['to']; $sDir=dirname($sTo); if(!is_writable($sDir) ){ return trR('repertoireNonWritable',array('#repertoire#'=>$sDir)); } if(file_exists($sTo)){ return trR('fichierExisteDeja',array('#fichier#'=>$sTo)); } rename($sFrom,$sTo); } } } //install private function getActionInstallExtPlugin(){ $sError= $this->installExtPluginInProject(_root::getParam('sid'),_root::getParam('version')); $oView=$this->getView('market_install'); $oView->error=$sError; return $oView; } private function installExtPluginInProject($sPlugin,$sVersion){ $sRootUrl=_root::getConfigVar('market.builder.url'); $sRootUrl=str_replace('Builder','Application',$sRootUrl); $sRootPathPlugin=module_builder::getTools()->getRootWebsite().'plugin/'; if(!$this->copyTo($sRootUrl.'/plugin/'.$sPlugin,$sRootPathPlugin.'/'.$sPlugin) ){ return $this->errorZip; } if(!$this->copyTo($sRootUrl.'/plugin/'.$sPlugin.'.ini',$sRootPathPlugin.'/'.$sPlugin.'.ini') ){ return $this->errorZip; } } private function getNav($tXmlNav){ $tNav=array(); foreach($tXmlNav as $oXml){ $tNav[ (string)$oXml['href'] ]=(string)$oXml; } return $tNav; } private function getBlocs($tXmlBlocs){ $tBlocs=array(); if($tXmlBlocs){ foreach($tXmlBlocs as $oXmlBloc){ $tBlocs[]=array( 'title'=>(string)$oXmlBloc->title, 'id'=>(string)$oXmlBloc->id, 'author'=>(string)$oXmlBloc->author, 'version'=>(string)$oXmlBloc->version, ); } } return $tBlocs; } public function getRemoteMarketPage($sPage){ $sRootUrl=_root::getConfigVar('market.builder.url'); $sRootUrl=str_replace('Builder','Application',$sRootUrl); $sRootUrl.='pages/'; $sRootUrl.=_root::getConfigVar('language.default'); $sXml=file_get_contents($sRootUrl.'/'.$sPage.'.xml'); $oXml=simplexml_load_string($sXml); return $oXml; } public static function getMarketLink($sAction){ return _root::getLink('builder::edit',array('id'=>_root::getParam('id'),'action'=>'mods_all_market::index','saction'=>'install','market'=>$sAction)); } public static function getInstallLinkModule($sId,$sVersion){ return _root::getLink('builder::edit',array('id'=>_root::getParam('id'),'action'=>'mods_all_market::index','saction'=>'installExtModule','sid'=>$sId,'version'=>$sVersion)); } public static function getInstallLinkPlugin($sId,$sVersion){ return _root::getLink('builder::edit',array('id'=>_root::getParam('id'),'action'=>'mods_all_market::index','saction'=>'installExtPlugin','sid'=>$sId,'version'=>$sVersion)); } public function getListIni(){ $tLinkModule=array(); $tLocalIni=array(); $sPathModule=module_builder::getTools()->getRootWebsite().'module'; $tModulesAll=scandir($sPathModule); foreach($tModulesAll as $sModule){ if(file_exists($sPathModule.'/'.$sModule.'/info.ini')){ $tIni=parse_ini_file($sPathModule.'/'.$sModule.'/info.ini'); $tLocalIni[$tIni['id'] ]=$tIni['version']; } } return $tLocalIni; } }