webservice/library/WsScore/WsScore.php
2011-12-05 08:14:54 +00:00

307 lines
10 KiB
PHP

<?php
require_once 'Metier/insee/classMInsee.php';
require_once 'Metier/insee/classMSirene.php';
require_once 'Metier/partenaires/classMBilans.php';
require_once 'Metier/partenaires/classMBourse.php';
require_once 'Metier/partenaires/classMLiens.php';
require_once 'Metier/partenaires/classMTva.php';
require_once 'Metier/partenaires/classMMap.php';
require_once 'Metier/partenaires/classMGreffes.php';
require_once 'Metier/partenaires/classMPrivileges.php';
require_once 'Metier/scores/classMFinancier.php';
require_once 'Metier/scores/classMSolvabilite.php';
require_once 'framework/mail/sendMail.php';
class WsScore
{
protected $dbConfig; //Configuration BDD Zend
protected $tabInfoUser; //Stockage des informations utilisateurs
protected $listeDroits = array(
'KBIS' => 'Extrait RCS',
'ACTES' => 'Pièces officielles',
'IDPROCOL' => 'Fiche procédure collective',
'PRIVILEGES' => 'Privilèges',
'IPARI' => 'Investigation par l\'image IparI&copy;',
'MARQUES' => 'Marques déposées',
'INDISCORE' => 'indiScore&copy;',
'INDISCORE2' => 'Rapport synthetique',
'INDISCORE3' => 'Rapport complet',
'INDISCOREP' => 'indiScore+',
'INDISCORE2P' => 'Rapport synthetique+',
'INDISCORE3P' => 'Rapport complet+',
'SCORECSF' => 'Score CSF',
'EVENINSEE' => '&Eacute;vènements INSEE',
'AVISINSEE' => 'Avis de situation INSEE',
'SURVANNONCE' => 'Surveillance des annonces légales',
'SURVINSEE' => 'Surveillance des événements INSEE',
'SURVBILAN' => 'Surveillance des bilans',
'SURVSCORE' => 'Surveillance des événements sur le score',
'SURVACTES' => 'Surveillance des actes',
'SURVDIRIGEANTS'=> 'Surveillance des dirigeants',
'SURVPRIV' => 'Surveillance des privilèges',
'SURVLISTE' => 'Liste des surveillances',
'PORTEFEUILLE' => 'Portefeuille',
'INVESTIG' => 'Investigation',
'ENQUETEC' => 'Enquête commerciale',
'INTERNATIONAL' => 'Recherche Internationale',
'BDF' => 'Banque de France',
'MONPROFIL' => 'Mon profil',
'EDITION' => 'Mode Edition',
'UPLOADBILAN' => 'Saisie de bilan',
'DIRIGEANTSOP' => 'Liste des dirigeants opérationnels',
'RECHCSV' => 'Export des résultats de la recherche',
);
protected $listePrefs = array(
'NAF4' => 'Afficher les anciens NAF',
'NACE' => 'Afficher les codes NACES',
'NEWS' => 'Afficher les news Google&copy;',
'MAPPY' => 'Afficher les fa&ccedil;ades d\'immeubles',
'CARTES' => 'Afficher les cartes et les plans',
'VOIRSURV' => 'Afficher les entités sous surveillances',
'DEMANDEREF' => 'Demande de référence par defaut',
);
public $listError = array(
'0900' => 'Identifiant ou mot de passe incorrect !',
'0901' => 'Accès WS non authorisé pour cette utilisateur !',
'0902' => 'Méthode non authorisée dans votre profil !',
'1010' => 'Siren invalide',
'1011' => 'Identifiant invalide',
'1020' => 'Siren inexistant',
'1021' => 'Type d\'identifiant inexistant',
'1030' => 'Aucun résultat pour ce siren en base',
'3000' => 'Service disponible',
'9000' => 'Service S&D indisponible',
'9001' => 'Service partenaire indisponible',
'9002' => 'Méthode provisoirement indisponible',
'9003' => 'Version du service désactivé',
'9004' => 'Version du service inexistant',
'9010' => 'Fichier indisponible',
'9020' => 'Requête incorrecte',
);
public function __construct()
{
define ('DATETIME', date('YmdHis'));
define ('DATE', substr(DATETIME,0,8));
define ('TIME', substr(DATETIME,8,6));
define ('DATE_LISIBLE', substr(DATETIME,6,2).'/'.substr(DATETIME,4,2).'/'.substr(DATETIME,0,4));
define ('TIME_LISIBLE', substr(DATETIME,8,2).':'.substr(DATETIME,10,2).':'.substr(DATETIME,12,2));
$dbConfig = new Zend_Config_Ini(APPLICATION_PATH .
'/configs/databases.ini', APPLICATION_ENV);
$this->dbConfig = $dbConfig->db;
}
protected function sendError($code)
{
$message = 'Erreur inconnue';
if (array_key_exists($code, $this->listError)){
$message = $this->listError[$code];
}
throw new SoapFault($code,$message);
exit;
}
/**
* Enregistre l'appel utilisateur à une méthode
* @param $service
* @param $siret
* @param $ref
* @return void
*/
protected function wsLog($service, $siret='', $ref='')
{
$iDbCrm = new WDB('sdv1');
if (strlen($siret)==14) {
$siren=substr($siret,0,9);
$nic=substr($siret,9,5);
} elseif (strlen($siret)==9) {
$siren=$siret;
$nic='';
}
if ($tabInfoUser['clientTest']=='Oui' || $tabInfoUser['typeCompte']=='TEST') {
$test=1;
} else {
$test=0;
}
$tabRdvInsee=array();
if ($service=='identite') {
if ($siren>1000 && $nic>9) $strNic=" AND nic=$nic ";
elseif ($siren==0 && $ref>0) $strNic=" AND id=$ref ";
elseif ($siren>1000) $strNic=" AND siege=1 ORDER BY actif DESC, nic DESC ";
else return;
$rep=$iDbCrm->select('jo.etablissements', 'siren, nic, actif, siege, raisonSociale, adr_cp, adr_ville, source', "siren=$siren $strNic", false, MYSQL_ASSOC);
$tabRep=$rep[0];
$rs= $tabRep['raisonSociale'];
$cp= $tabRep['adr_cp'];
$vil=$tabRep['adr_ville'];
$tabRdvInsee['source']=$tabRep['source'];
if ($tabRep['actif']==0)
$tabRdvInsee['actifInsee']=0;
elseif ($siren>1000) {
$tabRdvInsee['actifInsee']=1;
$rep=$iDbCrm->select('jo.rncs_entrep', 'count(*) AS nb', "siren=$siren", false, MYSQL_ASSOC);
$tabRep=$rep[0];
if ($tabRep['nb']>0) $tabRdvInsee['source']=5;
}
}
$tabInsert=array(
'login' => $this->tabInfoUser['login'],
'idClient' => $this->tabInfoUser['idClient'],
'page' => $service,
'siren' => $siren,
'nic' => $nic,
'params' => $ref,
'test' => $test,
'raisonSociale' => $rs,
'cp' => $cp,
'ville' => $vil,
'ipClient' => $this->tabInfoUser['ipConnexion'],
);
$rep = $iDbCrm->insert('logs', array_merge($tabInsert,$tabRdvInsee), false, true);
}
/**
* Retourne une erreur soap lors d'une mauvaise authentification
* @throws SoapFault
*/
protected function authenticate()
{
if (!$this->checkAuth(
$_SERVER['PHP_AUTH_USER'],
$_SERVER['PHP_AUTH_PW'],
$_SERVER['REMOTE_ADDR']))
{
$this->sendError('0900');
}
}
protected function permission($perm)
{
if ( !$this->checkPerm($perm) ){
$this->sendError('0902');
}
}
/**
* checkAccesWS
* @throws SoapFault
*/
protected function checkAccesWS()
{
//Vérifier que l'utilisateur à le droit accesWS (clients/utilisateurs)
$accesWs = $this->tabInfoUser['accesWS'];
if ($accesWs){
$this->sendError('0901');
}
}
/**
* checPerm
* @param string $perm
* @throws SoapFault
*/
protected function checkPerm($perm)
{
$droits = $this->tabInfoUser['droits'];
$output = false;
if ( preg_match('/\b'.$perm.'\b/i', $droits) ){
$output = true;
}
return $output;
}
/**
* checkAuth
* @param string $login
* @param string $password
* @param string $ipConnexion
* @return boolean
*/
protected function checkAuth($login, $password, $ipConnexion)
{
$iDbCrm = new WDB('sdv1');
$rep=$iDbCrm->select(
'utilisateurs u, clients c',
'u.login, u.id, u.email, u.password, u.idClient, u.typeCompte, u.actif, u.filtre_ip, u.civilite, u.nom, u.prenom, u.tel, u.fax, u.mobile, u.profil, u.raisonSociale, u.siret, u.adrNum, u.adrIndRep, u.adrTypeVoie, u.adrLibVoie, u.adrCp, u.adrVille, u.adrComp, u.tel, u.fax, u.mobile, u.pref, u.profil, u.dateInscription, u.dateValidation, u.nombreConnexions, u.dateDerniereConnexion, u.droits, u.referenceParDefaut, u.nbReponses, u.formatMail, u.dateDebutCompte, u.dateFinCompte, u.maxFicheId, c.droits AS droitsClients, c.test AS clientTest, c.typeScore, c.timeout',
"u.login='$login' AND u.idClient=c.id AND u.actif=1 AND u.deleted=0 AND c.actif='Oui'",
false, MYSQL_ASSOC
);
$tabRep = $rep[0];
if (count($rep)>0)
{
if ($tabRep['password']==$password ||
$tabRep['password']==md5($password) ||
$password==md5($login.'|'.$tabRep['password']) ||
(substr($password,0,7)=='iponly:' && checkPlagesIp($tabRep['filtre_ip'], substr($password,7))))
{
$timeOutSec=$tabRep['timeout']*60;
if ($timeOutSec==0) $timeOutSec=1800;
$this->tabInfoUser=array(
'login'=> $login,
'id'=> $tabRep['id'],
'email'=> $tabRep['email'],
'typeCompte'=> $tabRep['typeCompte'],
'idClient'=> $tabRep['idClient'],
'filtre_ip'=> $tabRep['filtre_ip'],
'ipPasserelle'=> '',
'ipConnexion'=> $ipConnexion,
'civilite'=> $tabRep['civilite'],
'nom'=> $tabRep['nom'],
'prenom'=> $tabRep['prenom'],
'raisonSociale'=> $tabRep['raisonSociale'],
'siret'=> $tabRep['siret'],
'adrNum'=> $tabRep['adrNum'],
'adrIndRep'=> $tabRep['adrIndRep'],
'adrTypeVoie'=> $tabRep['adrTypeVoie'],
'adrLibVoie'=> $tabRep['adrLibVoie'],
'adrCp'=> $tabRep['adrCp'],
'adrVille'=> $tabRep['adrVille'],
'adrComp'=> $tabRep['adrComp'],
'tel'=> $tabRep['tel'],
'fax'=> $tabRep['fax'],
'mobile'=> $tabRep['mobile'],
'pref'=> $tabRep['pref'],
'profil'=> $tabRep['profil'],
'dateInscription'=> $tabRep['dateInscription'],
'dateValidation'=> $tabRep['dateValidation'],
'nombreConnexions'=> $tabRep['nombreConnexions'],
'dateDerniereConnexion'=> $tabRep['dateDerniereConnexion'],
'droits'=> $tabRep['droits'],
'droitsClients'=> $tabRep['droitsClients'],
'timeout'=> $timeOutSec,
'clientTest'=> $tabRep['clientTest'],
'typeScore'=> $tabRep['typeScore'],
'nbReponses'=> $tabRep['nbReponses'],
'formatMail'=> $tabRep['formatMail'],
'referenceParDefaut'=> $tabRep['referenceParDefaut'],
'dateDebutCompte'=> $tabRep['dateDebutCompte'],
'dateFinCompte'=> $tabRep['dateFinCompte'],
'maxFicheId'=> $tabRep['maxFicheId'],
'typeScore' => $tabRep['typeScore'],
);
debugLog('W',"CheckAuth $login/$password OK", __LINE__,__FILE__, __FUNCTION__, __CLASS__);
return true;
}
debugLog('W',"CheckAuth $login/$password incorrect (IP=$ipConnexion)", __LINE__,__FILE__, __FUNCTION__, __CLASS__);
return false;
}
debugLog('W',"CheckAuth $login/$password inexistant ou inactif (IP=$ipConnexion)", __LINE__,__FILE__, __FUNCTION__, __CLASS__);
return false;
}
}