UsuarioController.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. <?php
  2. namespace v1\controllers;
  3. use app\models\Usuario;
  4. use common\data\Respuesta;
  5. use common\rest\AuthController;
  6. use v1\models\Permiso;
  7. use v1\models\UsuarioMedia;
  8. use v1\models\EstatusPermisoUsuario;
  9. use v1\models\PermisoUsuario;
  10. use yii\db\Expression;
  11. use yii\db\Query;
  12. class UsuarioController extends AuthController {
  13. public $modelClass = "v1\models\Usuario";
  14. public function actionIndex() {
  15. $id = trim($this->req->get("id", ""));
  16. $buscar = trim($this->req->get("q", ""));
  17. $in = trim($this->req->get("in", ""));
  18. $ponencia = intval($this->req->get('ponencia', ''));
  19. $query = $this->queryInicial;
  20. if ($ponencia > 0) {
  21. $permisoUsuario = PermisoUsuario::find()
  22. ->andWhere(['idPermiso' => Permiso::PERFIL_PONENCIA])
  23. ->andWhere(['eliminado' => null]);
  24. $ids = [];
  25. foreach ($permisoUsuario->each() as $pu) {
  26. $ids[] = $pu['idUsuario'];
  27. }
  28. $query->andWhere(['id' => $ids]);
  29. }
  30. if ($id !== "") {
  31. $query->andWhere(["id" => $id]);
  32. }
  33. if (!empty($in)) {
  34. $explode = explode(",", $in);
  35. $query->andWhere(["id" => $explode]);
  36. }
  37. if ($buscar) {
  38. $query->andWhere([
  39. "OR",
  40. "f_unaccent([[nombre]]) ilike f_unaccent(:q)",
  41. "f_unaccent([[clave]]) ilike f_unaccent(:q)",
  42. "f_unaccent([[correo]]) ilike f_unaccent(:q)"
  43. ])->addParams([':q' => "%{$buscar}%"]);
  44. }
  45. return new Respuesta($query, $this->limite, $this->pagina, $this->ordenar);
  46. }
  47. public function actionGuardar() {
  48. $id = trim($this->req->getBodyParam("id", ""));
  49. $pwd = trim($this->req->getBodyParam("pwd", ""));
  50. $permisos = $this->req->getBodyParam("permisos", []);
  51. $permisoEstatus = $this->req->getBodyParam("permisoEstatus", []);
  52. $verificarCorreo = intval($this->req->getBodyParam('verificarCorreo', ''));
  53. $modelo = null;
  54. if ($id !== "") {
  55. $modelo = $this->modelClass::findOne($id);
  56. }
  57. $tran = \Yii::$app->getDb()->beginTransaction();
  58. try {
  59. if ($modelo === null) {
  60. $modelo = new $this->modelClass();
  61. $modelo->creado = new Expression('now()');
  62. $modelo->uuid();
  63. } else {
  64. $modelo->modificado = new Expression('now()');
  65. }
  66. /** @var \v1\models\Usuario $modelo */
  67. $modelo->load($this->req->getBodyParams(), '');
  68. if ($verificarCorreo > 0) {
  69. $modelo->verificarCorreo = new Expression('now()');
  70. } else {
  71. $modelo->verificarCorreo = null;
  72. }
  73. if ($pwd !== "") {
  74. $modelo->agregarClave($pwd);
  75. }
  76. if (!$modelo->save()) {
  77. return (new Respuesta($modelo))
  78. ->mensaje("Hubo un problema al guardar Usuario");
  79. }
  80. PermisoUsuario::deleteAll(["idUsuario" => $modelo->id]);
  81. foreach ($permisos as $permiso) {
  82. $permisoUsuario = new PermisoUsuario();
  83. $permisoUsuario->idUsuario = $modelo->id;
  84. $permisoUsuario->idPermiso = $permiso;
  85. $permisoUsuario->uuid();
  86. $permisoUsuario->asignado = new Expression('now()');
  87. if (!$permisoUsuario->save()) {
  88. $tran->rollBack();
  89. return (new Respuesta($permisoUsuario))
  90. ->mensaje("Hubo un problema al guardar la permisos");
  91. }
  92. }
  93. $epa = EstatusPermisoUsuario::find() //estatus permiso anterior
  94. ->andWhere(['idUsuario' => $modelo->id])
  95. ->andWhere(['eliminado' => null])
  96. ->all();
  97. $agregados = []; //Permiso de estatus que se van agregando
  98. foreach ($permisoEstatus as $_estatus) {
  99. $estatusPermiso = null;
  100. $estatusPermiso = EstatusPermisoUsuario::findOne([
  101. "idUsuario" => $modelo->id,
  102. "idEstatus" => $_estatus
  103. ]);
  104. if ($estatusPermiso !== null) {
  105. $estatusPermiso->modificado = new Expression('now()');
  106. if ($estatusPermiso->eliminado !== null) {
  107. $estatusPermiso->eliminado = null;
  108. }
  109. $agregados[] = $estatusPermiso->id;
  110. } else {
  111. $estatusPermiso = new EstatusPermisoUsuario();
  112. $estatusPermiso->idEstatus = $_estatus;
  113. $estatusPermiso->idUsuario = $modelo->id;
  114. $estatusPermiso->uuid();
  115. $estatusPermiso->creado = new Expression('now()');
  116. $agregados[] = $estatusPermiso->id;
  117. }
  118. if (!$estatusPermiso->save()) {
  119. $tran->rollBack();
  120. return (new Respuesta($estatusPermiso))
  121. ->mensaje("Error al asignar el Permiso de Estatus");
  122. }
  123. }
  124. foreach ($epa as $permiso) {
  125. if (!in_array($permiso->idEstatus, $permisoEstatus)) {
  126. $permiso->eliminado = new Expression('now()');
  127. $permiso->save();
  128. }
  129. }
  130. $tran->commit();
  131. $modelo->refresh();
  132. return (new Respuesta($modelo))
  133. ->mensaje("Usuario guardado con éxito.");
  134. } catch (\Exception $e) {
  135. $tran->rollBack();
  136. return (new Respuesta())
  137. ->esError()
  138. ->mensaje("Hubo un error en el servidor");
  139. }
  140. }
  141. public function actionEditar() {
  142. $modelo = null;
  143. $usuario = $this->usuario;
  144. if ($usuario) {
  145. $modelo = $this->modelClass::findOne($usuario->id);
  146. }
  147. $tran = \YII::$app->getDb()->beginTransaction();
  148. if ($modelo === null) {
  149. return (new Respuesta($modelo))
  150. ->mensaje("No se encontró el usuario.");
  151. } else {
  152. $modelo->modificado = new Expression('now()');
  153. }
  154. $modelo->load($this->req->getBodyParams(), '');
  155. if (!$modelo->save()) {
  156. $tran->rollBack();
  157. return (new Respuesta($modelo))
  158. ->mensaje("Hubo un problema al guardar Usuario");
  159. }
  160. $tran->commit();
  161. $modelo->refresh();
  162. return (new Respuesta($modelo))
  163. ->mensaje("Perfil actualizado.");
  164. }
  165. public function actionDesbloquearClave() {
  166. $id = intval($this->req->getBodyParam("id", null));
  167. $usuario = Usuario::findOne($id);
  168. $usuario->falloClave = 0;
  169. $usuario->ultimoFallo = new Expression('now()');
  170. if (!$usuario->save())
  171. return (new Respuesta())
  172. ->esError()
  173. ->mensaje("Hubo un error en el servidor");
  174. return (new Respuesta())
  175. ->mensaje("Cuenta reestablecida con Éxito");
  176. }
  177. public function actionEliminar() {
  178. $id = intval($this->req->getBodyParam("id", null));
  179. $modelo = null;
  180. if ($id > 0) {
  181. $modelo = $this->modelClass::findOne(["id" => $id]);
  182. }
  183. if ($modelo === null) {
  184. return (new Respuesta())
  185. ->esError()
  186. ->mensaje("Usuario no encontrado");
  187. }
  188. $modelo->eliminado = new Expression('now()');
  189. if (!$modelo->save()) {
  190. return (new Respuesta($modelo))
  191. ->mensaje("No se pudo eliminar Usuario");
  192. }
  193. return (new Respuesta())
  194. ->mensaje("Usuario eliminado");
  195. }
  196. public function actionCambiarClave() {
  197. $idUsuario = intval($this->req->getBodyParam("idUsuario", ""));
  198. $claveActual = trim($this->req->getBodyParam("claveActual", ""));
  199. $clave = trim($this->req->getBodyParam("clave", ""));
  200. $modelo = Usuario::find()
  201. ->andWhere(["id" => $idUsuario])
  202. ->one();
  203. if ($modelo === null) {
  204. return (new Respuesta())
  205. ->esError()
  206. ->mensaje("Ocurrió un error al leer el perfil");
  207. }
  208. /** @var \v1\models\Usuario $modelo */
  209. if (!$modelo->validarClave($claveActual)) {
  210. $modelo->addError("clave", "La clave actual no es correcta");
  211. return (new Respuesta($modelo));
  212. }
  213. $modelo->agregarClave($clave);
  214. if (!$modelo->save()) {
  215. return (new Respuesta($modelo))
  216. ->mensaje("Ocurrió un error al guardar el perfil");
  217. }
  218. $modelo->refresh();
  219. return (new Respuesta($modelo))
  220. ->mensaje("Contraseña actualizada");
  221. }
  222. public function actionCambiarFoto() {
  223. $foto = $this->req->getBodyParam("foto", "");
  224. $modelo = Usuario::find()
  225. ->andWhere(["id" => \Yii::$app->getUser()->getId()])
  226. ->one();
  227. if ($modelo === null) {
  228. return (new Respuesta())
  229. ->esError()
  230. ->mensaje("Ocurrió un error al leer el perfil");
  231. }
  232. UsuarioMedia::deleteAll(["idUsuario" => $modelo->id]);
  233. $mediaUsuario = new UsuarioMedia();
  234. $mediaUsuario->idMedia = $foto["id"];
  235. $mediaUsuario->idUsuario = $modelo->id;
  236. if (!$mediaUsuario->save()) {
  237. return (new Respuesta($mediaUsuario))
  238. ->mensaje("Hubo un problema al guardar Foto de Perfil");
  239. }
  240. return (new Respuesta($mediaUsuario))
  241. ->mensaje("Foto de Perfil Actualizada");
  242. }
  243. }