|
|
@@ -4,19 +4,43 @@ namespace app\commands;
|
|
|
|
|
|
use app\components\FirebaseHelper;
|
|
|
use v1\models\Evento;
|
|
|
+use v1\models\EventoGrupo;
|
|
|
use v1\models\Grupo;
|
|
|
+use v1\models\Usuario;
|
|
|
+use v1\models\UsuarioGrupo;
|
|
|
use yii\console\Controller;
|
|
|
+use yii\db\Expression;
|
|
|
+use yii\helpers\Json;
|
|
|
|
|
|
class EventoController extends Controller {
|
|
|
|
|
|
+ public function stdoutln($cadena) {
|
|
|
+ return $this->stdout($cadena."\n");
|
|
|
+ }
|
|
|
+
|
|
|
public function actionSincronizar() {
|
|
|
$firebase = new FirebaseHelper();
|
|
|
$firestore = $firebase->firestore();
|
|
|
|
|
|
+ $refGrupos = $firestore->collection("grupos");
|
|
|
+ $refUsuarios = $firestore->collection("usuarios");
|
|
|
+
|
|
|
+ $grupos = [];
|
|
|
+ $usuarios = [];
|
|
|
+
|
|
|
+ foreach($refGrupos->documents() as $grupo) {
|
|
|
+ $grupos[$grupo->id()] = $grupo->data();
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach($refUsuarios->documents() as $usuario) {
|
|
|
+ $usuarios[$usuario->id()] = $usuario->data();
|
|
|
+ }
|
|
|
+
|
|
|
$ultimaFecha = null;
|
|
|
$limite = 1; // 1000;
|
|
|
$continuar = true;
|
|
|
- do {
|
|
|
+ // do {
|
|
|
+ $this->stdout("Sincronizando ...");
|
|
|
$ref = $firestore->collection("eventos")
|
|
|
// ->where("sincronizado", "==", null)
|
|
|
->orderBy("timestamp", "ASC")
|
|
|
@@ -39,18 +63,114 @@ class EventoController extends Controller {
|
|
|
|
|
|
$modelo->nombre = $data["nombre"];
|
|
|
$modelo->descripcion = $data["descripcion"];
|
|
|
+ $modelo->ciudad = $data["ciudad"];
|
|
|
+ $fechaInicio = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $data["fechaInicio"]);
|
|
|
+ if ($fechaInicio !== false) {
|
|
|
+ $modelo->fechaInicio = $fechaInicio->format(\DateTime::RFC3339_EXTENDED);
|
|
|
+ }
|
|
|
+ $fechaFinal = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $data["fechaFinal"]);
|
|
|
+ if ($fechaFinal !== false) {
|
|
|
+ $modelo->fechaFinal = $fechaFinal->format(\DateTime::RFC3339_EXTENDED);
|
|
|
+ }
|
|
|
+ $modelo->fotoEvento = $data["fotoEvento"];
|
|
|
+ $modelo->url = $data["pathFirebase"];
|
|
|
+ if (isset($data["tag"])) {
|
|
|
+ $modelo->tag = $data["tag"];
|
|
|
+ }
|
|
|
+ $modelo->firebaseId = $doc->id();
|
|
|
+
|
|
|
+ if (!$modelo->save()) {
|
|
|
+ $this->stdoutln('Ocurrió un error al guardar un evento. '.Json::encode($modelo->getFirstErrors()));
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach ($data["grupos"] as $grupoEvento) {
|
|
|
+ $grupoModelo = Grupo::findOne(["firebaseId" => $grupoEvento]);
|
|
|
+ if($grupoModelo === null && isset($grupos[$grupoEvento])) {
|
|
|
+ $grupoModelo = new Grupo();
|
|
|
+ $grupoModelo->creado = new Expression('now()');
|
|
|
+ $grupoModelo->nombre = $grupos[$grupoEvento]["nombre"];
|
|
|
+ $grupoModelo->descripcion = $grupos[$grupoEvento]["descripcion"];
|
|
|
+ $grupoModelo->firebaseId = $grupoEvento;
|
|
|
+
|
|
|
+ if (!$grupoModelo->save()) {
|
|
|
+ $this->stdoutln('Ocurrió un error al guardar un grupo. '.Json::encode($grupoModelo->getFirstErrors()));
|
|
|
+ }
|
|
|
|
|
|
- // Mapear información de los modelos
|
|
|
+ }
|
|
|
+ if ($grupoModelo !== null) {
|
|
|
+ $eventoGrupo = new EventoGrupo();
|
|
|
+
|
|
|
+ $eventoGrupo->idEvento = $modelo->id;
|
|
|
+ $eventoGrupo->idGrupo = $grupoModelo->id;
|
|
|
+
|
|
|
+ if(!$eventoGrupo->save()) {
|
|
|
+ $this->stdoutln('Ocurrió un error al guardar un evento-grupo. '.Json::encode($eventoGrupo->getFirstErrors()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach ($data["usuarios"] as $usuarioEvento) {
|
|
|
+ $usuarioModelo = Usuario::findOne(["uid" => $usuarioEvento["uid"]]);
|
|
|
+ if ($usuarioModelo === null && isset($usuarios[$usuarioEvento["uid"]])) {
|
|
|
+ $usuarioModelo = new Usuario();
|
|
|
+ $usuarioRef = $usuarios[$usuarioEvento["uid"]];
|
|
|
+ $usuarioModelo->nombre = $usuarioRef["nombre"];
|
|
|
+ if (isset($usuarioRef["correo"])) {
|
|
|
+ $usuarioModelo->email = $usuarioRef["correo"];
|
|
|
+ }
|
|
|
+ $usuarioModelo->telefono = $usuarioRef["telefono"];
|
|
|
+ $usuarioModelo->facebook = $usuarioRef["facebook"];
|
|
|
+ if (isset($usuarioRef["facebookVerificado"])) {
|
|
|
+ $usuarioModelo->facebookVerificado = $usuarioRef["facebookVerificado"];
|
|
|
+ }
|
|
|
+ $usuarioModelo->instagram = $usuarioRef["instagram"];
|
|
|
+ if (isset($usuarioRef["instagramVerificado"])) {
|
|
|
+ $usuarioModelo->instagramVerificado = $usuarioRef["instagramVerificado"];
|
|
|
+ }
|
|
|
+ $usuarioModelo->twitter = $usuarioRef["twitter"];
|
|
|
+ if (isset($usuarioRef["twitterVerificado"])) {
|
|
|
+ $usuarioModelo->twitterVerificado = $usuarioRef["twitterVerificado"];
|
|
|
+ }
|
|
|
+ $usuarioModelo->genero = $usuarioRef["genero"];
|
|
|
+ $usuarioModelo->verificado = $usuarioRef["verificado"];
|
|
|
+ $usuarioModelo->creado = new Expression('now()');
|
|
|
+
|
|
|
+ if(!$usuarioModelo->save()) {
|
|
|
+ $this->stdoutln('Ocurrió un error al guardar un usuario. '.Json::encode($usuarioModelo->getFirstErrors()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($usuarioModelo !== null && isset($usuarios[$usuarioEvento["uid"]]) && isset($usuarios[$usuarioEvento["uid"]]["grupo"]) && isset($usuarios[$usuarioEvento["uid"]]["grupo"][0])) {
|
|
|
+ $modelGrupo = Grupo::findOne(['firebaseId' => $usuarios[$usuarioEvento["uid"]]["grupo"][0]]);
|
|
|
+
|
|
|
+ $usuarioGrupo = UsuarioGrupo::find()
|
|
|
+ ->andWhere(["idUsuario" => $usuarioModelo->id])
|
|
|
+ ->andWhere(["idGrupo" => $modelGrupo->id])
|
|
|
+ ->one();
|
|
|
+
|
|
|
+ if ($usuarioGrupo === null) {
|
|
|
+ $usuarioGrupo = new UsuarioGrupo();
|
|
|
+
|
|
|
+ $usuarioGrupo->idUsuario = $usuarioModelo->id;
|
|
|
+ $usuarioGrupo->idGrupo = $usuarioGrupo->id;
|
|
|
+
|
|
|
+ if(!$usuarioGrupo->save()) {
|
|
|
+ $this->stdoutln('Ocurrió un error al guardar un usuario-grupo. '.Json::encode($usuarioGrupo->getFirstErrors()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
$hoy = new \DateTime();
|
|
|
$doc->reference()
|
|
|
->update([
|
|
|
["path" => "sincronizado", "value" => "OK"],
|
|
|
["path" => "sincronizadoFecha", "value" => $hoy->format("Y-m-d H:i:s")],
|
|
|
- ["path" => "evidencias", "value" => $data["evidencias"]],
|
|
|
]);
|
|
|
+ $this->stdoutln("Sincronizado correcto");
|
|
|
} catch(\Exception $e) {
|
|
|
- $this->stdout("Exception: {$e->getMessage()}\n");
|
|
|
+ $this->stdoutln("Exception: {$e->getMessage()}\n");
|
|
|
$doc->reference()
|
|
|
->update([
|
|
|
["path" => "sincronizado", "value" => "ERROR"],
|
|
|
@@ -61,11 +181,11 @@ class EventoController extends Controller {
|
|
|
}
|
|
|
|
|
|
# Si los registros procesados son menores al límite, terminar
|
|
|
- if($c < $limite) {
|
|
|
+ /* if($c < $limite) {
|
|
|
$continuar = false;
|
|
|
- }
|
|
|
+ } */
|
|
|
|
|
|
- } while($continuar);
|
|
|
+ // } while($continuar);
|
|
|
}
|
|
|
|
|
|
}
|