MediaController.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <?php
  2. namespace v1\controllers;
  3. use common\data\Respuesta;
  4. use common\rest\AuthController;
  5. use yii\db\Expression;
  6. use Ramsey\Uuid\Uuid;
  7. use v1\models\Media;
  8. use yii\web\NotFoundHttpException;
  9. use yii\web\Response;
  10. use yii\web\UploadedFile;
  11. use Yii;
  12. class MediaController extends AuthController {
  13. public $modelClass = "v1\models\Media";
  14. public function actionIndex() {
  15. $id = intval($this->req->get("id", ""));
  16. $buscar = trim($this->req->get("buscar", ""));
  17. $query = $this->queryInicial;
  18. if($id > 0) {
  19. $query->andWhere(["id" => $id]);
  20. }
  21. if($buscar) {
  22. # Ejemplo de buscador
  23. $query->andWhere([
  24. "OR",
  25. ["ilike", "nombre", $buscar]
  26. ]);
  27. //
  28. }
  29. return new Respuesta($query, $this->limite, $this->pagina, $this->ordenar);
  30. }
  31. public function actionGuardar() {
  32. if (!$this->req->isPost) {
  33. throw new NotFoundHttpException();
  34. }
  35. $usuario = \Yii::$app->getUser()->getIdentity();
  36. $this->res->format = Response::FORMAT_JSON;
  37. $archivo = UploadedFile::getInstanceByName('archivo');
  38. if ($archivo === null) {
  39. return (new Respuesta())
  40. ->esError()
  41. ->mensaje("No se recibió el archivo");
  42. }
  43. $sec = \Yii::$app->getSecurity();
  44. $base = \Yii::getAlias("@app") . "/web/assets/";
  45. $ruta = "recurso/";
  46. if (!is_dir($base . $ruta)) {
  47. mkdir($base . $ruta);
  48. }
  49. $ruta .= date("Y/");
  50. if (!is_dir($base . $ruta)) {
  51. mkdir($base . $ruta);
  52. }
  53. $ruta .= date("m/");
  54. if (!is_dir($base . $ruta)) {
  55. mkdir($base . $ruta);
  56. }
  57. $dominio = \Yii::$app->getRequest()->getHostInfo() . "/assets/";
  58. do {
  59. $nombreArchivo = str_replace("-", "", $ruta . $sec->generateRandomString());
  60. if ($archivo->extension) {
  61. $nombreArchivo .= "." . $archivo->extension;
  62. }
  63. } while (is_file($base . $nombreArchivo));
  64. if (!$archivo->saveAs($base . $nombreArchivo)) {
  65. return (new Respuesta())
  66. ->mensaje("Ocurrió un problema al guardar el archivo");
  67. }
  68. $uuid = Uuid::uuid4();
  69. $modelo = new Media();
  70. $modelo->uuid();
  71. $modelo->creado = new Expression('now()');
  72. $modelo->idUsuario = $usuario->id;
  73. $modelo->uuid = $uuid->toString();
  74. $modelo->nombre = $archivo->name;
  75. $modelo->mimetype = $archivo->type;
  76. $modelo->extension = $archivo->extension;
  77. $modelo->ruta = $dominio . $nombreArchivo;
  78. $modelo->load($this->req->getBodyParams(), '');
  79. if (!$modelo->save()) {
  80. return (new Respuesta($modelo))
  81. ->mensaje("Hubo un problema al guardar Media");
  82. }
  83. $modelo->refresh();
  84. return (new Respuesta())
  85. ->mensaje("Archivo subido correctamente")
  86. ->detalle($modelo);
  87. }
  88. public function actionEliminar() {
  89. $id = trim($this->req->getBodyParam("id", null));
  90. $user = Yii::$app->getUser()->getId();
  91. $modelo = null;
  92. $entro = false;
  93. if (!empty($id)) {
  94. $entro = true;
  95. $modelo = Media::find()->andWhere(["id" => $id])->one();
  96. }
  97. if ($modelo === null) {
  98. return (new Respuesta(["id" => $id, "entro" => $entro, "modelo" => $modelo]))->esError()->mensaje("Archivo no encontrado");
  99. }
  100. $modelo->idUsuario = $user;
  101. $modelo->eliminado = new Expression('now()');
  102. if (!$modelo->save()) {
  103. return (new Respuesta($modelo))
  104. ->mensaje("No se pudo eliminar Archivo");
  105. }
  106. return (new Respuesta())->mensaje("Archivo eliminado");
  107. }
  108. }