<?php
/**
 * @version $Id$
 * @author Thomas Crespin <thomas.crespin@sesamath.net>
 * @copyright Thomas Crespin 2009-2022
 * 
 * ****************************************************************************************************
 * SACoche <https://sacoche.sesamath.net> - Suivi d’Acquisitions de Compétences
 * © Thomas Crespin pour Sésamath <https://www.sesamath.net> - Tous droits réservés.
 * Logiciel placé sous la licence libre Affero GPL 3 <https://www.gnu.org/licenses/agpl-3.0.html>.
 * ****************************************************************************************************
 * 
 * Ce fichier est une partie de SACoche.
 * 
 * SACoche est un logiciel libre ; vous pouvez le redistribuer ou le modifier suivant les termes 
 * de la “GNU Affero General Public License” telle que publiée par la Free Software Foundation :
 * soit la version 3 de cette licence, soit (à votre gré) toute version ultérieure.
 * 
 * SACoche est distribué dans l’espoir qu’il vous sera utile, mais SANS AUCUNE GARANTIE :
 * sans même la garantie implicite de COMMERCIALISABILITÉ ni d’ADÉQUATION À UN OBJECTIF PARTICULIER.
 * Consultez la Licence Publique Générale GNU Affero pour plus de détails.
 * 
 * Vous devriez avoir reçu une copie de la Licence Publique Générale GNU Affero avec SACoche ;
 * si ce n’est pas le cas, consultez : <http://www.gnu.org/licenses/>.
 * 
 */

if(!defined('SACoche')) {exit('Ce fichier ne peut être appelé directement !');}
if($_SESSION['SESAMATH_ID']==ID_DEMO) {Json::end( FALSE , 'Action désactivée pour la démo.' );}

$_SESSION['WEBMESTRE_UAI'] = '0622799F';
$_SESSION['WEBMESTRE_UAI'] = '0595867G';
$passepasse = TRUE;

$action     = Clean::post('f_action' , 'texte');
$objet      = Clean::post('f_objet'  , 'texte');
$api        = Clean::post('f_api'    , 'texte');
$demande_id = Clean::post('f_demande', 'entier');

$tab_api = array('Siecle-BEE','Omogen-Simplifie','STSWeb','STSapi','LSU');

$tab_action_to_service = array(
  'creer_identite'           => 'creation-identite',
  'revoquer_identite'        => 'revocation-identite',
  'souscrire_api'            => 'creation-souscription',
  'resilier_api'             => 'suppression-souscription',
  'souscrire_service'        => 'creation-etat-activation',
  'activer_service'          => 'modification-etat-activation',
  'desactiver_service'       => 'modification-etat-activation',
);

if(!isset($tab_action_to_service[$action]))
{
  Json::end( FALSE , 'Action à effectuer non identifiée !' );
}
$service = $tab_action_to_service[$action];

/**
 * @param string $curl_result
 * @return array
 */
function verif_json($curl_result)
{
  $array_result = json_decode($curl_result, TRUE);
  if($array_result === NULL)
  {
    // Si ce n’est pas du json, alors c’est un message d’erreur.
    Json::end( FALSE , $curl_result );
  }
  return $array_result;
}

/**
 * @param int $demande_id
 * @return array
 */
function recuperer_statut_demande($demande_id)
{
  sleep(2);
  return( verif_json( ServeurCommunautaire::Omogen_activation( 'recuperation-statut-demande' , NULL , $demande_id ) ) );
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// creer_identite
// revoquer_identite
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if( ($action=='creer_identite') || ($action=='revoquer_identite') )
{
  $array_result = verif_json( ServeurCommunautaire::Omogen_activation( $service ) );
  if( isset($array_result['idDemande']) )
  {
    $demande_id = $array_result['idDemande'];
    do{
      $array_result = recuperer_statut_demande($demande_id);
    } while( isset($array_result['etat']) && is_null($array_result['etat']) );
  }
  $valeur = ($action=='creer_identite') ? 1 : 0 ;
  DB_STRUCTURE_PARAMETRE::DB_modifier_parametres(array('omogen_instance_identite'=>$valeur));
  Session::_set('OMOGEN_INSTANCE_IDENTITE', $valeur );
  Json::end( TRUE , $array_result );
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// souscrire_api
// resilier_api
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if( ($action=='souscrire_api') || ($action=='resilier_api') )
{
  if(!in_array($api, $tab_api))
  {
    Json::end( FALSE , 'Service concerné inconnu ou non transmis !'.$api );
  }
  $array_result = verif_json( ServeurCommunautaire::Omogen_activation( $service, $api ) );
  if( isset($array_result['idDemande']) )
  {
    $demande_id = $array_result['idDemande'];
    do{
      $array_result = recuperer_statut_demande($demande_id);
    } while( isset($array_result['etat']) && is_null($array_result['etat']) );
  }
  $valeur = ($action=='souscrire_api') ? 1 : NULL ;
  DB_STRUCTURE_OMOGEN::DB_modifier( $api, 'souscription_statut', $valeur );
  Json::end( TRUE , $array_result );
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// souscrire_service
// activer_service
// desactiver_service
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if( ($action=='souscrire_service') || ($action=='activer_service') || ($action=='desactiver_service') )
{
  if(!in_array($api, $tab_api))
  {
    Json::end( FALSE , 'Service concerné inconnu ou non transmis !' );
  }
  if($action=='activer_service'){
    $value = 1;
  }
  else if($action=='desactiver_service'){
    $value = 0;
  }
  else {
    $value = NULL;
  }
  $array_result = verif_json( ServeurCommunautaire::Omogen_activation( $service, $api, $value ) );
  $valeur = is_null($array_result['etat']) ? NULL : (int)$array_result['etat'] ;
  DB_STRUCTURE_OMOGEN::DB_modifier( $api, 'activation_etat', $valeur );
  Json::end( TRUE , $array_result );
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// On ne devrait pas en arriver là...
// ////////////////////////////////////////////////////////////////////////////////////////////////////

Json::end( FALSE , 'Erreur avec les données transmises !<br>'.pathinfo(__FILE__,PATHINFO_FILENAME).':'.__LINE__ );

?>
