UsuarioController.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <?php
  2. namespace app\commands;
  3. use app\components\FirebaseHelper;
  4. use v1\models\Dependencia;
  5. use v1\models\Grupo;
  6. use v1\models\Usuario;
  7. use v1\models\UsuarioDependencia;
  8. use v1\models\UsuarioGrupo;
  9. use yii\console\Controller;
  10. use yii\db\Expression;
  11. use yii\helpers\Json;
  12. class UsuarioController extends Controller {
  13. public function stdoutln($cadena) {
  14. return $this->stdout($cadena . "\n");
  15. }
  16. public function cambiarFecha($string) {
  17. $formato = "D M d Y H:i:s P";
  18. $fecha = \DateTime::createFromFormat($formato, $string);
  19. return $fecha;
  20. }
  21. public function actionSincronizar() {
  22. $firebase = new FirebaseHelper();
  23. $firestore = $firebase->firestore();
  24. $ultimaFecha = null;
  25. $limite = 100; // 1000;
  26. $continuar = true;
  27. do {
  28. $this->stdout("Sincronizando ...");
  29. $ref = $firestore->collection("usuarios")
  30. ->where("sincronizado", "==", null)
  31. ->orderBy("timestamp", "ASC")
  32. ->limit($limite);
  33. if ($ultimaFecha !== null) {
  34. $ref = $ref->startAt([$ultimaFecha]);
  35. }
  36. $c = 0; # Contador de registros procesados
  37. foreach ($ref->documents() as $doc) {
  38. $this->stdoutln($doc->id());
  39. $c++;
  40. $data = $doc->data();
  41. $ultimaFecha = $data["timestamp"];
  42. $modelo = Usuario::findOne(["uid" => $doc->id()]);
  43. if ($modelo === null) {
  44. $modelo = new Usuario();
  45. }
  46. try {
  47. $modelo->uid = $data["uid"];
  48. $modelo->nombre = $data["nombre"];
  49. if (isset($data["email"])) {
  50. $modelo->email = $data["email"];
  51. }
  52. $modelo->telefono = $data["telefono"];
  53. $modelo->facebook = $data["facebook"];
  54. if (isset($data["facebookVerificado"])) {
  55. $modelo->facebookVerificado = $data["facebookVerificado"];
  56. }
  57. $modelo->instagram = $data["instagram"];
  58. if (isset($data["instagramVerificado"])) {
  59. $modelo->instagramVerificado = $data["instagramVerificado"];
  60. }
  61. $modelo->twitter = $data["twitter"];
  62. if (isset($data["twitterVerificado"])) {
  63. $modelo->twitterVerificado = $data["twitterVerificado"];
  64. }
  65. $modelo->genero = $data["genero"];
  66. $modelo->verificado = $data["verificado"];
  67. $modelo->liderGlobal = $data["liderGlobal"];
  68. if (!$modelo->save()) {
  69. $this->stdoutln('Ocurrió un error al guardar un usuario. ' . Json::encode($modelo->getFirstErrors()));
  70. }
  71. $creado = \DateTime::createFromFormat('Y-m-d\TH:i:s.u\Z', $data["timestamp"]);
  72. if ($creado !== false) {
  73. $modelo->creado = new Expression("now()");
  74. }
  75. if ($data["estatus"] === false) {
  76. $modelo->eliminado = $creado->format(\DateTime::RFC3339_EXTENDED);
  77. }
  78. if (!$modelo->save()) {
  79. $this->stdoutln('Ocurrió un error al guardar un usuario. ' . Json::encode($modelo->getFirstErrors()));
  80. }
  81. if (isset($data["grupos"])) {
  82. for($i = 0; $i < count($data["grupos"]); $i++){
  83. $modeloGrupo = Grupo::findOne(["firebaseId" => $data["grupos"][$i]]);
  84. if (isset($modeloGrupo)) {
  85. $usuarioGrupo = UsuarioGrupo::find()
  86. ->andWhere([
  87. "idUsuario" => $modelo->id,
  88. "idGrupo" => $modeloGrupo->id
  89. ])
  90. ->one();
  91. if ($usuarioGrupo === null) {
  92. $usuarioGrupo = new UsuarioGrupo();
  93. $usuarioGrupo->idUsuario = $modelo->id;
  94. $usuarioGrupo->idGrupo = $modeloGrupo->id;
  95. if (!$usuarioGrupo->save()) {
  96. $this->stdoutln('Ocurrió un error al guardar un usuario-grupo. ' . Json::encode($usuarioGrupo->getFirstErrors()));
  97. }
  98. }
  99. }
  100. }
  101. }
  102. if (isset($data["dependencias"])) {
  103. if (is_array($data["dependencias"])) {
  104. for($i = 0; $i < count($data["dependencias"]); $i++){
  105. $modeloDependencia = Grupo::findOne(["firebaseId" => $data["dependencias"][$i]]);
  106. if (isset($modeloDependencia)) {
  107. $usuarioDependencia = UsuarioDependencia::find()
  108. ->andWhere([
  109. "idUsuario" => $modelo->id,
  110. "idDependencia" => $modeloDependencia->id
  111. ])
  112. ->one();
  113. if ($usuarioDependencia === null) {
  114. $usuarioDependencia = new UsuarioDependencia();
  115. $usuarioDependencia->idUsuario = $modelo->id;
  116. $usuarioDependencia->idDependencia = $modeloDependencia->id;
  117. if (!$usuarioDependencia->save()) {
  118. $this->stdoutln('Ocurrió un error al guardar un usuario-dependencia. ' . Json::encode($usuarioDependencia->getFirstErrors()));
  119. }
  120. }
  121. }
  122. }
  123. } else {
  124. $modeloDependencia = Grupo::findOne(["firebaseId" => $data["dependencias"]]);
  125. if (isset($modeloDependencia)) {
  126. $usuarioDependencia = UsuarioDependencia::find()
  127. ->andWhere([
  128. "idUsuario" => $modelo->id,
  129. "idDependencia" => $modeloDependencia->id
  130. ])
  131. ->one();
  132. if ($usuarioDependencia === null) {
  133. $usuarioDependencia = new UsuarioDependencia();
  134. $usuarioDependencia->idUsuario = $modelo->id;
  135. $usuarioDependencia->idDependencia = $modeloDependencia->id;
  136. if (!$usuarioDependencia->save()) {
  137. $this->stdoutln('Ocurrió un error al guardar un usuario-dependencia. ' . Json::encode($usuarioDependencia->getFirstErrors()));
  138. }
  139. }
  140. }
  141. }
  142. }
  143. $hoy = new \DateTime();
  144. $doc->reference()
  145. ->update([
  146. ["path" => "sincronizado", "value" => "OK"],
  147. ["path" => "sincronizadoFecha", "value" => $hoy->format("Y-m-d H:i:s")],
  148. ]);
  149. $this->stdoutln("Sincronizado correcto");
  150. } catch (\Exception $e) {
  151. $this->stdoutln("Exception: {$e->getMessage()}\n");
  152. $doc->reference()
  153. ->update([
  154. ["path" => "sincronizado", "value" => "ERROR"],
  155. ["path" => "sincronizadoError", "value" => $e->getMessage()],
  156. ["path" => "sincronizadoErrorLine", "value" => $e->getLine()],
  157. ]);
  158. }
  159. }
  160. # Si los registros procesados son menores al límite, terminar
  161. if ($c < $limite) {
  162. $continuar = false;
  163. }
  164. } while ($continuar);
  165. }
  166. public function actionCambiarClave($uid, $clave) {
  167. if(trim($uid) === "" || trim($clave) === "") {
  168. return $this->stdout("Los parámetros uid y clave son obligatorios\n");
  169. }
  170. $firebase = new FirebaseHelper();
  171. $auth = $firebase->authentication();
  172. $res = $auth->changeUserPassword($uid, $clave);
  173. $this->stdout("Proceso terminado \n");
  174. }
  175. public function actionCambiarTelefono($uid, $telefono) {
  176. if(trim($uid) === "" || trim($telefono) === "") {
  177. return $this->stdout("Los parámetros uid y telefono son obligatorios\n");
  178. }
  179. $firebase = new FirebaseHelper();
  180. $auth = $firebase->authentication();
  181. $telefono = trim($telefono);
  182. $propiedades = ["phoneNumber" => "+52{$telefono}"];
  183. $res = $auth->updateUser($uid, $propiedades);
  184. $this->stdout("Proceso terminado \n");
  185. }
  186. }