NotificacionController.php 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <?php
  2. namespace app\modules\mail\controllers;
  3. use app\modules\mail\models\NotificacionCorreo;
  4. use Yii;
  5. use yii\rest\Controller;
  6. use yii\web\BadRequestHttpException;
  7. use yii\web\ForbiddenHttpException;
  8. # TODO: Cambiar por un controlador con seguridad
  9. class NotificacionController extends Controller {
  10. const TIPO_UNO = "uno";
  11. const TIPO_MULTIPLE = "multiple";
  12. public function actionIndex() {
  13. $req = Yii::$app->getRequest();
  14. if(!$req->isPost) {
  15. # TODO: Cambiar por respuestas
  16. throw new ForbiddenHttpException("El método debe enviarse por POST");
  17. }
  18. # Para indicar si se envía un correo por receptor o un correo con multiple receptores
  19. # valores: uno o multiple
  20. $tipo = $req->getBodyParam("tipo", "");
  21. $tran = Yii::$app->getDb()->beginTransaction();
  22. try {
  23. if($tipo === self::TIPO_UNO) {
  24. $modelo = NotificacionCorreo::enviar($req->getBodyParams());
  25. } elseif($tipo === self::TIPO_MULTIPLE) {
  26. $modelo = NotificacionCorreo::enviarMultiple($req->getBodyParams());
  27. }
  28. if($modelo->hasErrors()) {
  29. foreach($modelo->getFirstErrors() as $error) {
  30. throw new BadRequestHttpException($error);
  31. }
  32. }
  33. $tran->commit();
  34. } catch(BadRequestHttpException $e) {
  35. $tran->rollBack();
  36. throw $e;
  37. } catch(\Exception $e) {
  38. $tran->rollBack();
  39. throw new BadRequestHttpException("Ocurrió un error en el servidor: {$e->getMessage()}");
  40. }
  41. }
  42. }