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 { $this->stdout("Sincronizando ..."); $ref = $firestore->collection("eventos") // ->where("sincronizado", "==", null) ->orderBy("timestamp", "ASC") ->limit($limite); if($ultimaFecha !== null) { $ref = $ref->startAt([$ultimaFecha]); } $c = 0; # Contador de registros procesados foreach($ref->documents() as $doc) { $c++; $data = $doc->data(); $ultimaFecha = $data["timestamp"]; $modelo = Evento::findOne(["firebaseId" => $doc->id()]); if($modelo === null) { $modelo = new Evento(); } try { $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())); } } 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")], ]); $this->stdoutln("Sincronizado correcto"); } catch(\Exception $e) { $this->stdoutln("Exception: {$e->getMessage()}\n"); $doc->reference() ->update([ ["path" => "sincronizado", "value" => "ERROR"], ["path" => "sincronizadoError", "value" => $e->getMessage()], ["path" => "sincronizadoErrorLine", "value" => $e->getLine()], ]); } } # Si los registros procesados son menores al límite, terminar /* if($c < $limite) { $continuar = false; } */ // } while($continuar); } }