true,// quitar en PRO
));
//$twig->addExtension(new Twig_Extension_Debug()); // quitar en PRO
$groupByFilter = new Twig_SimpleFilter('groupBy', function ($val, $key) {
return __::groupBy($val, $key);
});
$indexofFilter = new Twig_SimpleFilter('indexof', function ($collection, $item) {
if(is_null($collection)){
return -1;
}
$index = array_search($item, $collection);
return ($index || $index === 0) ? $index : -1;
});
$skeletonViewFilter = new Twig_SimpleFilter('skeletonView', function($videoId, $autoplay=false){
$skeleton = file_get_contents("http://lab.rtve.es/commons/api-getter/video/?x=video&idVideo=".$videoId);
return $skeleton;
});
$programContentFilter = new Twig_SimpleFilter('programContent', function($val) {
$contents = json_decode( file_get_contents('db/contents.json') );
return __::find( $contents, function($cont) use($val){
//print_r($cont->program_number);
return ( $cont->program_number === intval($val) );
});
});
$twig->addFilter($groupByFilter);
$twig->addFilter($indexofFilter);
$twig->addFilter($skeletonViewFilter);
$twig->addFilter($programContentFilter);
$config = dirname(__FILE__) . '/hybridauth/config.php';
$hybridauth = new Hybrid_Auth( $config );
// Init App
$app = new \Slim\Slim(array(
// Config requirements for default Slim Auth implementation
'cookies.encrypt' => true,
'cookies.secret_key' => 'El laboratorio de RTVE',
'name' => 'labrtve'
));
/**
* Carga de variables Comunes
*/
$customConfig = array(
'baseURL'=>'/liga-masterchef-junior',
'title'=>'Liga Masterchef Junior - Laboratorio RTVE.es',
'participantes' => StaticDB::getParticipantes(),
'premios' => json_decode(file_get_contents('db/premios.json')),
'programas' => StaticDB::getAllPrograms(),
'special_header' => getSpecialHeader()
);
/***
* Validation
*/
function getRulesTexts() {
$texts = array(
'capitan' => 'capitán',
'repescado' => 'repescado',
'mejor_concursante_prueba_inicial' => 'mejor concursante de prueba inicial',
'mejor_concursante_prueba_final' => 'mejor concursante de prueba final',
'eliminado' => 'eliminado',
'finalista' => 'finalista',
'ganador' => 'ganador',
'segundo' => 'segundo',
'tercero' => 'tercero',
'cuarto' => 'cuarto'
);
return $texts;
}
function getRulesTextsMany() {
$texts = array(
'capitan' => 'capitanes',
'repescado' => 'repescados',
'eliminado' => 'eliminados',
'finalista' => 'finalistas'
);
return $texts;
}
function validateBet($bet, $program_number) {
$message = null;
$rulesTexts = getRulesTexts();
$currentProgram = StaticDB::getCurrentProgram();
$selectedProgram = StaticDB::getProgramByNumber($program_number);
$currentRules = $currentProgram[0]['rules'];
if( $selectedProgram[0]['status'] != "open" ){
$message = 'La votación del programa '.$program_number.'no está abierta';
return $message;
}
//Si alguno de los select viene vacío
if (count($currentRules) !== count($bet)) {
foreach ($currentRules as $key => $values) {
if (!array_key_exists($key, $bet)) {
$message .= "Debes votar ". $rulesTexts[$key]. "
";
}
}
}
//Ahora se comprueba el número de opciones seleccionadas en cada select
foreach ($bet as $key => $values) {
//Eliminamos repetidos para evitar hackeo
$values = __::uniq($values);
//Comprobamos número de votaciones correctas
$numRules = count($currentRules[$key]);
$numBets = count($values);
if ($numRules !== $numBets) {
$message .= "Debes votar ". $numRules ." ". $rulesTexts[$key]. "
";
}
}
return $message;
}
function getSpecialHeader(){
global $twig;
$content = file_get_contents("http://www.rtve.es/comunes/controlador/cabeceras_controlador.inc?cat=TE_SMCJUN3&pag=portada&opcion=1",0);
$header = new DOMDocument();
// Load the url's contents into the DOM
$header->loadHTML($content);
$links = array();
$nodes = $header->getElementsByTagName('li');
foreach ($nodes as $node) {
$links[] = array(
"href" => $node->getElementsByTagName('a')->item(0)->getAttribute('href'),
"title" => $node->getElementsByTagName('a')->item(0)->getAttribute('title'),
"text" => $node->getElementsByTagName('a')->item(0)->nodeValue
);
}
return $twig->render('partials/specialHeader.html', array("links"=>$links) );
/*
foreach( $header->getElementsByTagName('a') as $link ) {
$link->setAttribute('target','_blank');
}*/
//return $header->saveHTML();
}
/***
* Check User login
*/
function isUserLogged(){
global $hybridauth;
if(!isset($_SESSION['provider'])){
return false;
}
try {
$provider = $hybridauth->getAdapter($_SESSION['provider']);
$is_user_logged_in = $provider->isUserConnected();
//print_r($is_user_logged_in);
//$user_profile = getUSerProfile($provider);
//var_dump( StaticDB::findUser($user_profile) );
} catch (Exception $e) {
echo $e;
}
if(!$is_user_logged_in){
return false;
}
return $provider;
}
function getUSerProfile($provider){
global $app, $hybridauth;
$sesionRestored = false;
try {
return $provider->getUserProfile();
} catch( Exception $e ) {
// to know more please refer to Exceptions handling section on the userguide
switch( $e->getCode() ){
case 0 : echo "Unspecified error."; break;
case 1 : echo "Hybriauth configuration error."; break;
case 2 : echo "Provider not properly configured."; break;
case 3 : echo "Unknown or disabled provider."; break;
case 4 : echo "Missing provider application credentials."; break;
case 5 : echo "Authentification failed. "
. "The user has canceled the authentication or the provider refused the connection."; break;
// Google ---> Comprobar si estan habilitadas las APIs de Google+ y Contacts
// este error se suele producir por no estar activadas
case 6 : echo "User profile request failed. Most likely the user is not connected to the provider and he should authenticate again.";
try {
// get the stored hybridauth data from your storage system
$hybridauth_session_data = StaticDB::get_stored_hybridauth_session( $_SESSION['DBUser'][0]['providerId'] );
// then call Hybrid_Auth::restoreSessionData() to get stored data
$hybridauth->restoreSessionData( $hybridauth_session_data );
// call back an instance of adapter
$provider = $hybridauth->getAdapter( $_SESSION['provider'] );
try {
$provider->getUserProfile();
} catch (Exception $e) {
$app->redirect('/liga-masterchef-junior/logout/');
}
$sesionRestored = true;
} catch (Exception $e) {
echo '---
'.$e;
}
break;
case 7 : echo "User not connected to the provider."; break;
case 8 : echo "Provider does not support this feature."; break;
}
//var_dump($provider->getUserProfile());
// well, basically your should not display this to the end user, just give him a hint and move on.
echo "
Original error message: " . $e->getMessage();
//var_dump( $_SESSION['provider'] );
//print_r(json_encode($_SESSION['DBUser']) );
//echo $_SESSION['DBUser'][0]['providerId'] .' -- '. $_SESSION['DBUser'][0]['provider'];
//var_dump($provider);
//print_r($sesionRestored);
//die();
if(isset($sesionRestored)){
return $provider->getUserProfile();
} else {
$app->redirect('/liga-masterchef-junior/logout/');
}
}
}
/**
* Routes
*/
$app->notFound(function () use ($app, $hybridauth, $twig) {
global $customConfig;
$provider = isUserLogged();
if($provider){
$user_profile = getUSerProfile($provider);
$currentProgram = StaticDB::getCurrentProgram();
$customConfig['resourceURI'] = $app->request->getResourceUri();
$customConfig['user_profile'] = $user_profile;
$customConfig['provider'] = $_SESSION['provider'];
$customConfig['currentProgram'] = $currentProgram[0];
$customConfig['ranking'] = StaticDB::getGeneralRanking();
}
echo $twig->render('404.html',$customConfig);
});
// Index
$app->get('/', function() use($app, $hybridauth, $twig){
global $customConfig;
$provider = isUserLogged();
if($provider){
$user_profile = getUSerProfile($provider);
$currentProgram = StaticDB::getCurrentProgram();
$customConfig['resourceURI'] = $app->request->getResourceUri();
$customConfig['user_profile'] = $user_profile;
$customConfig['userRanking'] = StaticDB::getUserInGeneralRanking($user_profile->identifier);
$customConfig['provider'] = $_SESSION['provider'];
$customConfig['currentProgram'] = $currentProgram[0];
$customConfig['ranking'] = StaticDB::getGeneralRanking();
//$customConfig['DBUser'] = $_SESSION['DBUser'];
echo $twig->render('index.html',$customConfig);
//$app->redirect('/liga-masterchef/programa/'.$currentProgram[0]["number"]);
} else {
echo $twig->render('login.html', $customConfig);
}
});
$app->get('/programa/:number/', function($number) use($app, $hybridauth, $twig){
global $customConfig;
$provider = isUserLogged();
if( $provider ){
$user_profile = getUSerProfile($provider);
$customConfig['userRanking'] = StaticDB::getUserInGeneralRanking($user_profile->identifier);
$customConfig['user_profile'] = $user_profile;
$customConfig['provider'] = $_SESSION['provider'];
// Apuesta del usuario si la hubiera
$user_bet = StaticDB::findBet( $user_profile, $number );
// Validaciones de Apuesta
$customConfig['formRule'] = getRulesTexts();
$customConfig['formRuleMany'] = getRulesTextsMany();
$customConfig['error'] = $_SESSION['slim.flash'];
$customConfig['oldValues'] = (isset($_SESSION['oldValues']) ? $_SESSION['oldValues'] : array());
}
$selectedProgram = StaticDB::getProgramByNumber($number);
$currentProgram = StaticDB::getCurrentProgram();
$customConfig['resourceURI'] = $app->request->getResourceUri();
$customConfig['results'] = ($selectedProgram) ? $selectedProgram[0] : null;
$customConfig['ranking'] = StaticDB::getProgramRanking($number);
if( !$provider ){
if( !$selectedProgram ){
$app->redirect('/liga-masterchef-junior/programa/'.$currentProgram[0]["number"].'/');
} else {
echo $twig->render('openProgram.html',$customConfig);
}
} else if( !$selectedProgram ){
// El programa seleccionado no existe
$app->redirect('/liga-masterchef-junior/programa/'.$currentProgram[0]["number"].'/');
} else if( $selectedProgram[0]['status'] == "disabled" ){
// El programa está deshabilitado
$app->redirect('/liga-masterchef-junior/programa/'.$currentProgram[0]["number"].'/');
} else if( $selectedProgram[0]['status'] == "closed" ){
// El programa está cerrado
if($user_bet){ $customConfig['userBet'] = $user_bet[0]; }
if( !isset( $selectedProgram[0]['result'] ) ){
// No hay resultados, mostramos la apuesta
echo $twig->render('userBet.html',$customConfig);
} else {
// Si hay resultados, mostramos los resultados de la apuesta
echo $twig->render('program.html',$customConfig);
}
} else if( $selectedProgram[0]['status'] == "open" ){
// El programa está abierto a votaciones
if($user_bet){
// El usuario ya ha votado
$customConfig['userBet'] = $user_bet[0];
$customConfig['info'] = $_SESSION['slim.flash'];
echo $twig->render('userBet.html',$customConfig);
} else {
// El usuario no ha votado
echo $twig->render('selectBet.html',$customConfig);
}
}
/*} else {
$app->redirect('/liga-masterchef/');
}*/
});
$app->post('/dobet/', function() use($app, $hybridauth, $twig){
global $customConfig;
$provider = isUserLogged();
if($provider){
$req = $app->request();
$user_profile = getUSerProfile($provider);
$user_bet_again = StaticDB::findBet( $user_profile, $req->params('program_number') );
if($user_bet_again){
$app->redirect('/liga-masterchef-junior/');
return;
}
/*$betResult = __::groupBy($req->params(), function($item, $key){
// Agupamos por clave sin numero
return preg_replace('/_[\d+]/','',$key);
});*/
$betResult = $req->params();
unset($betResult["program_number"]);
//Validación. Debe haber votaciones para todos los elementos
$message = validateBet($betResult, $req->params('program_number'));
if (!isset($message)) {
$bet = StaticDB::doBet( $user_profile, $req->params('program_number'), $betResult );
} else {
$app->flash('error', $message);
}
}
$_SESSION['oldValues'] = $_POST;
$app->redirect('/liga-masterchef-junior/programa/'.$req->params('program_number').'/');
});
// Login/Provider
$app->get('/login/:provider/', function($name) use($app, $hybridauth, $twig){
global $customConfig;
$isNewUser = false;
try {
if($name=="Facebook"){
$provider = $hybridauth->authenticate( $name, array( "hauth_return_to" => 'http://lab.rtve.es/liga-masterchef-junior/' ) );
} else {
$provider = $hybridauth->authenticate( $name );
}
$is_user_logged_in = $provider->isUserConnected();
} catch (Exception $e) {
print_r($e);
}
if( $is_user_logged_in){
$_SESSION['provider'] = $name;
$user_profile = getUSerProfile($provider);
//Comprobamos si es un usuario nuevo (no está en BD) para saber si mostramos pantalla de solicitud de e-mail (sólo Twitter)
$user = StaticDB::findUserByProviderId($user_profile->identifier);
$isNewUser = (isset($user) ? false : true);
//Buscamos al usuario en la BBDD y si no existe lo insertamos
$_SESSION['DBUser'] = StaticDB::findUser($user_profile);
// Obtenemos los datos de la sesion
$hybridauth_session_data = $hybridauth->getSessionData();
// Guardamos la sesion en la BBDD
StaticDB::store_hybridauth_session( $user_profile, $hybridauth_session_data );
}
//Si el proveedor es Twitter, habrá que mostrar la página de solicitud de email
if (( $name == "Twitter" ) && ($isNewUser)) {
$app->redirect('/liga-masterchef-junior/email/');
} else {
$app->redirect('/liga-masterchef-junior/');
}
});
//user email form
$app->get('/email/', function() use($app, $hybridauth, $twig){
global $customConfig;
$customConfig['error'] = $_SESSION['slim.flash'];
echo $twig->render('email.html',$customConfig);
});
//Save user email
$app->post('/doSaveEmail/', function() use($app, $hybridauth, $twig){
global $customConfig;
$message = "";
$req = $app->request();
$params = $req->params();
$email = $params["email"];
$emailRepeat = $params["emailRepeat"];
if (($email == "") || ($emailRepeat == "")) {
$message = "Debes rellenar ambos campos.";
} elseif ($email !== $emailRepeat) {
$message = "Los e-mail introducidos no coinciden.";
} elseif ((!filter_var($email, FILTER_VALIDATE_EMAIL)) || (!filter_var($emailRepeat, FILTER_VALIDATE_EMAIL))) {
$message = "El formato de email introducido no es correcto.";
}
if ($message !== "") {
$app->flash('error', $message);
$app->redirect('/liga-masterchef-junior/email/');
}
if (isset($_SESSION['provider'])){
$provider = $hybridauth->getAdapter( $_SESSION['provider'] );
$user_profile = getUSerProfile($provider);
$result = StaticDB::saveEmail($user_profile->identifier, $email);
}
$app->redirect('/liga-masterchef-junior/');
});
// Logout
$app->get('/logout/', function() use($app, $hybridauth){
if(isset($_SESSION['provider'])){
$provider = $hybridauth->getAdapter( $_SESSION['provider'] );
$provider->logout();
unset($_SESSION['provider']);
}
$app->redirect('/liga-masterchef-junior/');
});
$app->post('/apuesta/:betId/', function($betId) use($app, $hybridauth) {
$provider = isUserLogged();
if($provider){
$currentProgram = StaticDB::getCurrentProgram();
$twitterMsg = "Este es mi pronóstico en la #LigaMasterchef para #MCJunior. ¿Compites conmigo? http://lab.rtve.es/liga-masterchef-junior/apuesta/".$betId."/ via @MasterChef_es";
$fbMsg = "Este es mi pronóstico en la Liga Masterchef Junior para el programa número ". $currentProgram[0]['number'] ."de Masterchef Junior. Si quieres competir conmigo, regístrate y vota por tus aspirantes favoritos.";
switch ($_SESSION['provider']) {
case 'Twitter':
$resultStatus = $provider->api()->post('statuses/update.json',array( 'status' => $twitterMsg ));
break;
case 'Facebook':
$resultStatus = $provider->api()->api("/me/feed", "post", array(
message => $fbMsg,
//picture => "http://www.mywebsite.com/path/to/an/image.jpg",
link => "http://localhost/liga-masterchef-junior/apuesta/". $betId ."/",
name => "Liga Masterchef Junior",
caption => "Afila tus cuchillos, es tu momento. ¿Oído, cocina?"
));
break;
case 'Google':
# code...
break;
default:
break;
}
}
$currentProgram = StaticDB::getCurrentProgram();
$app->flash('info', true);
$app->redirect('/liga-masterchef-junior/programa/'.$currentProgram[0]['number'].'/');
});
$app->get('/apuesta/:betID/', function($betID) use($app, $hybridauth, $twig) {
global $customConfig;
$userBet = StaticDB::findBetById($betID);
$userId = StaticDB::findUserByProviderId( $userBet['userId'] );
$customConfig['resourceURI'] = $app->request->getResourceUri();
$customConfig['userBet'] = $userBet;
$customConfig['userBet_profile'] = $userId;
$customConfig['ranking'] = StaticDB::getGeneralRanking();
$provider = isUserLogged();
if($provider){
$user_profile = getUSerProfile($provider);
$customConfig['user_profile'] = $user_profile;
$customConfig['provider'] = $_SESSION['provider'];
}
echo $twig->render('sharedBet.html',$customConfig);
});
// endpoint from hybridAuth/config.php
$app->get('/endpoint/', function () {
try {
require_once( "../commons/libs/hybridauth-2.3.0/Hybrid/Auth.php" );
require_once( "../commons/libs/hybridauth-2.3.0/Hybrid/Endpoint.php" );
Hybrid_Endpoint::process();
} catch (Exception $e) {
$app->redirect('/liga-masterchef-junior/');
}
});
$app->get('/perfil-de-usuario/:id/(programa/:program_number/)', function( $id, $program_number=null) use($app, $hybridauth, $twig){
// Obtenemos el programa
if( !isset($program_number) ){
$program = StaticDB::getCurrentProgram();
} else {
$program = StaticDB::getProgramByNumber($program_number);
}
// Existe el usuario?
if(!isset($id)){
$app->notFound();
return;
}
// Obtenemos el Usuario
$user = StaticDB::findUserById( $id );
if(!isset($user)) {
$app->notFound();
return;
}
// Obtenemos la apuesta del usuario
$userBet = StaticDB::findUserBet( $user['providerId'], $program[0]['number'] );
$user['photoURL'] = $user['photo'];
global $customConfig;
$customConfig['userRanking'] = StaticDB::getUserInGeneralRanking($user['providerId']);
$customConfig['user_profile'] = $user;
$customConfig['provider'] = $user['provider'];
// Parametro de la vista
$customConfig['results'] = $program[0];
$customConfig['userBet'] = $userBet[0];
// Mostramos el resultado
echo $twig->render('program.html',$customConfig);
});
$app->get('/testVideo/', function () use($twig){
global $customConfig;
$skeleton = file_get_contents("http://www.rtve.es/modulos/skeleton_views?id=3083898&autoplay=false&location=alacarta_videos");
echo $twig->render('videoTest.html', $customConfig);
});
$app->get('/testLogin/', function () use($config){
try {
$hybridtest = new Hybrid_Auth( $config );
$provider = $hybridtest->authenticate('Facebook');
$user_profile = $adapter->getUserProfile();
$provider->logout();
} catch (Exception $e) {
print_r($e);
}
var_dump($user_profile);
});
$app->get('/testDB/', function () {
// Configuration
//$dbname = 'ligamasterchef';
/*$connection = new MongoClient( "mongodb://82.223.133.87:20002" ); // connect to a remote host at a given port
$db = $connection->ligamasterchef;
$col = $db->contestants;
$documento = $col->find(array("_id"=>1))->sort(array("nombre"=>1));
$col = StaticDB::getDB()->users;
$user = $col->find(array("providerId"=>"105012196215396652157"));*/
/*$number = 2;
$provider = isUserLogged();
$user_profile = getUSerProfile($provider);
$programNumber = StaticDB::getProgramByNumber($number);
$user_bet = StaticDB::findBet( $user_profile, $number );
var_dump( $user_profile );
var_dump( $user_bet );*/
$rankingProgram = StaticDB::getProgramRanking(1);
$ranking = StaticDB::getGeneralRanking();
echo json_encode($ranking);
echo json_encode($rankingProgram);
});
//Run the Slim application
$app->run();
/***
* DB Class
*/
class StaticDB {
static function getDB(){
//$connection = new MongoClient( "mongodb://82.223.133.87:20002" ); // connect to a remote host at a given port
$connection = new MongoClient( "mongodb://lab_user:jw3jef.2@10.110.5.158:20002/ligamasterchef_junior?authSource=admin" );
$db = $connection->ligamasterchef_junior;
return $db;
}
/**
* USER
*/
static function findUser( $user_profile ){
//if($user_profile){
// Id del usuario conectado
$userId = $user_profile->identifier;
// coleccion de la BBDD
$col = StaticDB::getDB()->users;
// Buscamos al usuario
$user = $col->find( array("providerId"=>$userId) );
if( $user->count() < 1 ){
try {
// Insertar USER
StaticDB::saveUser($user_profile, $col);
// Buscamos al usuario otra vez
$user = $col->find(array("providerId"=>$userId));
//return iterator_to_array( $col->find(array("providerId"=>$providerId)) );
} catch ( MongoCursorException $e ) {
print_r($e);
die();
}
}
/*} else {
$user = null;
}*/
return iterator_to_array($user,false);
}
static function findUserById( $id ){
// coleccion de la BBDD
$col = StaticDB::getDB()->users;
// Buscamos al usuario
$user = $col->findOne( array("_id" => new MongoId($id)) );
return $user; //iterator_to_array($user,false);
}
static function findUserByProviderId( $providerId ){
// coleccion de la BBDD
$col = StaticDB::getDB()->users;
// Buscamos al usuario
$user = $col->findOne( array("providerId"=>$providerId) );
return $user; //iterator_to_array($user,false);
}
static function saveUser( $user_profile, $usersCollection ){
return $usersCollection->insert(array(
"providerId" => $user_profile->identifier,
"displayName" => $user_profile->displayName,
"photo" => $user_profile->photoURL,
"email" => $user_profile->email,
"emailVerified" => $user_profile->emailVerified,
"provider" => $_SESSION['provider']
));
}
static function saveEmail( $user_identifier, $email ){
// coleccion de la BBDD
$col = StaticDB::getDB()->users;
$nuevosdatos = array(
'$set' => array("email" => $email,
"emailVerified" => $email
));
$data = $col->update(array(
"providerId" => $user_identifier
), $nuevosdatos);
return $data;
}
/**
* SESSIONS
*/
static function store_hybridauth_session( $user, $session ){
// coleccion de la BBDD
$col = StaticDB::getDB()->users;
$query = array( "providerId" => $user->identifier );
$update = array( '$set' => array( 'hybrid_session' => $session ) );
$options = array( "new" => true );
$userUpdated = $col->findAndModify(
$query,
$update,
null,
$options
);
return $userUpdated;
}
static function get_stored_hybridauth_session( $providerId ){
// coleccion de la BBDD
$col = StaticDB::getDB()->users;
$query = array( "providerId" => $providerId );
$result = $col->findOne( $query, array('hybrid_session'=>true) );
return $result["hybrid_session"];
}
/**
* BETS
*/
static function findBet( $user, $program_number ){
$col = StaticDB::getDB()->userbets;
$data = $col->find(array(
"userId" => $user->identifier,
"program_number" => intval($program_number)
));
if( $data->count()>0 ){
return iterator_to_array($data, false);
} else {
return false;
}
}
static function findBetById( $id ){
// coleccion de la BBDD
$col = StaticDB::getDB()->userbets;
// Buscamos al usuario
$bet = $col->findOne( array("_id" => new MongoId($id)) );
return $bet; //iterator_to_array($user,false);
}
/**
* Igual que la anterior funcion pero pasando el userID como parametro
*/
static function findUserBet( $userId, $program_number ){
$col = StaticDB::getDB()->userbets;
$data = $col->find(array(
"userId" => $userId,
"program_number" => intval($program_number)
));
if( $data->count()>0 ){
return iterator_to_array($data, false);
} else {
return false;
}
}
static function doBet( $user, $program_number, $bet ){
$col = StaticDB::getDB()->userbets;
/*$bet = __::map($bet, function($b, $key){
return $bet[$key] = array_map('intval', $b);
});*/
$data = $col->insert(array(
"userId" => $user->identifier,
"program_number" => intval($program_number),
"created_at" => new MongoDate(),
"bet" => $bet
));
return $data;
}
static function getParticipantes(){
// coleccion Concursantes de la BBDD
$col = StaticDB::getDB()->contestants;
$documento = $col->find()->sort(array("nombre"=>1));
return iterator_to_array($documento, false);
}
static function getProgramByNumber( $number = NULL ){
// coleccion Programas de la BBDD
$col = StaticDB::getDB()->programs;
$data = $col->find( array( "number" => intval($number) ) );
return iterator_to_array($data, false);
}
static function getAllPrograms(){
// coleccion Programas de la BBDD
$col = StaticDB::getDB()->programs;
$data = $col->find()->sort(array("number"=>1));
return iterator_to_array($data, false);
}
static function getCurrentProgram(){
// coleccion Programas de la BBDD
$col = StaticDB::getDB()->programs;
$data = $col->find( array("current"=>true) );
return iterator_to_array($data, false);
}
/**
* RANKING
*/
static function getProgramRanking($id){
try {
$col = StaticDB::getDB()->selectCollection("rankingPrograma".$id);
} catch (Exception $e) {
echo $e;
}
$data = $col->find()->sort(array("value.position"=>1))->limit(10);
// Obtenemos los usuarios que estan en el Ranking
$data = iterator_to_array($data, false);
$usersInRanking = __::pluck($data, '_id');
$users = StaticDB::findUsers($usersInRanking);
$usersGrouped = __::groupBy($users, 'providerId');
$__users = __::map($data, function($item) use($usersGrouped){
return array(
"user" => $usersGrouped[$item['_id']][0],
"points" => $item['value']['points'],
"position" => $item['value']['position'],
);
});
return array(
"type" => "semanal",
"users" => $__users
);
}
static function getGeneralRanking(){
try {
$col = StaticDB::getDB()->selectCollection("rankingGeneral");
} catch (Exception $e) {
echo $e;
}
$data = $col->find(array("value.position"=>array('$exists'=>true)))->sort(array("value.position"=>1))->limit(10);
// Obtenemos los usuarios que estan en el Ranking
$data = iterator_to_array($data, false);
$usersInRanking = __::pluck($data, '_id');
$users = StaticDB::findUsers($usersInRanking);
$usersGrouped = __::groupBy($users, 'providerId');
$__users = __::map($data, function($item) use($usersGrouped){
return array(
"user" => $usersGrouped[$item['_id']][0],
"points" => $item['value']['points'],
"position" => (isset($item['value']['position'])) ? $item['value']['position'] : 0,
);
});
return array(
"type" => "general",
"users" => $__users
);
}
static function getUserInGeneralRanking($providerId){
try {
$col = StaticDB::getDB()->selectCollection("rankingGeneral");
} catch (Exception $e) {
echo $e;
}
$data = $col->findOne( array("_id"=>$providerId) );
//var_dump($data);
//$data = iterator_to_array($data, false);
return $data;
}
static function findUsers($users){
try {
$col = StaticDB::getDB()->selectCollection("users");
$query = '{"providerId":{"$in":'.json_encode($users).'}}';
$data = $col->find( json_decode($query) )->fields(json_decode('{"_id":false}'));
} catch (Exception $e) {
print_r($e);
}
return iterator_to_array($data, false);
}
static function testFind(){
try {
$col = StaticDB::getDB()->selectCollection("programs");
$query = '{"current":true}';
$data = $col->find( json_decode($query) );
} catch (Exception $e) {
print_r($e);
}
return iterator_to_array($data, false);
}
};