stdout($cadena . "\n"); } public function cambiarFecha($string) { $formato = "D M d Y H:i:s P"; $fecha = \DateTime::createFromFormat($formato, $string); return $fecha; } public function actionSincronizar() { $firebase = new FirebaseHelper(); $firestore = $firebase->firestore(); $ultimaFecha = null; $limite = 100; // 1000; $continuar = true; do { $this->stdout("Sincronizando ..."); $ref = $firestore->collection("usuarios") ->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) { $this->stdoutln($doc->id()); $c++; $data = $doc->data(); $ultimaFecha = $data["timestamp"]; $modelo = Usuario::findOne(["uid" => $doc->id()]); if ($modelo === null) { $modelo = new Usuario(); } try { $modelo->uid = $data["uid"]; $modelo->nombre = $data["nombre"]; if (isset($data["email"])) { $modelo->email = $data["email"]; } $modelo->telefono = $data["telefono"]; $modelo->facebook = $data["facebook"]; if (isset($data["facebookVerificado"])) { $modelo->facebookVerificado = $data["facebookVerificado"]; } $modelo->instagram = $data["instagram"]; if (isset($data["instagramVerificado"])) { $modelo->instagramVerificado = $data["instagramVerificado"]; } $modelo->twitter = $data["twitter"]; if (isset($data["twitterVerificado"])) { $modelo->twitterVerificado = $data["twitterVerificado"]; } $modelo->genero = $data["genero"]; $modelo->verificado = $data["verificado"]; $modelo->liderGlobal = $data["liderGlobal"]; if (!$modelo->save()) { $this->stdoutln('Ocurrió un error al guardar un usuario. ' . Json::encode($modelo->getFirstErrors())); } $creado = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $data["timestamp"]); if ($creado !== false) { $modelo->creado = new Expression("now()"); } if ($data["estatus"] === false) { $modelo->eliminado = $creado->format(\DateTime::RFC3339_EXTENDED); } if (!$modelo->save()) { $this->stdoutln('Ocurrió un error al guardar un usuario. ' . Json::encode($modelo->getFirstErrors())); } if (isset($data["grupos"])) { for($i = 0; $i < count($data["grupos"]); $i++){ $modeloGrupo = Grupo::findOne(["firebaseId" => $data["grupos"][$i]]); if (isset($modeloGrupo)) { $usuarioGrupo = UsuarioGrupo::find() ->andWhere([ "idUsuario" => $modelo->id, "idGrupo" => $modeloGrupo->id ]) ->one(); if ($usuarioGrupo === null) { $usuarioGrupo = new UsuarioGrupo(); $usuarioGrupo->idUsuario = $modelo->id; $usuarioGrupo->idGrupo = $modeloGrupo->id; if (!$usuarioGrupo->save()) { $this->stdoutln('Ocurrió un error al guardar un usuario-grupo. ' . Json::encode($usuarioGrupo->getFirstErrors())); } } } } } if (isset($data["dependencias"])) { if (is_array($data["dependencias"])) { for($i = 0; $i < count($data["dependencias"]); $i++){ $modeloDependencia = Grupo::findOne(["firebaseId" => $data["dependencias"][$i]]); if (isset($modeloDependencia)) { $usuarioDependencia = UsuarioDependencia::find() ->andWhere([ "idUsuario" => $modelo->id, "idDependencia" => $modeloDependencia->id ]) ->one(); if ($usuarioDependencia === null) { $usuarioDependencia = new UsuarioDependencia(); $usuarioDependencia->idUsuario = $modelo->id; $usuarioDependencia->idDependencia = $modeloDependencia->id; if (!$usuarioDependencia->save()) { $this->stdoutln('Ocurrió un error al guardar un usuario-dependencia. ' . Json::encode($usuarioDependencia->getFirstErrors())); } } } } } else { $modeloDependencia = Grupo::findOne(["firebaseId" => $data["dependencias"]]); if (isset($modeloDependencia)) { $usuarioDependencia = UsuarioDependencia::find() ->andWhere([ "idUsuario" => $modelo->id, "idDependencia" => $modeloDependencia->id ]) ->one(); if ($usuarioDependencia === null) { $usuarioDependencia = new UsuarioDependencia(); $usuarioDependencia->idUsuario = $modelo->id; $usuarioDependencia->idDependencia = $modeloDependencia->id; if (!$usuarioDependencia->save()) { $this->stdoutln('Ocurrió un error al guardar un usuario-dependencia. ' . Json::encode($usuarioDependencia->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); } public function actionCambiarClave($uid, $clave) { if(trim($uid) === "" || trim($clave) === "") { return $this->stdout("Los parámetros uid y clave son obligatorios\n"); } $firebase = new FirebaseHelper(); $auth = $firebase->authentication(); $res = $auth->changeUserPassword($uid, $clave); $this->stdout("Proceso terminado \n"); } public function actionCambiarTelefono($uid, $telefono) { if(trim($uid) === "" || trim($telefono) === "") { return $this->stdout("Los parámetros uid y telefono son obligatorios\n"); } $firebase = new FirebaseHelper(); $auth = $firebase->authentication(); $telefono = trim($telefono); $propiedades = ["phoneNumber" => "+52{$telefono}"]; $res = $auth->updateUser($uid, $propiedades); $this->stdout("Proceso terminado \n"); } }