MediaController.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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. $dominio = Yii::$app->getRequest()->getHostInfo() . "/assets/";
  33. $archivo = UploadedFile::getInstanceByName('file');
  34. $tipo = $this->req->getBodyParam("tipo", "");
  35. if ($archivo === null) {
  36. return (new Respuesta())
  37. ->mensaje("No se recibió el archivo")
  38. ->esError();
  39. }
  40. $sec = Yii::$app->getSecurity();
  41. $base = Yii::getAlias("@app") . "/web/assets/";
  42. $ruta = "archivos/";
  43. try {
  44. if (!is_dir($base . $ruta)) {
  45. mkdir($base . $ruta);
  46. }
  47. $ruta .= date("Y/");
  48. if (!is_dir($base . $ruta)) {
  49. mkdir($base . $ruta);
  50. }
  51. $ruta .= date("m/");
  52. if (!is_dir($base . $ruta)) {
  53. mkdir($base . $ruta);
  54. }
  55. do {
  56. $nombreArchivo = str_replace("-", "", $ruta . $sec->generateRandomString());
  57. if ($archivo->extension) {
  58. $nombreArchivo .= "." . $archivo->extension;
  59. }
  60. } while (is_file($base . $nombreArchivo));
  61. if (!$archivo->saveAs($base . $nombreArchivo)) {
  62. //throw new \Exception("Ocurrió un problema al guardar el archivo (29032023)");
  63. return (new Respuesta())
  64. ->mensaje("Ocurrió un problema al guardar el archivo (29032023)")
  65. ->esError();
  66. }
  67. } catch (\Exception $e) {
  68. //throw new \Exception($e->getMessage() . "error al guardar (12233124)");
  69. return (new Respuesta())
  70. ->mensaje($e->getMessage() . "error al guardar (12233124)")
  71. ->esError();
  72. }
  73. $uuid = Uuid::uuid4()->toString();
  74. $model = new Media();
  75. $model->creado = new Expression('now()');
  76. $model->ruta = $dominio . $nombreArchivo;
  77. $model->ubicacionFisica = $dominio . $nombreArchivo;
  78. $model->uuid = $uuid;
  79. $model->extension = $archivo->extension;
  80. $model->descripcion = $archivo->name;
  81. $model->mimeType = $archivo->type;
  82. if ($tipo !== "")
  83. $model->tipo = $tipo;
  84. if (!$model->save()) {
  85. //throw new \Exception("error al guardar (761253)");
  86. return (new Respuesta($model))
  87. ->mensaje("error al guardar (761253)")
  88. ->esError();
  89. } else {
  90. return (new Respuesta($model))
  91. ->mensaje("Archivo Subido correctamente");
  92. }
  93. }
  94. public function actionEliminar() {
  95. $id = trim($this->req->getBodyParam("id", null));
  96. $user = Yii::$app->getUser()->getId();
  97. $modelo = null;
  98. $entro = false;
  99. if (!empty($id)) {
  100. $entro = true;
  101. $modelo = Media::find()->andWhere(["id" => $id])->one();
  102. }
  103. if ($modelo === null) {
  104. return (new Respuesta(["id" => $id, "entro" => $entro, "modelo" => $modelo]))->esError()->mensaje("Archivo no encontrado");
  105. }
  106. $modelo->idUsuario = $user;
  107. $modelo->eliminado = new Expression('now()');
  108. if (!$modelo->save()) {
  109. return (new Respuesta($modelo))
  110. ->mensaje("No se pudo eliminar Archivo");
  111. }
  112. return (new Respuesta())->mensaje("Archivo eliminado");
  113. }
  114. }