/class.xmodtif.inc
PHP | 2176 lines | 1984 code | 79 blank | 113 comment | 402 complexity | eebb76002582b2a3971ed6957c3c1918 MD5 | raw file
Possible License(s): LGPL-2.0, LGPL-2.1, GPL-3.0, Apache-2.0, BSD-3-Clause
Large files files are truncated, but you can click here to view the full file
- <?php
- class XModTif extends XModTable{
- public $submodmax=20;
- public $oiddc; // oid de la ressource en cours
- public $NSURI; // NS principal des XML TiF
- public $prefixSQL; // Prefix SQL sur les tables du module (TiF1_, TiF2_ ...)
- public $alreadyexport=array();
- public $structparam=array(); // Paramètres sur la structure des granules => renseigner dans prepareParam
- public $idlist=array();
- public $acttype=''; // Indique le type d'import en cours (ACVS, GITD...)
- public $tzrns='';
- private $_cache=array(); // Cache du module
- public $TiFTables=array("CAPAGLOB","DMULTIMEDIA","DCONTACT","DADRESSE","DPERSONNE","DMOYENCOM","INFOLEG","DCLASSEMENT","DGEOLOC","ZONES",
- "DPOINT","DCOOR","DENV","DCARTE","DACCES","DPERIODE","DDATE","DJOURS","JOURS","HORAIRES","DCLIENTELES","DCLIENT",
- "USAGE","DMODERESA","CAPACAPA","CAPASUP","DCAPAPREST","DCAPAUNIT","DDISP","DOFFREPRESTA","DPRESTA","DTARIF",
- "DDESCRCOMP","DITI","DPLANNING","DPRESTAPLA","JOURPLA","PRESTLIEE");
- public $withCodeAttr=array('table' => array('DC'),
- 'target' => array('LS_Communes','LS_ZoneNoms','LS_Pays'));
-
- // Propriétés ACVS
- public $ACVSUrl='http://www.acvsnet.net/SI-ACVS/WebServices';
- public $ACVSFile='ACVSWebServices.asmx';
- public $ACVSFileWSDL='ACVSWebServices.asmx?WSDL';
- public $ACVSNSUri='http://www.acvsnet.net/tif3acvs/';
- public $ACVSEnvUris='xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"';
- public $ACVSLogin;
- public $ACVSPwd;
- public $ACVSFilter;
- // Propriétés GITD
- public $GITDUrl='http://extranet.hautes-alpes.net/publication?WSDL';
- public $GITDUrlDomain='http://webservice.hautes-alpes.net';
- public $GITDLogin;
- public $GITDPwd;
- public $GITDFilter;
- // Propriétés SITRA
- public $SITRANSUri='';
- public $SITRADirs='';
- public $SITRAExportFileRegex='/^\([0-9]+\)_ListeOI_([a-z]+)_([0-9]{8}_[0-9]{6})\.xml$/i';
- public $SITRADelFileRegex='/^\([0-9]+\)_DEL_ListeOI_([0-9]{8}_[0-9]{6})\.xml$/i';
- public $SITRAImagesFileRegex='/^\([0-9]+\)_ImagesOI_([0-9]{8}_[0-9]{6})\.zip$/i';
- public $SITRASelectionsFileRegex='/^\([0-9]+\)_Selections_([0-9]{8}_[0-9]{6})\.xml$/i';
- function __construct($ar=NULL){
- parent::__construct($ar);
- if(in_array('ACVS',$this->type)) $this->TiFTables[]="MODESPAIEMENT";
- }
- /// securite des fonctions accessibles par le web
- function secGroups($function, $group=NULL) {
- $g=array();
- $g['importNomenclature']=array('admin');
- $g['ACVSImport']=array('rwv','admin','none');
- $g['GITDImport']=array('rwv','admin','none');
- $g['GITDCheckService']=array('none');
- $g['SITRAImport']=array('rwv','admin','none');
- $g['exportTiF']=array('rwv','admin','none');
- if(isset($g[$function])) {
- if(!empty($group)) return in_array($group, $g[$function]);
- return $g[$function];
- }
- return parent::secGroups($function,$group);
- }
- public function initOptions() {
- parent::initOptions();
- $this->_options->setOpt('Prefix SQL des tables', 'prefixSQL', 'text');
- $this->_options->setOpt('Type de la structure', 'type', 'multiplelist', array('values' => array('','ACVS','GITD','SITRA'),
- 'labels' => array('---','ACVS','GITD','SITRA')));
-
- $this->_options->setOpt('ACVS : Login', 'ACVSLogin', 'text');
- $this->_options->setOpt('ACVS : Password', 'ACVSPwd', 'text');
- $this->_options->setOpt('ACVS : Filtre', 'ACVSFilter', 'text', array('rows' => 6,'cols' => 80));
- $this->_options->setOpt('GITD : Login', 'GITDLogin', 'text');
- $this->_options->setOpt('GITD : Password', 'GITDPwd', 'text');
- $this->_options->setOpt('GITD : Filtre', 'GITDFilter', 'text', array('rows' => 6,'cols' => 80));
- $this->_options->setOpt('SITRA : Répertoires', 'SITRADirs', 'text', array('rows' => 6,'cols' => 80));
- }
- protected function _actionlist(&$my) {
- parent::_actionlist($my);
- $myclass=get_class($this);
- $moid=$this->_moid;
- $o1=new XModuleAction($this,'deletewithtable',XLabels::getSysLabel('xmodtif','deletewithtable','text'),
- 'class='.$myclass.'&moid='.$moid.'&_function=delete&template=proc.html&withtable=1');
- $o1->needsconfirm=true;
- $my['deletewithtable']=$o1;
- }
-
- /// Suppression de tous les modules lié à TiF
- function delete($ar){
- global $XSHELL;
- $p=new XParam($ar,array('tplentry' => ''));
- $withtable=$p->get('withtable');
- if(!empty($withtable)){
- $tplentry=$p->get('tplentry');
- $message=parent::delete(array('tplentry' => TZR_RETURN_DATA));
- $rs=selectQuery('select MOID from MODULES where MPARAM like "%<field name=\"table\" type=\"%\"><value>'.
- '<![CDATA['.$this->prefixSQL.'%]]></value></field>%" order by MOID');
- while($rs && ($ors=$rs->fetch())){
- $mod=XModule::objectFactory($ors['MOID']);
- $message.=$mod->delete(array('tplentry'=>TZR_RETURN_DATA));
- }
- $rs=selectQuery('select BTAB from BASEBASE where BTAB LIKE "'.$this->prefixSQL.'LS_%"');
- while($rs && ($ors=$rs->fetch())){
- $xbase=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$ors['BTAB']);
- $ret=$xbase->procDeleteDataSource(array('tplentry' => TZR_RETURN_DATA));
- $message.=$ret['message'];
- }
- return XShell::toScreen2($tplentry,'message',$message);
- }else{
- return parent::delete($ar);
- }
- }
- /// Efface toutes les fiches liés à la ressource
- function del($ar) {
- $p=new XParam($ar,array());
- $oid=$p->get('_selected');
- $selectedok=$p->get('_selectedok');
- if(($selectedok!='ok') || empty($oid)) $oid=$p->get('oid');
- if(!is_array($oid)) $oid=array($oid => 1);
- if(!empty($oid)){
- $oid=array_keys($oid);
- $oid_list = '"'.implode('","',$oid).'"';
- foreach($this->TiFTables as $table) {
- updateQuery('delete from '.$this->prefixSQL.$table.' where tzr_dc in ('.$oid_list.')');
- }
- updateQuery('delete from '.$this->xset->getTable().' where KOID in ('.$oid_list.')');
- }
- }
- /// Prepare les paramètres des différents granules pour l'import/export
- function prepareParam(){
- if(empty($this->_cache['gparam-'.$this->acttype])){
- $gparam=array();
- //--- DC
- $gparam['dc']=array(
- 'DC' => array(
- 'balisegroup' => NULL,
- 'balises' => array(
- 'DublinCore' => array(
- 'table' => 'DC','delNS' => false,'oidfield' => 'dc:identifier',
- 'updfield' => 'dcterms:modified',
- 'ar' => array('tzr_type' => $this->acttype),
- 'notexport' => array('ModePaiement','ObservationModePaiement',
- 'ObservationModePaiement',
- 'CapacitesGlobales')))));
- //--- Multimedia
- $gparam['mu']=array('MU' => array('balisegroup' => 'Multimedia',
- 'balises' => array('DetailMultimedia' => array('table' => 'DMULTIMEDIA','fssm' => 'tzr_lie',
- 'notexport' => array('URL_url','URL_img')))));
- //--- Contact
- $param=array('MC' => array('balisegroup' => 'MoyensCommunications',
- 'balises' => array('DetailMoyenCom' => array('table' => 'DMOYENCOM','fssm' => 'tzr_lie'))));
- $param=array('PE' => array('balisegroup' => 'Personnes',
- 'balises' => array('DetailPersonne' => array('table' => 'DPERSONNE','fssm' => 'tzr_lie','ssm' => $param))));
- $param=array('AD' => array('balisegroup' => 'Adresses',
- 'balises' => array('DetailAdresse' => array('table' => 'DADRESSE','fssm' => 'tzr_lie','ssm' => $param))));
- $gparam['co']=array('CO' => array('balisegroup' => 'Contacts',
- 'balises' => array('DetailContact' => array('table' => 'DCONTACT','fssm' => 'tzr_lie','ssm' => $param))));
- $param=array('CT' => array('balisegroup' => 'Contact',
- 'balises' => array('DetailContact' => array('table' => 'DCONTACT','fssm' => 'tzr_lie','ssm' => $param))));
- $gparam['sg']=array('SG' => array('balisegroup' => NULL,
- 'balises' => array('StructureGestion' => array('table' => 'STRGESTION','fssm' => 'tzr_lie','ssm' => $param))));
- $gparam['si']=array('SI' => array('balisegroup' => NULL,
- 'balises' => array('StructureInformation' => array('table' => 'STRINFO','fssm' => 'tzr_lie','ssm' => $param))));
- //--- Informations légales
- $gparam['il']=array('IL' => array('balisegroup' => NULL,
- 'balises' => array('InformationsLegales' => array('table' => 'INFOLEG','fssm' => 'tzr_lie'))));
- //--- Classement
- $gparam['cl']=array('Classement' => array('balisegroup' => 'Classements',
- 'balises' => array('DetailClassement' => array('table' => 'DCLASSEMENT','fssm' => 'tzr_lie'))));
- //--- Geoloc
- $param=array('CO' => array('balisegroup' => 'Coordonnees',
- 'balises' => array('DetailCoordonnees' => array('table' => 'DCOOR','fssm' => 'tzr_lie'))),
- 'EN' => array('balisegroup' => 'Environnements',
- 'balises' => array('DetailEnvironnement' => array('table' => 'DENV','fssm' => 'tzr_lie'))),
- 'CA' => array('balisegroup' => 'Cartes',
- 'balises' => array('DetailCarte' => array('table' => 'DCARTE','fssm' => 'tzr_lie'))),
- 'AC' => array('balisegroup' => 'Acces',
- 'balises' => array('DetailAcces' => array('table' => 'DACCES','fssm' => 'tzr_lie'))),
- 'MU' => array('balisegroup' => 'Multimedia',
- 'balises' => array('DetailMultimedia' => array('table' => 'DMULTIMEDIA','fssm' => 'tzr_lie',
- 'ar' => array('tzr_ispoint' => 1)))));
- $param=array('PO' => array('balisegroup' => 'Points',
- 'balises' => array('DetailPoint' => array('table' => 'DPOINT','fssm' => 'tzr_lie','ssm' => $param))));
- $param=array('ZO' => array('balisegroup' => NULL,
- 'balises' => array('Zone' => array('table' => 'ZONES','fssm' => 'tzr_lie','ssm' => $param))));
- $gparam['ge']=array('GE' => array('balisegroup' => 'Geolocalisations',
- 'balises' => array('DetailGeolocalisation' => array('table' => 'DGEOLOC','fssm' => 'tzr_lie',
- 'ssm' => $param))));
- //--- Periode
- $param=array('HO' => array('balisegroup' => NULL,
- 'balises' => array('Horaires' => array('table' => 'HORAIRES','fssm' => 'tzr_lie'))));
- $param=array('JO' => array('balisegroup' => NULL,
- 'balises' => array('Jour' => array('table' => 'JOURS','fssm' => 'tzr_lie','ssm' => $param))));
- $param=array('DJ' => array('balisegroup' => 'Jours',
- 'balises' => array('DetailJours' => array('table' => 'DJOURS','fssm' => 'tzr_lie','ssm' => $param))));
- $param=array('DA' => array('balisegroup' => 'Dates',
- 'balises' => array('DetailDates' => array('table' => 'DDATE','fssm' => 'tzr_lie','ssm' => $param))));
- $gparam['pe']=array('PE' => array('balisegroup' => 'Periodes',
- 'balises' => array('DetailPeriode' => array('table' => 'DPERIODE','fssm' => 'tzr_lie','ssm' => $param))));
- //--- Clientele
- $param=array('DC' => array('balisegroup' => NULL,
- 'balises' => array('DetailClient' => array('table' => 'DCLIENT','fssm' => 'tzr_lie'))));
- $gparam['cli']=array('CL' => array('balisegroup' => 'Clienteles',
- 'balises' => array('DetailClienteles' => array('table' => 'DCLIENTELES','fssm' => 'tzr_lie',
- 'ssm' => $param))));
- //--- Langues
- $gparam['la']=array('LA' => array('balisegroup' => 'Langues',
- 'balises' => array('Usage' => array('table' => 'USAGE','fssm' => 'tzr_lie'),
- 'ListeLangues' => array('table' => 'LISTELANGUES','fssm' => 'tzr_lie'))));
- //--- Mode resa
- $gparam['mr']=array('MO' => array('balisegroup' => 'ModesReservations',
- 'balises' => array('DetailModeReservation' => array('table' => 'DMODERESA','fssm' => 'tzr_lie',
- 'ssm' => $gparam['co']))));
- //--- Capacité sup
- $gparam['cs']=array('CS' => array('balisegroup' => NULL,
- 'balises' => array('Capacite' => array('table' => 'CAPACAPA','fssm' => 'tzr_lie','direct' => true),
- 'Superficie' => array('table' => 'CAPASUP','fssm' => 'tzr_lie','direct' => true))));
- //--- Capacité presta
- $gparam['cp']=array('CP' => array('balisegroup' => 'CapacitesPrestations',
- 'balises' => array('DetailCapacitePrestation' => array('table' => 'DCAPAPREST','fssm' => 'tzr_lie',
- 'ssm' => $gparam['cs']))));
- //--- Capacité unité
- $param=array('DD' => array('balisegroup' => 'Dispositions',
- 'balises' => array('DetailDisposition' => array('table' => 'DDISP','fssm' => 'tzr_lie'))));
- $gparam['cu']=array('CU' => array('balisegroup' => 'CapacitesUnites',
- 'balises' => array('DetailCapaciteUnite' => array('table' => 'DCAPAUNIT','fssm' => 'tzr_lie',
- 'ssm' => $param))));
- //--- Offre presta
- $oparamcu=$gparam['cu'];
- $oparamcp=$gparam['cp'];
- $oparamcp['CP']['balisegroup']=$oparamcu['CU']['balisegroup']=NULL;
- $oparamcp['CP']['balises']['DetailCapacitePrestation']['ar']=$oparamcu['CU']['balises']['DetailCapaciteUnite']['ar']=
- array('tzr_ispresta' => 1);
- $param=array('PR' => array('balisegroup' => NULL,
- 'balises' => array('DetailPrestation' => array('table' => 'DPRESTA','fssm' => 'tzr_lie','ssm' => $gparam['mr'],
- 'linkparam' => array('DetailCapaciteUnite' => $oparamcu,
- 'DetailCapacitePrestation' => $oparamcp)))));
- $gparam['op']=array('OP' => array('balisegroup' => 'OffresPrestations',
- 'balises' => array('DetailOffrePrestation' => array('table' => 'DOFFREPRESTA','fssm' => 'tzr_lie',
- 'ssm' => $param))));
- //--- Tarif
- $oparamcl=$gparam['cli']['CL']['balises']['DetailClienteles']['ssm'];
- $oparampr=$gparam['op']['OP']['balises']['DetailOffrePrestation']['ssm'];
- $oparampe=$gparam['pe'];
- $oparampe['PE']['balisegroup']=$oparampr['PR']['balisegroup']=$oparamcl['DC']['balisegroup']=NULL;
- $oparampe['PE']['balises']['DetailPeriode']['ar']=$oparampr['PR']['balises']['DetailPrestation']['ar']=
- $oparamcl['DC']['balises']['DetailClient']['ar']=array('tzr_istarif' => 1);
- $oparampe['PE']['balises']['DetailPeriode']['fssm']=$oparampr['PR']['balises']['DetailPrestation']['fssm']=
- $oparamcl['DC']['balises']['DetailClient']['fssm']=NULL;
- $gparam['ta']=array('TA' => array('balisegroup' => 'DetailTarifs',
- 'balises' => array('DetailTarif' => array('table' => 'DTARIF','fssm' => 'tzr_lie',
- 'linkparam' => array('DetailClient' => $oparamcl,
- 'DetailPrestation' => $oparampr,
- 'DetailPeriode' => $oparampe)))));
- //--- Descr comp
- $gparam['desc']=array('DE' => array('balisegroup' => 'DescriptionsComplementaires',
- 'balises' => array('DetailDescriptionComplementaire' => array('table' => 'DDESCRCOMP',
- 'fssm' => 'tzr_lie'))));
- //--- Itinieraire
- $oparamzo=$gparam['ge']['GE']['balises']['DetailGeolocalisation']['ssm'];
- $oparamzo['ZO']['balisegroup']=NULL;
- $oparamzo['ZO']['balises']['Zone']['ar']=array('tzr_isiti' => 1);
- $gparam['it']=array('IT' => array('balisegroup' => 'Itineraires',
- 'balises' => array('DetailItineraire' => array('table' => 'DITI','fssm' => 'tzr_lie',
- 'linkparam' => array('Zone' => $oparamzo)))));;
- //--- Planning
- $param=array('JP' => array('balisegroup' => NULL,
- 'balises' => array('JourPlanning' => array('table' => 'JOURPLA','fssm' => 'tzr_lie'))));
- $oparampr['PR']['balises']['DetailPrestation']['ar']=array('tzr_isprestapla' => 1);
- $param=array('PP' => array('balisegroup' => 'PrestationsPlanning',
- 'balises' => array('DetailPrestationPlanning' => array('table' => 'DPRESTAPLA','fssm' => 'tzr_lie',
- 'ssm' => $param,
- 'linkparam' => array('DetailPrestation' => $oparampr)))));
- $oparampe['PE']['balises']['DetailPeriode']['ar']=array('tzr_ispla' => 1);
- $gparam['pla']=array('PL' => array('balisegroup' => 'Plannings',
- 'balises' => array('DetailPlanning' => array('table' => 'DPLANNING','fssm' => 'tzr_lie','ssm' => $param,
- 'linkparam' => array('DetailPeriode' => $oparampe)))));
- //--- Prestations liées
- $gparam['pliee']=array('PL' => array('balisegroup' => 'PrestationsLiees',
- 'balises' => array('DetailPrestationLiee' => array('table' => 'PRESTLIEE','fssm' => 'tzr_lie'))));
- $this->_cache['gparam-'.$this->acttype]=$gparam;
- }
- $this->structparam=$this->_cache['gparam-'.$this->acttype];
- }
- /// Importe une chaine/fichier au format TiF
- function _import($ar=NULL){
- $p=new XParam($ar,NULL);
- $file=$p->get('file');
- $limit=$p->get('limit');
- $xmlstring=$p->get('xmlstring');
- if(!empty($xmlstring)) $sxml=$xmlstring;
- else $sxml=file_get_contents($file);
- $idlist=array();
- $dom = new DOMDocument();
- $dom->preserveWhiteSpace=false;
- $dom->validateOnParse = true;
- $dom->loadXML($sxml);
- $this->xpath=new DOMXpath($dom);
- $this->xpath->registerNamespace('dc','http://purl.org/dc/elements/1.1/');
- $this->xpath->registerNamespace('dcterms', 'http://purl.org/dc/terms/');
- if(!empty($this->NSURI)){
- $this->xpath->registerNamespace('tzrns',$this->NSURI);
- $this->tzrns='tzrns:';
- }else{
- $this->tzrns='';
- }
- $this->prepareParam();
- $ois=$this->xpath->query('/'.$this->tzrns.'OI');
- if($ois->length==0)
- $ois=$this->xpath->query('/ListeOI/'.$this->tzrns.'OI');
- foreach($ois as $i => $oi){
- $oiddc=$this->importDC($oi); // DublinCore
- XLogs::notice('ModTif::_import', "import $oiddc");
- if(!empty($oiddc)){
- $this->oiddc=$oiddc;
- $this->importMultimedia($oi,$oiddc); // Multimédia
- $this->importContacts($oi,$oiddc); // Contacts (Adresses - Personnes - Moyens de communications)
- $this->importStructuresGestion($oi,$oiddc); // Structures gestion (Contacts)
- $this->importStructuresInformation($oi,$oiddc); // Structures information (Contacts)
- $this->importInfosLegales($oi,$oiddc); // Informations légales
- $this->importClassements($oi,$oiddc); // Classements
- $this->importGeolocs($oi,$oiddc); // Geolocalisation (Zones - Points - Coords - Envs - Cartes - Acces - Multimédia)
- $this->importPeriodes($oi,$oiddc); // Periodes (Dates - Details jours - Jours - Horaires)
- $this->importClienteles($oi,$oiddc); // Clientèles (Details client)
- $this->importUsages($oi,$oiddc); // Usages/Langues
- $this->importModesResa($oi,$oiddc); // Modes de réservation
- $this->importCapacites($oi,$oiddc); // Capacités
- $this->importOffresPresta($oi,$oiddc); // Offres de prestation (Prestations)
- $this->importTarifs($oi,$oiddc); // Tarifs et modes de paiement
- $this->importDescrComp($oi,$oiddc); // Descriptions complémentaires
- $this->importItineraires($oi,$oiddc); // Itinéraires
- $this->importPlannings($oi,$oiddc); // Plannings (Presta planning - Jour planning)
- $this->importPresationsLiees($oi,$oiddc); // Prestations liées
- $this->importOther($oi,$oiddc); // Fonction à personnaliser
- if(!empty($limit) && $limit<=$i) break;
- }
- }
- unset($dom,$xmlstring,$sxml,$ois);
- }
- function importDC($oi){
- $this->idlist=array();
- $dc=$this->xpath->query($this->tzrns.'DublinCore',$oi);
- if($dc->length>0){
- $dc=$dc->item(0);
- $oiddc=$this->analyseDC($dc,NULL,$this->structparam['dc']['DC']['balises']['DublinCore']);
- if(!empty($this->structparam['dc']['DC']['balises']['DublinCore']['ssm'])) $this->analyseQuery($dc,$this->structparam['dc']['DC']['balises']['DublinCore']['ssm'],$oiddc);
- }
- unset($dc);
- return $oiddc;
- }
- function importMultimedia(&$oi,$oiddc){
- $this->analyseQuery($oi,$this->structparam['mu'],$oiddc);
- }
- function importContacts(&$oi,$oiddc){
- $this->analyseQuery($oi,$this->structparam['co'],$oiddc);
- }
- function importStructuresGestion(&$oi,$oiddc){
- $this->analyseQuery($oi,$this->structparam['sg'],$oiddc);
- }
- function importStructuresInformation(&$oi,$oiddc){
- $this->analyseQuery($oi,$this->structparam['si'],$oiddc);
- }
- function importInfosLegales(&$oi,$oiddc){
- $this->analyseQuery($oi,$this->structparam['il'],$oiddc);
- }
- function importClassements(&$oi,$oiddc){
- $this->analyseQuery($oi,$this->structparam['cl'],$oiddc);
- }
- function importGeolocs(&$oi,$oiddc){
- $this->analyseQuery($oi,$this->structparam['ge'],$oiddc);
- }
- function importPeriodes(&$oi,$oiddc){
- $this->analyseQuery($oi,$this->structparam['pe'],$oiddc);
- }
- function importClienteles(&$oi,$oiddc){
- $this->analyseQuery($oi,$this->structparam['cli'],$oiddc);
- }
- function importUsages(&$oi,$oiddc){
- $this->analyseQuery($oi,$this->structparam['la'],$oiddc);
- }
- function importModesResa(&$oi,$oiddc){
- $this->analyseQuery($oi,$this->structparam['mr'],$oiddc);
- }
- function importCapacites(&$oi,$oiddc){
- $capa=$this->xpath->query($this->tzrns.'Capacites',$oi);
- if($capa->length>0){
- $capa=$capa->item(0);
- // Capacité globale
- $capaglob=$this->xpath->query($this->tzrns.'CapacitesGlobales',$capa);
- if($capaglob->length>0){
- $capaglob=$capaglob->item(0);
- $param=array('table' => 'CAPAGLOB','fssm' => 'tzr_lie');
- $oid=$this->analyseDC($capaglob,$oiddc,$param);
- $xset=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$this->prefixSQL.'DC');
- $xset->procEdit(array('oid' => $oiddc,'CapacitesGlobales' => $oid,'_nolog' => true));
- $this->analyseQuery($capaglob,$this->structparam['cs'],$oid);
- }
- // Capacités prestations
- $this->analyseQuery($capa,$this->structparam['cp'],$oiddc);
- // Capacités unités
- $this->analyseQuery($capa,$this->structparam['cu'],$oiddc);
- }
- }
- function importOffresPresta(&$oi,$oiddc){
- $this->analyseQuery($oi,$this->structparam['op'],$oiddc);
- }
- function importTarifs(&$oi,$oiddc){
- // Modes de paiement
- $mp=$this->xpath->query($this->tzrns.'Tarifs/'.$this->tzrns.'ModesPaiement',$oi);
- if($mp->length>0){
- $mp=$mp->item(0);
- $mdps=$this->xpath->query($this->tzrns.'ModePaiement',$mp);
- $xset=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$this->prefixSQL.'DC');
- $xsetmp=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$xset->desc['ModePaiement']->target);
- $ar2=array();
- foreach($mdps as $mpd){
- $oidmp=$xset->desc['ModePaiement']->target.':'.str_replace('.','-',$mpd->getAttribute('type'));
- $xsetmp->procInput(array('newoid' => $oidmp,'_nolog' => true,
- 'code' => $mpd->getAttribute('type'),'libelle' => $mpd->textContent));
- $ar2['ModePaiement'][]=$oidmp;
- }
- $obs=$this->xpath->query($this->tzrns.'ObservationModePaiement',$mp);
- if($obs->length>0) $ar2['ObservationModePaiement']=$obs->item(0)->textContent;
- $ar2['oid']=$oiddc;
- $ar2['_nolog']=true;
- $xset->procEdit($ar2);
- }
- unset($mp,$mdps,$mdp,$ar2,$obs);
- // Tarifs
- $ta=$this->xpath->query($this->tzrns.'Tarifs',$oi);
- if($ta->length>0){
- $ta=$ta->item(0);
- $this->analyseQuery($ta,$this->structparam['ta'],$oiddc);
- }
- unset($ta);
- }
- function importDescrComp(&$oi,$oiddc){
- $this->analyseQuery($oi,$this->structparam['desc'],$oiddc);
- }
- function importItineraires(&$oi,$oiddc){
- $this->analyseQuery($oi,$this->structparam['it'],$oiddc);
- }
- function importPlannings(&$oi,$oiddc){
- $this->analyseQuery($oi,$this->structparam['pla'],$oiddc);
- }
- function importPresationsLiees(&$oi,$oiddc){
- $this->analyseQuery($oi,$this->structparam['pliee'],$oiddc);
- }
- function importOther(&$oi,$oiddc){
- }
- /// Requete un noeud et prepare son analyse
- function analyseQuery(&$base,$params,$oidssm){
- if(isset($params['balises'])) $params=array($params);
- $oids=array();
- foreach($params as $param){
- $balisegrp=$param['balisegroup'];
- $balises=$param['balises'];
- if(!empty($balisegrp)){
- $dc=$this->xpath->query($this->tzrns.$balisegrp,$base);
- if($dc->length>0){
- $dc=$dc->item(0);
- $idref=$dc->getAttribute('idref');
- $id=$dc->getAttribute('id');
- if(!empty($idref)){
- foreach($this->idlist[$idref]['idlist'] as $i => $myid){
- $oids[]=$this->addReference($myid,$oidssm,$this->idlist[$idref]['fssmlist'][$i]);
- }
- }else{
- foreach($balises as $balise => $data){
- $details=$this->xpath->query($this->tzrns.$balise,$dc);
- foreach($details as $i => $detail){
- if(!empty($id)){
- $idd=$detail->getAttribute('id');
- if(empty($idd)){
- $idd=$id.'-tzr'.$i;
- $detail->setAttribute('id',$idd);
- }
- $this->idlist[$id]['idlist'][]=$idd;
- $this->idlist[$id]['fssmlist'][]=$data['fssm'];
- }
- $oid=$this->analyseDC($detail,$oidssm,$data);
- $oids[]=$oid;
- if(!empty($data['ssm'])) $this->analyseQuery($detail,$data['ssm'],$oid);
- }
- }
- }
- }
- }else{
- foreach($balises as $balise => $data){
- $details=$this->xpath->query($this->tzrns.$balise,$base);
- foreach($details as $detail){
- $oid=$this->analyseDC($detail,$oidssm,$data);
- $oids[]=$oid;
- if(!empty($data['ssm'])) $this->analyseQuery($detail,$data['ssm'],$oid);
- }
- }
- }
- }
- unset($dc,$details,$detail,$data);
- return $oids;
- }
- /// Insere les données en base dans le cas d'un objet faisant référence à un autre
- private function addReference($idref,$oidssm,$fssm){
- if(!empty($idref) && !empty($this->idlist[$idref])){
- if(!empty($oidssm) && !empty($fssm)){
- $ar=array('oid' => $this->idlist[$idref]['oid']);
- $ar[$fssm]=$this->idlist[$idref]['data'][$fssm];
- if(is_array($ar[$fssm])){
- $ar[$fssm][]=$oidssm;
- }else{
- $ar[$fssm]=array($ar[$fssm],$oidssm);
- }
- $table=Kernel::getTable($this->idlist[$idref]['oid']);
- if(XSystem::tableExists($table)){
- $xset=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$table);
- $ar['_nolog']=true;
- $xset->procEdit($ar);
- }
- }
- return $this->idlist[$idref]['oid'];
- }
- return false;
- }
- /// Analyse un noeud et insere en base
- private function analyseDC(&$dc,$oidssm=NULL,&$param=array()){
- $table=$param['table'];
- if(empty($table)) return;
- $forceedit=false;
- $id=$dc->getAttribute('id');
- $idref=$dc->getAttribute('idref');
- $ar=isset($param['ar'])?$param['ar']:array();
- $fssm=isset($param['fssm'])?$param['fssm']:NULL;
- $delNS=isset($param['delNS'])?$param['delNS']:true;
- $direct=isset($param['direct'])?$param['direct']:false;
- $oidfield=isset($param['oidfield'])?$param['oidfield']:NULL;
- $updfield=isset($param['updfield'])?$param['updfield']:'';
- $linkparam=isset($param['linkparam'])?$param['linkparam']:array();
- if($direct) $items=array($dc);
- else $items=$dc->childNodes;
- // Génération du KOID
- if(Kernel::getTable($oidssm)==$this->prefixSQL.$table){
- $ar['oid']=$oidssm;
- $forceedit=true;
- }elseif(!empty($param['oid'])){
- $ar['newoid']=$newoid=$param['oid'];
- }elseif($oidfield){
- if(strpos($this->acttype,'SITRA')===0 && strpos($oidfield,':')){
- $oidfield=$this->xpath->query(substr($oidfield,strpos($oidfield,':')+1),$dc);
- }else{
- $oidfield=$this->xpath->query($oidfield,$dc);
- }
- if($oidfield->length>0){
- $oidfield=$oidfield->item(0)->textContent;
- $ar['newoid']=$newoid=$this->prefixSQL.$table.':'.preg_replace('/[^a-z0-9_-]/i','_',$oidfield);
- }
- }
- if(empty($newoid)){
- $ar['newoid']=$newoid=XDataSource::getNewBasicOID($this->prefixSQL.$table);
- }
- XLogs::notice('ModTif::analyseDC', "import oid:{$ar['oid']}, newoid:$newoid");
- // Verification du dernier update. Si doit etre mis à jour, on efface pour mieux reinserer
- if(!empty($updfield)){
- if(strpos($this->acttype,'SITRA')===0 && strpos($updfield,':')){
- $updbal=$this->xpath->query(substr($updfield,strpos($updfield,':')+1),$dc);
- }else{
- $updbal=$this->xpath->query($updfield,$dc);
- }
- if($updbal->length>0){
- $updfield=str_replace(':','__',$updfield);
- $updvalue=$this->xset->desc[$updfield]->post_edit($updbal->item(0)->textContent);
- $updvalue=$updvalue->raw;
- $rs=selectQuery('select '.$updfield.' as UPD from '.$this->prefixSQL.$table.' where KOID="'.$newoid.'"');
- $ors=&$rs->fetch();
- $rs->CloseCursor();
- if(!empty($ors['UPD'])){
- if($ors['UPD']>=$updvalue) {
- XLogs::notice('ModTif::analyseDC', "import $newoid not imported {$ors['UPD']} >= $updvalue");
- return false;
- }
- elseif($this->prefixSQL.$table==$this->table) {
- XLogs::notice('ModTif::analyseDC', "delete $newoid");
- $this->del(array('oid' => $newoid,'_nolog' => true));
- }
- }
- }
- }
- // Dans le cas d'une référence, on recupère les données
- if(!empty($idref)){
- $ret['oid']=$this->addReference($idref,$oidssm,$fssm);
- }else{
- if((!$dc->hasChildNodes() && !$dc->hasAttributes() && !$direct) || !XSystem::tableExists($this->prefixSQL.$table)) return false;
- $xset=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$this->prefixSQL.$table);
- $hasData=false;
- // Traite les eventuels attributs de la balise source à enregistrer
- foreach($dc->attributes as $dcatt => $i){
- if(isset($xset->desc['att_'.$dcatt])){
- $hasData=true;
- $att='att_'.$dcatt;
- $value=$dc->getAttribute($dcatt);
- $ar[$att]=$this->getAttributeValue($xset,$att,$value,$dc);
- }
- }
- // Parcours les enfants
- foreach($items as $item){
- $hasData=true;
- if($delNS){
- list($ns,$field)=explode(':',$item->tagName);
- if(empty($field)) $field=$ns;
- }else{
- $field=str_replace(':','__',$item->tagName);
- // Patch pour DC de sitra qui n'utilise pas les espaces de noms
- if(strpos($this->acttype,'SITRA')===0){
- if(!isset($xset->desc[$field])){
- if(isset($xset->desc['dc__'.$field])) $field='dc__'.$field;
- elseif(isset($xset->desc['dcterms__'.$field])) $field='dcterms__'.$field;
- }
- }
- }
- if(isset($xset->desc[$field])){
- $xfield=&$xset->desc[$field];
- $ftype=$xfield->ftype;
- switch($ftype){
- case 'XFileDef': // Tente de recupérer le fichier pour le mettre en local, sinon utilise un champ url
- $file=TZR_TMP_DIR.'TiF'.uniqid();
- $content=file_get_contents($item->textContent);
- if(!empty($content)){
- file_put_contents($file,$content);
- unset($content);
- $mimeClasse=XMimeTypes::getInstance();
- $mime=$mimeClasse->get_file_type($file);
- if($mimeClasse->isImage($mime)){
- $ar[$field.'_img']='';
- $_FILES[$field.'_img']['tmp_name']=$file;
- $_FILES[$field.'_img']['type']=$mime;
- $_FILES[$field.'_img']['name']=$item->textContent;
- $_FILES[$field.'_img']['size']=filesize($file);
- }else{
- $ar[$field]='';
- $_FILES[$field]['tmp_name']=$file;
- $_FILES[$field]['type']=$mime;
- $_FILES[$field]['name']=$item->textContent;
- $_FILES[$field]['size']=filesize($file);
- }
- }
- $ar[$field.'_url']['url']=$item->textContent;
- break;
- case 'XUrlDef':
- $ar[$field]['url']=$item->textContent;
- break;
- case 'XLinkDef':
- if(strpos($xset->desc[$field]->target,$this->prefixSQL.'LS_')===0){
- $code=$item->getAttribute('code');
- if(empty($code)) $code=$item->getAttribute('type');
- $code=$this->getFormatCode($code);
- if(!empty($code)){
- $rs=selectQuery('select KOID from '.$xset->desc[$field]->target.' where code="'.$code.'"');
- if($rs && $rs->rowCount()==0){
- $codeoid=$xset->desc[$field]->target.':'.str_replace('.','-',$code);
- $libelle=$item->getAttribute('libelle');
- if(empty($libelle)) $libelle=$item->textContent;
- $xsettmp=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$xset->desc[$field]->target);
- $xsettmp->procInput(array('newoid' => $codeoid,'code' => $code,'libelle' => $libelle,'_nolog' => true));
- }else{
- $ors=$rs->fetch();
- $codeoid=$ors['KOID'];
- }
- $rs->CloseCursor();
- if($xset->desc[$field]->multivalued) $ar[$field][]=$codeoid;
- else $ar[$field]=$codeoid;
- }
- }elseif(!empty($linkparam[$field])){
- $oids=$this->analyseQuery($item->parentNode,$linkparam[$field],$newoid);
- if(!$xset->desc[$field]->multivalued) $oids=$oids[0];
- $ar[$field]=$oids;
- }
- break;
- case 'XTextDef':
- if(!empty($ar[$field])) $ar[$field].="\n\n".$item->textContent;
- else $ar[$field]=$item->textContent;
- break;
- case 'XBoolDef':
- if($item->textContent=='O') $ar[$field]=1;
- else $ar[$field]=0;
- break;
- case 'XDateTimeDef':
- $parts=preg_split('@[\ ]@',$item->textContent);
- if(!empty($parts[1]) && preg_match('@^[0-9]{2}:[0-9]{2}$@',$parts[1]))
- $ar[$field]=array('date' => $parts[0],'hour' => $parts[1].":00");
- else
- $ar[$field]=$item->textContent;
- break;
- default:
- if($xset->desc[$field]->multivalued){
- if(empty($ar[$field])) $ar[$field]=$item->textContent;
- else $ar[$field].=','.$item->textContent;
- }else{
- if(!empty($item->textContent)) $ar[$field]=$item->textContent;
- }
- break;
- }
-
- // Traite les eventuels attributs à enregistrer
- $ord=$xset->desc[$field]->forder+1;
- for($i=$ord;$i<count($xset->desc);$i++){
- if(preg_match("/^att_".$field."_(.*)$/",$xset->orddesc[$i],$ret)){
- $att=$xset->orddesc[$i];
- $atttype=$xset->desc[$att]->ftype;
- $value=$item->getAttribute($ret[1]);
- $ar[$att]=$this->getAttributeValue($xset,$att,$value,$item);
- }else{
- break;
- }
- }
-
- // Boucle pour forcer les champs numériques à NULL s'ils ne sont pas renseignés (car sinon 0, et c'est pas bien)
- foreach($xset->desc as $fn => &$f){
- if($f->ftype=='XRealDef' && !isset($ar[$fn])) $ar[$fn]='';
- }
- }
- }
- if($hasData){
- $ar['_nolog']=true;
- $ar['tzr_dc']=$this->oiddc;
- if($forceedit){
- XLogs::notice('ModTif::analyseDC', "update {$ar['oid']}");
- $xset->procEdit($ar);
- $ret['oid']=$ar['oid'];
- }else{
- // Renseigne l'oid du module parent si necessaire
- if(!empty($oidssm) && !empty($fssm)) $ar[$fssm]=$oidssm;
- XLogs::notice('ModTif::analyseDC', "insert $newoid");
- $ret=$xset->procInput($ar);
- }
- }
- }
- // Enregistre les données si la balise à un identifiant
- if(!empty($id)){
- $this->idlist[$id]=array('oid' => $ret['oid'],'data' => $ar);
- }
- unset($ar,$items);
- return $ret['oid'];
- }
- /// Recupere une valeur TZR d'un attribut
- function getAttributeValue(&$xset,$att,$value,&$item){
- $atttype=$xset->desc[$att]->ftype;
- switch($atttype){
- case 'XLinkDef':
- if(strpos($xset->desc[$att]->target,$this->prefixSQL.'LS_')===0){
- if(!empty($value)){
- $code=$this->getFormatCode($value);
- $rs=selectQuery('select KOID from '.$xset->desc[$att]->target.' where code="'.$code.'"');
- if($rs && $rs->rowCount()==0){
- $value=$xset->desc[$att]->target.':'.str_replace('.','-',$code);
- $libelle=$item->getAttribute('libelle');
- if(empty($libelle)) $libelle=$item->textContent;
- $libelle=$libelle;
- $xsettmp=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$xset->desc[$att]->target);
- $xsettmp->procInput(array('newoid' => $value,'code' => $code,'libelle' => $libelle,'_nolog' => true));
- }else{
- $ors=$rs->fetch();
- $value=$ors['KOID'];
- }
- $rs->closeCursor();
- }
- }else{
- if(!empty($value)) $value=$xset->desc[$att]->target.':'.preg_replace('/([^a-z0-9_-]+)/','-',$value);
- }
- break;
- case 'XBoolDef':
- if(strtolower($value)=='o') $value=1;
- else $value=0;
- break;
- default:
- break;
- }
- return $value;
- }
-
- /// Formate un code du thésaurus en xx.xx.xx...
- function getFormatCode($code){
- $acode=explode('.',$code);
- $code=array();
- foreach($acode as $tmp) $code[]=sprintf("%02d",$tmp);
- return implode('.',$code);
- }
- /**
- Fonction pour retourner un resultat plat sur une ressource
- Exemple de $list=array('DCONTACT' => array('filter' => 'RaisonSociale="LES RAILLES"',
- 'fields' => array('Sigle' => "Sig",'RaisonSociale' => "RS"),
- 'sstables' => array('DADRESSE' => array('fields' => array('Adr1' => 'adr'),'all' => true,
- 'order' => 'Adr1 DESC','pagesize' => 5)))
- filter : filter sql / fields : liste des champs à recupérer (clé=champ TiF, valeur=champ destination)
- order : ordre / pagesize : nombre d'éléments à recuperer
- **/
- function getFlatEntry($oid,$list,&$targetxset,$alloids=array()){
- $lang_data=XShell::getLangData();
- $ret=array();
- if(!is_array($oid)) $oid=array($oid);
- if(empty($alloids)) $alloids=$oid;
- foreach($list as $table => $param){
- $p=new XParam($param,array('filter' => '','pagesize' => 1,'all' => false,'sstables' => array(),'fields' => array(),'ssmfield' => 'tzr_lie',
- 'order' => 'tzr_lie,UPD desc','multivalued' => array(),'format' => array(),'pageseparator' => array(),
- 'concatseparator' => array(),'boolcond' => array(),'increment' => array(),'ifempty' => array()));
- if(strpos($table,':')!==false) // requête multiple sur la même table
- $table = substr($table,strpos($table,':')+1);
- $table=$this->prefixSQL.$table;
- $all=$p->get('all');
- $eval=$p->get('eval');
- $order=$p->get('order');
- $filter=$p->get('filter');
- $fields=$p->get('fields');
- $format=$p->get('format');
- // Tableau de champs qui ne sont a traiter que si le champ de destination est vide
- $ifempty=$p->get('ifempty');
- // Champ faisant le lien entre l'objet parent et l'objet fils (tzr_lie par defaut)
- $ssmfield=$p->get('ssmfield');
- $sstables=$p->get('sstables');
- // Nombre d'objet à traier (1 par defaut)
- $pagesize=$p->get('pagesize');
- $increment=$p->get('increment');
- $multivalued=$p->get('multivalued');
- // Separateur à utiliser dans le cas ou on concatene plusieurs objets dans le meme champ de destination
- $pageseparator=$p->get('pageseparator');
- // Separateur à utiliser dans le cas ou on concatene plusieurs champ d'un même objet dans le meme champ de destination
- $concatseparator=$p->get('concatseparator');
- // Tableau des champs => champs cible dans le cas d'un lien sur un objet
- $xlinktargetf=$p->get('xlinktargetf');
- $oidlies=array();
- $lastpage=array();
- if($all) $oid=$alloids;
-
- if($table==$this->table){
- $q='select * from '.$table.' where LANG="'.$lang_data.'" AND KOID="'.$oid[0].'"';
- $order='';
- $ret['oid']=$ret['newoid']=str_replace($this->prefixSQL.'DC',$targetxset->getTable(),$oid[0]);
- }else{
- $q='select * from '.$table.' where LANG="'.$lang_data.'" AND '.$ssmfield.' IN("'.implode('", "',$oid).'")';
- if(!empty($filter)) $q.=' AND '.$filter;
- }
- $xset=XDataSource::objectFactoryHelper8('BCLASS=XDSTable&SPECS='.$table);
- $options=array();
- foreach($xlinktargetf as $f=>$targetf){
- $options[$f]=array('target_fields' => $targetf, 'nocache' => 1);
- }
- $br=$xset->browse(array(
- 'select' => $q,
- 'order' => $order,
- 'tplentry' => TZR_RETURN_DATA,
- 'selectedfields' => array_keys($fields),
- 'options' => $options,
- 'nocount' => 1
- ));
- foreach($br['lines_oid'] as $i => $actoid){
- if($i==$pagesize) break;
- foreach($fields as $f => $newf){
- if(!empty($ret[$newf]) && in_array($f,$ifempty)) continue;
- if(in_array($newf,$increment)) $newf=$newf.($i+1);
- if($f=='oid')
- $value = $br['lines_oid'][$i];
- else
- $value=$this->getValueForInput($br['lines_o'.$f][$i],$xset->desc[$f],$targetxset->desc[$newf]);
- if(is_array($value)){
- if(empty($ret[$newf])) $ret[$newf]=array();
- $ret[$newf]=array_merge($ret[$newf],$value);
- }else{
- if(!empty($eval[$f])) $value=eval('return '.$eval[$f]);
- if($targetxset->desc[$newf]->ftype=='XBoolDef' && $ret[$newf]!=1) $ret[$newf]=$value;
- elseif($targetxset->desc[$newf]->ftype=='XGeodesicCoordinatesDef' && !empty($ret[$newf])) $ret[$newf].=';'.$value;
- else{
- // Formate la valeur si besoin
- if(!empty($format[$f])) $value=sprintf($format[$f],$value);
- if(empty($ret[$newf])) $ret[$newf]='';
- elseif(!empty($value)){
- // Ajoute le separateur suite à un changement d'objet ou pour une simple concat de champ sur un meme objet
- if($lastpage[$newf]!=$i){
- if(!empty($pageseparator[$newf])) $sep=$pageseparator[$newf];
- elseif($targetxset->desc[$newf]->ftype=='XTextDef') $sep="\r\n";
- elseif($targetxset->desc[$newf]->ftype=='XShortTextDef') $sep=', ';
- else $sep='';
- $value=$sep.$value;
- }else{
- if(!array_key_exists($newf,$concatseparator)) $concatseparator[$newf]=' ';
- $value=$concatseparator[$newf].$value;
- }
- }
- $ret[$newf].=$value;
- }
- }
- if(!empty($ret[$newf])) $lastpage[$newf]=$i;
- }
- $oidlies[]=$actoid;
- }
- unset($br,$param);
-
- // Recupere les sous tables
- if(!empty($sstables)) {
- if($table!=$this->table) {
- $ssalloids = selectQuery('select KOID from '.$table.' '.
- 'where tzr_lie IN("'.implode('","',$alloids).'")')
- ->fetchAll(PDO::FETCH_COLUMN);
- }
- $ret2=$this->getFlatEntry($oidlies,$sstables,$targetxset,$ssalloids);
- }
-
- if(!empty($ret2)) $ret=array_merge($ret,$ret2);
- }
- return $ret;
- }
- /// Transforme la valeur du champ source en valeur à passer à un procInput pour la champ destination
- function getValueForInput($value,$f,$targetf){
- global $DATA_DIR;
- if($targetf->ftype=='XTextDef' || $targetf->ftype=='XShortTextDef'){
- return $value->text;
- }
- if($targetf->ftype=='XBoolDef' && $f->ftype!='XBoolDef'){
- if((empty($targetf->boolcond) && !empty($value->raw)) || (!empty($targetf->boolcond) && in_array($value->raw,$targetf->boolcond)))
- return 1;
- else
- return 2;
- }
- switch($targetf->ftype){
- case 'XGeodesicCoordinatesDef':
- return str_replace(',','.',$value->raw);
- break;
- }
- switch($f->ftype){
- case 'XLinkDef':
- return explode('||',$value->raw);
- break;
- case 'XImageDef':
- $tmp_name=TZR_TMP_DIR.uniqid();
- copy($value->filename,$tmp_name);
- return $tmp_name;
- break;
- default:
- return $value->raw;
- break;
- }
- }
-
- /// Fonction pour checker l'état du webservice de ACVS
- function ACVSCheckService($ar=NULL){
- $p=new XParam($ar,NULL);
- $filter=$p->get('ACVSFilter');
- if(empty($filter)) $filter=$this->ACVSFilter;
- $idsql=array();
- ini_set('soap.wsdl_cache_enabled', 0);
- $soap=new SoapClient($this->ACVSUrl.'/'.$this->ACVSFileWSDL,array('exceptions' => false));
- $header=$this->ACVSParamGetHeader();
- $params=XSystem::xml2array($filter);
- foreach($params as $param){
- $param=$this->ACVSParamGetSearchOnlyIdPrestation($param);
- $request='<?xml version="1.0" encoding="utf-8"?>';
- $request.='<soap:Envelope '.$this->ACVSEnvUris.'>';
- $request.=$header.$param;
- $request.='</soap:Envelope>';
- $xmlidlist=$soap->__doRequest($request,$this->ACVSUrl.'/'.$this->ACVSFile,$this->ACVSUrl.'/SearchOnlyIdPrestation',1);
- if(get_class($xmlidlist)=='SoapFault') die('false');
- $dom=new DOMDocument();
- $dom->loadXML($xmlidlist);
- $ids=$dom->getElementsByTagName('idPrestation');
- if(empty($ids) || $ids->length==0 || empty($ids->item(0)->textContent)) die('false');
- }
- die('true');
- }
- /// Procédure d'import depuis le webservice d'ACVS
- function ACVSImport(/*$ar=NULL*/$sched, $o, $more) {
- $this->NSURI=$this->ACVSNSUri;
- $filter=$this->ACVSFilter;
- $message='';
- ini_set('soap.wsdl_cache_enabled', 0);
- $soap=new SoapClient($this->ACVSUrl.'/'.$this->ACVSFileWSDL,array('exceptions' => false));
- $header=$this->ACVSParamGetHeader();
- $params=XSystem::xml2array($filter);
- foreach($params as $rechname => $tzrparam){
- $this->acttype='ACVS ('.$rechname.')';
- $param=$this->ACVSParamGetSearchOnlyIdPrestation($tzrparam);
- $request='<?xml version="1.0" encoding="utf-8"?>';
- $request.='<soap:Envelope '.$this->ACVSEnvUris.'>';
- $request.=$header.$param;
- $request.='</soap:Envelope>';
- $xmlidlist=$soap->__doRequest($request,$this->ACVSUrl.'/'.$this->ACVSFile,$this->ACVSUrl.'/SearchOnlyIdPrestation',1);
- $dom=new DOMDocument();
- $dom->loadXML($xmlidlist);
- $fault=$dom->getElementsByTagName('faultstring');
- if($fault->length>0){
- if(!empty($this->reportto)){
- $GLOBALS['XUSER']->sendMail2User('TiF : Erreur import ACVS',"L'interrogation saop a retourné l'erreur suivante : \n".
- $fault->item(0)->textContent,$this->reportto);
- }
- return "L'interrogation saop a retourné l'erreur suivante : \n".$fault->item(0)->textContent;
- }
- $ids=$dom->getElementsByTagName('idPrestation');
- foreach($ids as $i => $id){
- $dom2=new DOMDocument();
- $param=$this->ACVSParamGetGetPrestationTIF(array('idPrestation' => $id->textContent));
- $request='<?xml version="1.0" encoding="utf-8"?>';
- $request.='<soap:Envelope '.$this->ACVSEnvUris.'>';
- $request.=$header.$param;
- $request.='</soap:Envelope>';
- $tif=$soap->__doRequest($request,$this->ACVSUrl.'/'.$this->ACVSFile,$this->ACVSUrl.'/GetPrestationTIF',1);
- $dom2->loadXML($tif);
- $tif=$dom2->getElementsByTagName('xmlTif');
- if($tif->length>0)
- $this->_import(array('xmlstring' => '<?xml version="1.0"?>'.$tif->item(0)->textContent));
- }
- // Suppression des élémenents qui ne sont pas dans l'import
- $param=$this->ACVSParamGetSearchOnlyIdPrestation($tzrparam,true);
- $request='<?xml version="1.0" encoding="utf-8"?>';
- $request.='<soap:Envelope '.$this->ACVSEnvUris.'>';
- $request.=$header.$param;
- $request.='</soap:Envelope>';
- $xmlidlist=$soap->__doRequest($request,$this->ACVSUrl.'/'.$this->ACVSFile,$this->ACVSUrl.'/SearchOnlyIdPrestation',1);
- $dom=new DOMDocument();
- $dom->loadXML($xmlidlist);
- $ids=$dom->getElementsByTagName('idPrestation');
- $idsql=array();
- foreach($ids as $i => $id)
- $idsql[]='ACVS'.$id->textContent;
- if(empty($idsql)){
- $mail='La requete "'.$rechname.'" n\'a retournée aucun enregistrement.';
- if(!empty($this->reportto))
- $GLOBALS['XUSER']->sendMail2User('TiF : Erreur import ACVS',$mail,$this->reportto);
- $message.=$mail."\n";
- }
- $rs=selectQuery('select KOID from '.$this->table.' where tzr_type="'.$this->acttype.'" and '.
- 'dc__identifier not in ("'.implode('","',$idsql).'")');
- while($rs && ($ors=$rs->fetch()))
- $this->del(array('oid' => $ors['KOID'],'_nolog' => true));
- $rs->CloseCursor();
- }
- return $message;
- }
- /// Prepare l'entete des requètes Soap d'ACVS (identification)
- function ACVSParamGetHeader(){
- $ret='<soap:Header><AuthHeader xmlns="'.$this->ACVSUrl.'">';
- $ret.='<Login>'.$this->ACVSLogin.'</Login><Password>'.$this->ACVSPwd.'</Password>';
- $ret.='</AuthHeader></soap:Header>';
- return $ret;
- }
- /// Prepare le xml pour la fonction SearchOnlyIdPrestation du Soap ACVS
- function ACVSParamGetSearchOnlyIdPrestation($parameters=array(),$nodate=false){
- $ret='<soap:Body><SearchOnlyIdPrestation xmlns="'.$this->ACVSUrl.'">';
- $defaults=array('' => array('libPrestation','criteres','majApresLe'),
- '-1' => array('triEvenement','bMonth1','bMonth2','bMonth3','bMonth4','bMonth5','bMonth6',
- 'bMonth7','bMonth8','bMonth9','bMonth10','bMonth11','bMonth12','bWeekEnd','idAnneeExercice',
- 'dayBorneInfOuverture','dayBorneSupOuverture','bCritereA','bCritereB','bCritereC','bCritereD',
- 'bCritereE','bCritereF','bCritereG','bCritereH'));
- if($nodate) unset($parameters['majApresLe']);
- foreach($defaults as $default => $balises){
- foreach($balises as $balise){
- if(isset($parameters[$balise])){
- if($balise=='majApresLe'){
- if(preg_match("/[0-9]{4}-[0-9]{2}-[0-9]{2}/",$parameters[$balise]))
- $ret.='<'.$balise.'>'.$parameters[$balise].'</'.$balise.'>';
- else
- $ret.='<'.$balise.'>'.date('Y-m-d',strtotime($parameters[$balise])).'</'.$balise.'>';
- }else{
- $ret.='<'.$balise.'>'.$parameters[$balise].'</'.$balise.'>';
- }
- }else{
- $ret.='<'.$balise.'>'.$default.'</'.$balise.'>';
- }
- }
- }
- $ret.='</SearchOnlyIdPrestation></soap:Body>';
- return $ret;
- }
- /// Prepare le xml pour la fonction GetPrestationTIF du Soap ACVS
- function ACVSParamGetGetPrestationTIF($parameters = array()){
- $ret='<soap:Body><GetPrestationTIF xmlns="'.$this->ACVSUrl.'">';
- if(isset($parameters['idPrestation'])) $ret.='<idPrestation>'.$parameters['idPrestation'].'</idPrestation>';
- else $ret.='<idPrestation>-1</idPrestation>';
- $ret.='</GetPrestationTIF></soap:Body>';
- return $ret;
- }
- /// Fonction pour checker l'état du webservice de GITD (avec die pour rq)
- function GITDCheckService($ar=NULL){
- $ret=$this->GITDCheckService2($ar);
- if($ret) die('true');
- else die('false');
- }
- /// Fonction pour checker l'état du webservice de GITD (retourne true ou false)
- function GITDCheckService2($ar=NULL){
- $filter=$this->GITDFilter;
- ini_set('soap.wsdl_cache_enabled', 0);
- $soap=new SoapClient($this->GITDUrl,array('exceptions' => false));
- $params=XSystem::xml2array($filter);
- foreach($params as $param){
- $rep=$soap->executeQueryN(array('arg0' => $this->GITDLogin,'arg1' => $this->GITDPwd,'arg2' => $…
Large files files are truncated, but you can click here to view the full file