Advertisement
Guest User

ControllerRecursos antes de centralizar datos

a guest
Jul 24th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 46.63 KB | None | 0 0
  1. <?php
  2.  
  3. namespace App\Http\Controllers\API;
  4.  
  5. use App\Models\Listing;
  6. use Carbon\Carbon;
  7. use Illuminate\Http\Request;
  8. use App\Http\Controllers\Controller;
  9. use Illuminate\Support\Facades\DB;
  10. use App\Models\User;
  11. use getLists;
  12.  
  13. /*----------------------------------*/
  14.  
  15. use Intervention\Image\ImageManagerStatic as Image;
  16. use Illuminate\Support\Facades\Storage;
  17.  
  18. class recursosController extends Controller
  19. {
  20. const PRIVADO = 1;
  21. protected $category_id;
  22. private $idEncontrado = -99;
  23. private $nameList = -99;
  24. private $header = 'https://www.abundantum.com';
  25. private $recursosXlista = 15;
  26.  
  27. /*
  28. * ####################################
  29. * #######FUNCIONES DEPENDENCIA########
  30. * ####################################
  31. */
  32.  
  33. private function modPropiedades($propiedad, $valor)
  34. {
  35. switch ($propiedad) {
  36. case "id":
  37. $this->idEncontrado = $valor;
  38. break;
  39. case "name" :
  40. $this->nameList = $valor;
  41. break;
  42. default:
  43. break;
  44. }
  45. }
  46.  
  47. private function getKeysLista($userId)
  48. {
  49.  
  50. //Obtenemos el array de listas serializad según el usuario con el que estamos.
  51. $arrListas = DB::select('SELECT arrayListas FROM resource_list WHERE user_id = :id', ['id' => $userId]);
  52. //Si ha encontrado algo entro en la condición
  53. if (!empty($arrListas)) {
  54.  
  55. //Asigno lo que he encontrado en dicha variable.
  56. $contenido = $arrListas[0]->arrayListas;
  57. if ($contenido != null) {
  58. //Como esta "protegido" es decir serializado, lo deserializo para poder administrar su contenido.
  59. $contenido = unserialize($contenido);
  60. //Obtengo el nombre de las listas
  61. $contenido = array_keys($contenido);
  62.  
  63. return $contenido;
  64. }
  65. }
  66.  
  67. return false;
  68. }
  69.  
  70. /*
  71. * #######################################################################
  72. * #######FUNCION PARA BORRAR EL RECURSO DE MIS RECURSOS ASIGNADOS########
  73. * #######################################################################
  74. */
  75.  
  76. public function deleteResource(Request $request)
  77. {
  78.  
  79. try {
  80. $idUsuario = $request->get('user_id');
  81. $email = $request->get('email');
  82. $existsUser = User::where('id', $idUsuario)->where('email', $email)->first();
  83. if ($existsUser == null) {
  84. return response()->json(["message" => "No se encontró ningún usuario", "state" => "USER_NOT_FOUND"], 401);
  85. }
  86.  
  87. $idRecurso = (int)$request->get('listing_id');
  88. if ($idRecurso == null) {
  89. return response()->json(["message" => "No se encontró ningún identificado del recurso", "state" => "RESOURCE_ID_IS_EMPTY"], 401);
  90. }
  91.  
  92. $existe = DB::select('SELECT * FROM listing_assign WHERE user_id = :id AND listing_id = :list', ['id' => $idUsuario, 'list' => $idRecurso]);
  93.  
  94.  
  95. if (!empty($existe)) {
  96.  
  97. //Si existe ese recursos en tus asignados por lo tanto lo borro.
  98.  
  99. $arrListas = DB::select('SELECT arrayListas FROM resource_list WHERE user_id = :id', ['id' => $idUsuario]);
  100. if (!empty($arrListas)) {
  101. $contenido = $arrListas[0]->arrayListas;
  102.  
  103. if ($contenido != null) {
  104.  
  105. $arrKeys = $this->getKeysLista($idUsuario);
  106. if ($arrKeys != false) {
  107. $idListAssigns = $existe[0]->id;
  108. $contenido = unserialize($contenido);
  109. for ($i = 0; $i < count($arrKeys); $i++) {
  110. foreach ($contenido[$arrKeys[$i]] as $fila) {
  111.  
  112. if ($fila == $idListAssigns) {
  113. $this->modPropiedades("name", $arrKeys[$i]);
  114. $this->modPropiedades("id", $fila);
  115. }
  116. }
  117. } //END FOR
  118. //Elimino dicho valor del array.
  119. unset($contenido[$this->nameList][$this->idEncontrado]);
  120. $contenido = serialize($contenido);
  121. //Actualizo los datos en la base de datos
  122. DB::update('UPDATE resource_list SET arrayListas = :array WHERE user_id = :id', ['id' => $idUsuario, 'array' => $contenido]);
  123. //Elimino el recurso de la lista de asignados.
  124. DB::delete('DELETE FROM listing_assign WHERE user_id = ? AND listing_id = ?;', [$idUsuario, $idRecurso]);
  125.  
  126. return response()->json(["message" => "Recurso eliminado de tu biblioteca de recursos.", "state" => "OK"], 201);
  127.  
  128. }
  129. }
  130. }
  131. return response()->json(["message" => "Hubo un error inesperado, el recurso no se ha eliminado correctamente..", "state" => "ERROR"], 401);
  132. }
  133.  
  134. return response()->json(["message" => "No se ha encontrado ningún recurso con ese identificador.", "state" => "ERROR"], 401);
  135.  
  136.  
  137. } catch (\Exception $exception) {
  138. return response()->json(["message" => "Hubo un error inesperado.", "state" => "ERROR", "Exception" => htmlentities($exception)], 401);
  139. }
  140. }
  141.  
  142. /*
  143. * ###################################################
  144. * #######FUNCION CREAR NUEVO RECURSOS PRIVADO########
  145. * ###################################################
  146. */
  147.  
  148. public function createResourcePrivate(Request $request)
  149. {
  150. $kCARACTERES_MIN = 6;
  151. $kCARACTERES_MAX = 150;
  152. try {
  153.  
  154. $arrCamposValidos = [];
  155.  
  156. $descripcion = $request->get('description');
  157. $numPhotos = (int)$request->get('num_photos');
  158. $video_Code = $request->get('video_code');
  159.  
  160. //Validamos tanto el id del usario como el email.
  161. $idUsuario = $request->get('user_id');
  162. $email = $request->get('email');
  163. $existsUser = User::where('id', $idUsuario)->where('email', $email)->first();
  164. if ($existsUser == null) {
  165. return response()->json(["message" => "No se encontró ningún usuario", "state" => "USER_NOT_FOUND"], 401);
  166. }
  167.  
  168. //Comprobamos que el titulo sea diferente a null y que posea mas de 5 caracteres.
  169.  
  170. $titulo = $request->get('title');
  171. if ($titulo != null) {
  172. if (strlen($titulo) < $kCARACTERES_MIN) {
  173. return response()->json(["message" => "El titulo debe ser mayor a $kCARACTERES_MIN caracteres.", "state" => "ERROR"], 401);
  174. } elseif (strlen($titulo) > $kCARACTERES_MAX) {
  175. return response()->json(["message" => "El titulo debe ser menor de $kCARACTERES_MAX caracteres.", "state" => "ERROR"], 401);
  176. }
  177. } else {
  178. return response()->json(["message" => "El titulo no puede quedar vacio.", "state" => "ERROR"], 401);
  179. }
  180.  
  181. //$recienCreado = DB::table('listings')->where('user_id', $idUsuario)->where('slug', str_replace(" ", "-", $titulo))->first();
  182. $recienCreado = Listing::where('user_id', $idUsuario)->where('slug', str_replace(" ", "-", $titulo))->first();
  183.  
  184. if ($recienCreado != null) {
  185. //El recurso con estos datos ya fue creado
  186. return response()->json(["message" => "El recurso con estos datos ya fue creado.", "state" => "ERROR"], 401);
  187. }
  188.  
  189. //Comprobamos si existen los valores.
  190.  
  191. if ($video_Code != null) {
  192. $video = $this->addVideo($video_Code);
  193. if (gettype($video) == 'array') {
  194. array_merge($arrCamposValidos, $video);
  195. }
  196.  
  197. }
  198.  
  199.  
  200. if ($descripcion != null) {
  201. $arrCamposValidos['description'] = $descripcion;
  202. }
  203.  
  204. if ($numPhotos != null && $numPhotos != 0) {
  205. if ($numPhotos > 0 && $numPhotos < 11) {
  206. $arrURLS = $this->loadIMG($request);
  207. $arrCamposValidos["photos"] = $arrURLS;
  208. } else {
  209. return response()->json(["message" => "El numero de imagenes tiene que estar comprendido entre 1 y 10.", "state" => "ERROR"], 401);
  210. }
  211.  
  212. }
  213.  
  214.  
  215. //Solo queda la imagen si hay la subimos, y obtenemos su enlace.
  216.  
  217.  
  218. $arrCamposValidos = array_merge($arrCamposValidos,
  219. [
  220. 'user_id' => $idUsuario,
  221. 'user_create_id' => $idUsuario,
  222. 'title' => $titulo,
  223. 'slug' => str_replace(" ", "-", $titulo),
  224. 'is_private' => true,
  225. 'created_at' => Carbon::now(),
  226. 'updated_at' => Carbon::now()
  227. ]);
  228.  
  229. //Creamos un objeto con todos los valores que nos han pasado
  230. Listing::create($arrCamposValidos);
  231. //$recienCreado = DB::table('listings')->where('user_id', $idUsuario)->where('slug', str_replace(" ", "-", $titulo))->first();
  232. $recienCreado = Listing::where('user_id', $idUsuario)->where('slug', str_replace(" ", "-", $titulo))->first();
  233. return response()->json(["message" => "Recurso privado creado correctamente", "state" => "OK", "data" => $this->getDatos($recienCreado->id, $idUsuario)], 201);
  234.  
  235. } catch (\Exception $exception) {
  236. return response()->json(["message" => "Hubo un error inesperado.", "state" => "ERROR", "Exception" => htmlentities($exception)], 401);
  237. }
  238. }
  239.  
  240. private function loadIMG(Request $imagen)
  241. {
  242. $imagenes = $imagen->allFiles();
  243. $arrURLS = [];
  244. foreach ($imagenes as $item) {
  245.  
  246. //Obtenemos el nombre del archivo mas su extension
  247. $fileName = explode('.', $item->getClientOriginalName());
  248. if (!is_array($fileName) || (is_array($fileName) && count($fileName) > 2)) { //En el supuesto caso de que el nombre del archivo no contenga puntos, 2 es el numero de posiciones que deberia tener el array.
  249. return response()->json(["message" => "El nombre de la imagen no puede contener caracteres como: puntos, comas etc. ", "state" => "ERROR"], 401);
  250. }
  251. $path = 'images/' . date('Y/m/d') . '/' . Carbon::now()->timestamp . '-' . mt_rand(0, 99999) . '-' . md5($fileName[0]) . "." . $fileName[1];
  252. //dd($path);
  253. $img = Image::make($item)->resize(748, 506, function ($constraint) {
  254. $constraint->aspectRatio();
  255. $constraint->upsize();
  256. })->resizeCanvas(748, 506);
  257. //canvas(null, 506, '#ffffff');
  258.  
  259. $img = (string)$img->encode('jpg', 90);
  260. Storage::cloud()->put($path, $img, 'public');
  261. array_push($arrURLS, Storage::cloud()->url($path));
  262. }
  263. return $arrURLS;
  264. }
  265.  
  266.  
  267. public function addVideo($video_Code)
  268. {
  269.  
  270. if ($video_Code != null) {
  271.  
  272. $urlYT = $video_Code;
  273. $urlYT = str_replace('=', '/', $urlYT);
  274. //Si la longitud es > a 35 es una URL larga.
  275. if (strlen($urlYT) > 35) {
  276. $videoProvider = explode('.', $urlYT)[1];
  277. } else {
  278. $videoProvider = explode('.', $urlYT)[0];
  279. if ($videoProvider == 'https://youtu') {
  280. $videoProvider = 'youtube';
  281. }
  282.  
  283. //Si no pues no cojo el video de youtube
  284. }
  285. //Si no es YouTube de momento no hace nada.
  286. if ($videoProvider == 'youtube') {
  287.  
  288. //Si es > que 28 es una URL Larga tipo /watch?v=UpSslxCGJI4
  289. if (strlen($urlYT) > 35) {
  290. //Explode convierte una string en un array según el delimitador por ende corresponde a la pos 4
  291. $videoCode = explode('/', $urlYT)[4];
  292. } else { //Opcion corta tipo https://www.youtube.com/UpSslxCGJI4
  293. $videoCode = explode('/', $urlYT)[3];
  294. }
  295. $arrCamposValidos['video_code'] = $videoCode;
  296. $arrCamposValidos['video_provider'] = $videoProvider;
  297. return $arrCamposValidos;
  298. }
  299.  
  300. }
  301.  
  302. return false;
  303.  
  304.  
  305. }
  306.  
  307. /*
  308. * ###############################################
  309. * #######FUNCION OBTENER RECURSOS PRIVADO########
  310. * ###############################################
  311. */
  312.  
  313.  
  314. public function getRecursosUser(Request $request)
  315. {
  316.  
  317. try {
  318.  
  319. //Validamos tanto el id del usario como el email.
  320. $idUsuario = $request->get('user_id');
  321. $email = $request->get('email');
  322. $existsUser = User::where('id', $idUsuario)->where('email', $email)->first();
  323. if ($existsUser == null) {
  324. return response()->json(["message" => "No se encontró ningún usuario", "state" => "USER_NOT_FOUND"], 401);
  325. }
  326.  
  327. //$tusRecursos = DB::table('listings')->select('id','user_id')->where('user_id', $idUsuario)->get();
  328.  
  329. $tusRecursos = Listing::select('id', 'user_id')->where('user_id', $idUsuario)->where('deleted_at', null)->get();
  330. if ($tusRecursos == null) {
  331. return response()->json(["message" => "El usuario $existsUser->name no tiene recursos creados.", "state" => "ERROR"], 201);
  332. }
  333.  
  334. $arrRecursos = [];
  335. foreach ($tusRecursos as $item) {
  336. array_push($arrRecursos, $this->getDatos($item->id, $item->user_id));
  337. }
  338.  
  339. $arrRecursos = array_filter($arrRecursos);
  340.  
  341. return response()->json(["message" => "Recursos de $existsUser->name listados correctamente.", "state" => "OK", "data" => $arrRecursos], 201);
  342.  
  343. } catch (\Exception $exception) {
  344.  
  345. return response()->json(["message" => "Hubo un problema al encontrar los recursos en la base de datos.", "state" => "ERROR", "Exception" => htmlentities($exception)], 401);
  346.  
  347. }
  348.  
  349.  
  350. }
  351.  
  352. public function getDatos($listing_id, $user_id, User $ownUser = null)
  353. {
  354.  
  355. try {
  356.  
  357. //$lbd = DB::table('listings')->where('id', $listing_id)->first();
  358. $lbd = Listing::where('id', $listing_id)->first();
  359.  
  360. //DB::select('SELECT * FROM users WHERE id = :id ', ['id' => $lbd[0]->user_id]);
  361.  
  362. if ($lbd != null) {
  363.  
  364. $autor = User::where('id', $user_id)->first();
  365. //$lThanks = DB::table('listing_thanks')->where('id_listing', $listing_id)->where('id_user', $user_id)->first();
  366. //$notes = DB::table('notes')->where('listing_id', $listing_id)->where('user_id',$user_id )->get();
  367. //Obtenemos el objeto del recurso Listing::where('id', $listing_id)->first();
  368. $listingRecurso = $lbd;
  369. if ($listingRecurso != null) {
  370.  
  371. $listingURL = $listingRecurso->getUrlAttribute();
  372. $listingIMG = $listingRecurso->getImagesAttribute(true);
  373. $listingDaysAgo = $listingRecurso->getDaysAgoAttribute();
  374. $listingShortDesc = $listingRecurso->getShortDescriptionAttribute();
  375. $obj = new \stdClass();
  376. if ($listingRecurso->is_private == 0) {
  377. $obj->is_private = false;
  378. } else if ($listingRecurso->is_private == 1) {
  379. $obj->is_private = true;
  380. }
  381.  
  382. if ($listingRecurso->is_published == 0) {
  383. $obj->is_published = false;
  384. } else if ($listingRecurso->is_published == 1) {
  385. $obj->is_published = true;
  386. }
  387.  
  388. $obj->id = $listing_id;
  389. $obj->url = $listingURL;
  390. $obj->title = $lbd->title;
  391. $obj->shortDesc = $listingShortDesc;
  392. $obj->longDesc = $lbd->description;
  393. $obj->slug = $lbd->slug;
  394. $obj->img = $listingIMG;
  395. $obj->daysAgo = $listingDaysAgo;
  396. $obj->numThanks = $lbd->thanks;
  397. //Obtener el video sea cual sea su proveedor.
  398. $urlYT = $listingRecurso->getVideoURL();
  399. if ($urlYT == false) {
  400. $obj->urlVideo = null;
  401. } else {
  402. $obj->urlVideo = $urlYT;
  403. }
  404.  
  405. //Depende de si le pasamos o no nuestro usuario, hara una cosa u otra.
  406. if ($ownUser != null) {
  407. //Si le introducimos nuestro propio usuario, se nos proporciona la info de nuestro usuario.
  408. $obj->notas = $this->getNotes($ownUser->id, $listing_id);
  409. $obj->thanks = $this->getThanks($listing_id, $ownUser->id);
  410. $obj->lassignId = $this->getLassignId($listing_id, $ownUser->id);
  411. $obj->moveList = $this->getMoveList($ownUser->id);
  412. } else {
  413. $obj->notas = $this->getNotes($user_id, $listing_id);;
  414. $obj->thanks = $obj->thanks = $this->getThanks($listing_id, $user_id);
  415. }
  416.  
  417.  
  418. if ($autor != null) {
  419.  
  420. $obj->username = $autor->username;
  421. $obj->username_slug = $autor->slug;
  422. //Cuando la fase de desarrollo de movil este mergeada a mastes estas dos propiedades serán eliminadas.
  423. $obj->autor = $this->getAutor($autor);
  424.  
  425. } else {
  426. $obj->username = null;
  427. $obj->username_slug = null;
  428. }
  429.  
  430. $obj->numVisitas = $lbd->views_count;
  431. $obj->contFavoritos = $this->contFavoritos($lbd);
  432. $obj->formato = $this->getFormato($lbd->pricing_model_id);
  433. //Fuentes
  434.  
  435. $obj->fonts = $this->getFonts($listingRecurso->getFonts());
  436. $categories = $this->getCategoriesFromResource($listingRecurso);
  437. if ($categories == false) {
  438. $obj->categories = null;
  439. } else {
  440. $obj->categories = $categories;
  441. }
  442. return $obj;
  443. }
  444. }
  445.  
  446. } catch (\Exception $exception) {
  447. //dd($exception);
  448. return response()->json(["message" => "Hubo un problema al encontrar los recursos en la base de datos.", "state" => "ERROR", "Exception" => htmlentities($exception)], 401);
  449.  
  450. }
  451. }
  452.  
  453. private function getAutor(User $autor)
  454. {
  455.  
  456. $obj = new \stdClass();
  457. $obj->autor_id = $autor->id;
  458. $obj->avatar = $autor->getAvatarAttribute();
  459. $obj->username = $autor->username;
  460. $obj->username_slug = $autor->slug;
  461. $obj->firstName = $autor->first_name();
  462. $obj->poblacion = $autor->getPoblacion();
  463. $creado = $autor->created_at;
  464. $obj->created_at = (string) $creado;
  465.  
  466. return $obj;
  467. }
  468.  
  469.  
  470.  
  471.  
  472. private function contFavoritos(Listing $recurso)
  473. {
  474.  
  475. if ($recurso->favourite_count <= 0 || $recurso == null) {
  476. return null;
  477. } else {
  478. return $recurso->favourite_count;
  479. }
  480.  
  481. }
  482.  
  483. private function getLassignId($recurso_id, $user_id)
  484. {
  485. $estoyEnUnaLista = DB::table('listing_assign')->where([
  486. "user_id" => $user_id,
  487. "listing_id" => $recurso_id
  488. ])->first();
  489.  
  490. if ($estoyEnUnaLista == null) {
  491. return null;
  492. } else {
  493. return $estoyEnUnaLista->id;
  494. }
  495. }
  496.  
  497. private function getThanks($listing_id, $user_id)
  498. {
  499.  
  500. $lThanks = DB::table('listing_thanks')->where('id_listing', $listing_id)->where('id_user', $user_id)->first();
  501.  
  502. if ($lThanks != null) {
  503. return true;
  504. } else {
  505. return false;
  506. }
  507.  
  508. }
  509.  
  510. public static function getMoveList($user_id)
  511. {
  512.  
  513. //Obtenemos todas las listas que tienes creadas
  514.  
  515. $arrListas = DB::table('resource_list')->where('user_id', $user_id)->first();
  516. //Si ha encontrado algo entro en la condición
  517. if (!empty($arrListas)) {
  518.  
  519. //Asigno lo que he encontrado en dicha variable.
  520. $contenido = $arrListas->arrayListas;
  521. if ($contenido != null) {
  522. //Como esta "protegido" es decir serializado, lo deserializo para poder administrar su contenido.
  523. $contenido = unserialize($contenido);
  524. //Obtengo el nombre de las listas
  525. $contenido = array_keys($contenido);
  526.  
  527. return $contenido;
  528. }
  529. }
  530. return false;
  531. }
  532.  
  533.  
  534. private function getFormato($id)
  535. {
  536.  
  537. //Es el id de pricing_model_id
  538.  
  539. $formato = DB::table('pricing_models')->select('name')->where('id', $id)->first();
  540.  
  541. if ($formato != null) {
  542. return $formato->name;
  543. } else {
  544. return null;
  545. }
  546.  
  547.  
  548. }
  549.  
  550. private function getNotes($idUsuario, $listing_id)
  551. {
  552.  
  553. $notes = DB::table('notes')->where('user_id', $idUsuario)->where('listing_id', $listing_id)->first();
  554.  
  555. if ($notes != null) {
  556. if ($notes->text != '<p><br></p>') {
  557. return $notes;
  558. }
  559. } else {
  560. return null;
  561. }
  562.  
  563. }
  564.  
  565. /*
  566. * Método que crea un array de todas las fuentes que posee la base de datos.
  567. */
  568. public function getFonts($font)
  569. {
  570.  
  571. if ($font != null) {
  572.  
  573. $arrFonts = [];
  574.  
  575. foreach ($font as $item) {
  576.  
  577. $fuente = DB::table('listing_font')->where('id', $item)->first();
  578. $obj = new \stdClass();
  579. $obj->name = $fuente->name;
  580. $obj->slug = $fuente->slug;
  581. $obj->link = $fuente->link;
  582. $obj->bio = $fuente->bio;
  583. $obj->avatar = $fuente->photo;
  584. $obj->gender = $fuente->gender;
  585. array_push($arrFonts, $obj);
  586.  
  587. }
  588. if (!empty($arrFonts)) {
  589. return $arrFonts;
  590. }
  591. }
  592.  
  593. return null;
  594.  
  595. }
  596.  
  597. //Obtener las categorias a las que pertenece el recurso
  598.  
  599. public function getCategoriesFromResource(Listing $recurso)
  600. {
  601.  
  602. try {
  603.  
  604. //Obtenemos todas las categorias a las que esta asociado ese recurso.
  605. $categorias = $recurso->getCategories();
  606. $arrCategorias = [];
  607. if (empty($categorias) != true) {
  608.  
  609. foreach ($categorias as $item) {
  610.  
  611. $objCategories = DB::table('categories')->select('id', 'name', 'slug', 'order')->where('id', $item)->first();
  612. if ($objCategories != null) {
  613. array_push($arrCategorias, $objCategories);
  614. }
  615.  
  616. }
  617.  
  618. return $arrCategorias;
  619. }
  620.  
  621. return false;
  622.  
  623.  
  624. } catch (\Exception $exception) {
  625. return response()->json(["message" => "Hubo un problema al encontrar las categorias en la base de datos.", "state" => "ERROR", "Exception" => htmlentities($exception)], 401);
  626. }
  627.  
  628.  
  629. }
  630.  
  631. /*
  632. * #####################################################
  633. * #######FUNCION PARA EDITAR UN RECURSO PRIVADO########
  634. * #####################################################
  635. */
  636.  
  637. public function editRecursoPrivado(Request $request)
  638. {
  639. $kCARACTERES_MIN = 6;
  640. $kCARACTERES_MAX = 150;
  641.  
  642. try {
  643.  
  644. $descripcion = $request->get('description');
  645. $numPhotos = (int)$request->get('num_photos');
  646. $video_Code = $request->get('video_code');
  647. $titulo = $request->get('title');
  648. $idRecurso = $request->get('listing_id');
  649. $urlBorradas = $request->get('urlBorradas');
  650.  
  651. //Validamos tanto el id del usario como el email.
  652. $idUsuario = $request->get('user_id');
  653. $email = $request->get('email');
  654. $existsUser = User::where('id', $idUsuario)->where('email', $email)->first();
  655. if ($existsUser == null) {
  656. return response()->json(["message" => "No se encontró ningún usuario", "state" => "USER_NOT_FOUND"], 401);
  657. }
  658.  
  659. //Comprobamos que nos pasan el titulo.
  660.  
  661. //Comprobamos que el titulo sea diferente a null y que posea mas de 5 caracteres.
  662.  
  663.  
  664. if ($titulo != null) {
  665. if (strlen($titulo) < $kCARACTERES_MIN) {
  666. return response()->json(["message" => "El titulo debe ser mayor a $kCARACTERES_MIN caracteres.", "state" => "ERROR"], 401);
  667. } elseif (strlen($titulo) > $kCARACTERES_MAX) {
  668. return response()->json(["message" => "El titulo debe ser menor de $kCARACTERES_MAX caracteres.", "state" => "ERROR"], 401);
  669. }
  670. }
  671.  
  672. if ($idRecurso == null) {
  673. return response()->json(["message" => "El id del recurso no puede quedar vacio.", "state" => "ERROR"], 401);
  674. }
  675.  
  676. //Obtenemos nuestro recurso.
  677.  
  678. //Listing::where('user_id', $idUsuario)->where('title', $titulo)->first();
  679. $recurso = Listing::where([
  680. ['user_id', '=', $idUsuario],
  681. ['id', '=', $idRecurso]
  682. ])->first();
  683.  
  684. if ($recurso == null) {
  685. return response()->json(["message" => "No se encontro ningun recurso con estos datos.", "state" => "ERROR"], 401);
  686. }
  687.  
  688. if ($recurso->is_private != self::PRIVADO) {
  689. return response()->json(["message" => "El elemento que deseas editar no es un recurso privado.", "state" => "ERROR"], 401);
  690. }
  691.  
  692. //Comprobamos si son diferentes y si lo son asignamos los valores.
  693.  
  694. //Si nos pasan video de YouTube
  695.  
  696. if ($video_Code != null) {
  697. $video = $this->addVideo($video_Code);
  698. if (gettype($video) == 'array') {
  699. $recurso->video_provider = $video['video_provider'];
  700. $recurso->video_code = $video['video_code'];
  701. }
  702. } else if ($video_Code == null) {
  703. //Si no pasan video lo estan borrando
  704. $recurso->video_provider = null;
  705. $recurso->video_code = null;
  706. }
  707. //Si nos pasan un nuevo titulo
  708.  
  709. if ($titulo != null) {
  710. $recurso->title = $titulo;
  711. }
  712.  
  713. //Si nos pasan una nueva descripción, si no esta vacio y no es null lo actualizamos.
  714. //En cambio si esta " ", la cadena será vaciada.
  715. $recurso->description = $descripcion;
  716.  
  717.  
  718. //Si nos pasan un array para borrar fotos
  719.  
  720. if ($urlBorradas != null || !empty($urlBorradas)) {
  721.  
  722. $arrURLFotos = []; //Se lo asigno a una var auxiliar para no trbajar sobre los valores de la bbdd directamente.
  723. $arrFormateada = [];
  724.  
  725. if ($recurso->photos != null) {
  726. foreach ($recurso->photos as $item) {
  727.  
  728. if (stripos($item, '/s3.') == false) {
  729. //Generamos una URL correcta
  730. array_push($arrURLFotos, substr($item, stripos($item, '/storage')));
  731. } else {
  732. //Le pasamos al array la misma URL de la imagen sin modificar.
  733. array_push($arrURLFotos, $item);
  734. }
  735. }
  736. }
  737.  
  738. //Una vez quitado el dominio de los enlaces de la base de datos
  739.  
  740. foreach ($urlBorradas as $item) {
  741.  
  742. if ($item != null) {
  743.  
  744. //Solo accedemos si la URL no es S3 Amazon.
  745. if (stripos($item, '/s3.') == false) {
  746. // Solo se accede a esta condición, si la imagen no es de los servidores de AMAZON.
  747. $urlCorrecta = substr($item, 9);
  748. $urlCorrecta = 'public/' . $urlCorrecta;
  749. $exists = Storage::disk()->exists($urlCorrecta);
  750. //EXISTE?
  751. if ($exists == true) {
  752. $isEliminado = Storage::disk()->delete($urlCorrecta); //Si existe lo elimino del disco y del array de imagenes.
  753. if ($isEliminado) { //Si esta bien eliminado lo quitamos del array photos
  754. $nArray = array_search($item, $arrURLFotos);
  755. //Si array_search encuentra el valor devuelve su posicion por lo tanto si es diferente de false
  756. //eliminamos del array dicha URL
  757. if ($nArray !== false) {
  758. //unset($arrFotos[$nArray]);
  759. $arrURLFotos[$nArray] = null;
  760. }
  761. }
  762.  
  763. //FIN SI EXISTE
  764. } else { //Si no existe
  765.  
  766. //Comprobamos en la base de datos si existe ese campo, si existe
  767. //Como en el sistema no se ha encontrado ese archivo lo eliminamos del array.
  768. $nArray = array_search($item, $arrURLFotos);
  769. //hay que validad el tipo por que 0 me lo estab cogiendo como un false booleano.
  770. if ($nArray !== false) {
  771. $arrURLFotos[$nArray] = null;
  772. }
  773. }
  774. } //FIN - 1st IF - Solo se accede a esta condición, si la imagen no es de los servidores de AMAZON.
  775. else {
  776. //Si la IMAGEN es de AMAZON?
  777. $exists = Storage::disk()->exists($item);
  778. //EXISTE?
  779. if ($exists == true) {
  780. $isEliminado = Storage::disk()->delete($item); //Si existe lo elimino del disco y del array de imagenes.
  781. if ($isEliminado) { //Si esta bien eliminado lo quitamos del array photos
  782. $nArray = array_search($item, $arrURLFotos);
  783. //Si array_search encuentra el valor devuelve su posicion por lo tanto si es diferente de false
  784. //eliminamos del array dicha URL
  785. if ($nArray !== false) {
  786. //unset($arrFotos[$nArray]);
  787. $arrURLFotos[$nArray] = null;
  788. }
  789. }
  790.  
  791. //FIN SI EXISTE
  792. } else { //Si no existe
  793.  
  794. //Comprobamos en la base de datos si existe ese campo, si existe
  795. //Como en el sistema no se ha encontrado ese archivo lo eliminamos del array.
  796. $nArray = array_search($item, $arrURLFotos);
  797. //hay que validad el tipo por que 0 me lo estab cogiendo como un false booleano.
  798. if ($nArray !== false) {
  799. $arrURLFotos[$nArray] = null;
  800. }
  801. }
  802. }
  803.  
  804. } //FIN ITEM DIFERENTE A NULL
  805.  
  806. } //FIN FOREACH
  807.  
  808. //Quitamos todos los null de la array
  809. foreach ($arrURLFotos as $item) {
  810. if ($item != null) {
  811. if (stripos($item, '/s3.') == false) {
  812. $url = $this->header . $item;
  813. } else {
  814. $url = $item;
  815. }
  816.  
  817. array_push($arrFormateada, $url);
  818. }
  819. }
  820.  
  821. $recurso->photos = $arrFormateada;
  822. //Guardamos para que surja efecto.
  823. $recurso->save();
  824. }
  825.  
  826. //Si nos pasan nuevas fotografias.
  827.  
  828. if ($numPhotos != null) {
  829. if ($numPhotos > 0 && $numPhotos < 11) {
  830.  
  831. //Contamos todas las imagenes que tiene hay en la base de datos si el numero que quiere subir mas las que ya hay super el maximo error.
  832. //Si es diferente a null, contamos las imagenes si no es tonteria por que significa que no hay.
  833. if ($recurso->photos != null) {
  834. $contImages = count($recurso->photos) + $numPhotos;
  835. } else {
  836. $contImages = 0;
  837. }
  838.  
  839. if ($contImages < 0 || $contImages > 10) {
  840. return response()->json(["message" => "El numero de imagenes que deseas subir, supera el maximo establecido de 10 imagenes por recurso.", "state" => "ERROR"], 401);
  841. }
  842. $arrURLS = $this->loadIMG($request);
  843. if (is_array($recurso->photos)) { //Es una array
  844. $recurso->photos = array_merge($recurso->photos, $arrURLS);
  845. } else { //No es una array?
  846. $recurso->photos = $arrURLS;
  847. }
  848. } else {
  849. return response()->json(["message" => "El numero de imagenes tiene que estar comprendido entre 1 y 10.", "state" => "ERROR"], 401);
  850. }
  851. }
  852.  
  853.  
  854. $recurso->save();
  855. $recurso = $this->getDatos($recurso->id, $recurso->user_id);
  856. return response()->json(["message" => "Recurso editado correctamente!", "state" => "OK", "data" => $recurso], 201);
  857.  
  858. } catch (\Exception $exception) {
  859.  
  860. return response()->json(["message" => "Hubo un problema al editar el recurso en la base de datos.", "state" => "ERROR", "Exception" => htmlentities($exception)], 401);
  861.  
  862. }
  863.  
  864. }
  865.  
  866. public function ResourceWithMoreThanks()
  867. {
  868.  
  869. try {
  870.  
  871. //Los 3 recursos con maas me gustas
  872. $recursos = DB::table('listings')->select('id', 'user_id', 'is_published')->where('is_published', true)->orderByDesc('thanks')->limit($this->recursosXlista)->get();
  873. $arrRecursos = [];
  874. foreach ($recursos as $item) {
  875. $arrRes = $this->getDatos($item->id, $item->user_id);
  876. if ($arrRes != null) {
  877. array_push($arrRecursos, $arrRes);
  878. }
  879.  
  880. }
  881.  
  882. return response()->json(["message" => "Recursos con mas gracias listados correctamente", "state" => "OK", "data" => $arrRecursos], 201);
  883.  
  884. } catch (\Exception $exception) {
  885.  
  886.  
  887. return response()->json(["message" => "Hubo un problema y no se pudieron obtener los recursos con mas gracias de la base de datos.", "state" => "ERROR", "Exception" => htmlentities($exception)], 401);
  888.  
  889.  
  890. }
  891.  
  892. }
  893.  
  894.  
  895. public function ResourceWithMoreViews()
  896. {
  897.  
  898. try {
  899.  
  900. //Los 3 recursos con maas me gustas
  901. $recursos = DB::table('listings')->select('id', 'user_id', 'is_published')->where('is_published', true)->orderByDesc('views_count')->limit($this->recursosXlista)->get();
  902. $arrRecursos = [];
  903. foreach ($recursos as $item) {
  904. $arrRes = $this->getDatos($item->id, $item->user_id);
  905. if ($arrRes != null) {
  906. array_push($arrRecursos, $arrRes);
  907. }
  908.  
  909. }
  910.  
  911. return response()->json(["message" => "Recursos mas vistos listados correctamente", "state" => "OK", "data" => $arrRecursos], 201);
  912.  
  913. } catch (\Exception $exception) {
  914.  
  915. return response()->json(["message" => "Hubo un problema y no se pudieron obtener los recursos con mas gracias de la base de datos.", "state" => "ERROR", "Exception" => htmlentities($exception)], 401);
  916.  
  917.  
  918. }
  919.  
  920. }
  921.  
  922. public function ResourceWithFauvorites()
  923. {
  924.  
  925. try {
  926.  
  927. //Los 3 recursos con maas me gustas
  928. //$recursos = DB::select('SELECT listing_id, user_id, COUNT(listing_id) AS Recursos FROM listing_assign GROUP BY listing_id ORDER BY Recursos DESC LIMIT ?;', [$this->recursosXlista]);
  929. $recursos = DB::table('listings')->select('id', 'user_id', 'favourite_count')->groupBy('id')->orderByDesc('favourite_count')->limit($this->recursosXlista)->get();
  930. $arrRecursos = [];
  931. foreach ($recursos as $item) {
  932. $arrRes = $this->getDatos($item->id, $item->user_id);
  933. if ($arrRes != null) {
  934. array_push($arrRecursos, $arrRes);
  935. }
  936. }
  937.  
  938. return response()->json(["message" => "Recursos mas vistos listados correctamente", "state" => "OK", "data" => $arrRecursos], 201);
  939.  
  940. } catch (\Exception $exception) {
  941.  
  942. return response()->json(["message" => "Hubo un problema y no se pudieron obtener los recursos con mas gracias de la base de datos.", "state" => "ERROR", "Exception" => htmlentities($exception)], 401);
  943.  
  944.  
  945. }
  946.  
  947. }
  948.  
  949. public function ResourceMoreNews()
  950. {
  951.  
  952. try {
  953.  
  954. //Los recursos con maas me nuevos
  955. $recursos = DB::table('listings')->select('id', 'user_id', 'is_published')->where('is_published', true)->orderByDesc('created_at')->limit($this->recursosXlista)->get();
  956. $arrRecursos = [];
  957. foreach ($recursos as $item) {
  958. $arrRes = $this->getDatos($item->id, $item->user_id);
  959. if ($arrRes != null) {
  960. array_push($arrRecursos, $arrRes);
  961. }
  962.  
  963. }
  964.  
  965. return response()->json(["message" => "Los recursos mas nuevos listados correctamente", "state" => "OK", "data" => $arrRecursos], 201);
  966.  
  967. } catch (\Exception $exception) {
  968.  
  969. return response()->json(["message" => "Hubo un problema y no se pudieron obtener los recursos con mas gracias de la base de datos.", "state" => "ERROR", "Exception" => htmlentities($exception)], 401);
  970.  
  971.  
  972. }
  973.  
  974. }
  975.  
  976. public function removeResources(Request $request)
  977. {
  978.  
  979. try {
  980. $idRecurso = $request->get('listing_id');
  981. $idUsuario = $request->get('user_id');
  982. $email = $request->get('email');
  983. $existsUser = User::where('id', $idUsuario)->where('email', $email)->first();
  984. if ($existsUser == null) {
  985. return response()->json(["message" => "No se encontró ningún usuario", "state" => "USER_NOT_FOUND"], 401);
  986. }
  987. if ($idRecurso == null) {
  988. return response()->json(["message" => "El id del recurso no puede quedar vacio.", "state" => "ERROR"], 401);
  989. }
  990.  
  991. //Obtenemos nuestro recurso.
  992.  
  993. //Listing::where('user_id', $idUsuario)->where('title', $titulo)->first();
  994. $recurso = Listing::where([
  995. ['user_id', '=', $idUsuario],
  996. ['id', '=', $idRecurso]
  997. ])->first();
  998.  
  999. if ($recurso == null) {
  1000. return response()->json(["message" => "No se encontro ningun recurso con estos datos.", "state" => "ERROR"], 401);
  1001. }
  1002.  
  1003. //Al ponerle una fecha en el eliminado el, automaticamente aparecera como oculto.
  1004. $recurso->deleted_at = Carbon::now();
  1005. $recurso->save();
  1006. return response()->json(["message" => "Recurso borrado correctamente.", "state" => "OK"], 201);
  1007.  
  1008.  
  1009. } catch (\Exception $exception) {
  1010.  
  1011. //dd($exception);
  1012. return response()->json(["message" => "Hubo un problema y no se pudo eliminar el recurso.", "state" => "ERROR", "Exception" => htmlentities($exception)], 401);
  1013.  
  1014. }
  1015.  
  1016. }
  1017.  
  1018.  
  1019. //##########################################
  1020. //##METODOS#PARA#IR#PROBANDO#EN#DESARROLLO##
  1021. //##########################################
  1022.  
  1023. public function ResourceWithMoreThanks_dev(Request $request)
  1024. {
  1025.  
  1026. try {
  1027.  
  1028. $idUsuario = $request->get('user_id');
  1029. $email = $request->get('email');
  1030. $existsUser = User::where('id', $idUsuario)->where('email', $email)->first();
  1031. if ($existsUser == null) {
  1032. return response()->json(["message" => "No se encontró ningún usuario", "state" => "USER_NOT_FOUND"], 401);
  1033. }
  1034. //Los 3 recursos con maas me gustas
  1035. $recursos = DB::table('listings')->select('id', 'user_id', 'is_published')->where('is_published', true)->orderByDesc('thanks')->limit($this->recursosXlista)->get();
  1036. $arrRecursos = [];
  1037. foreach ($recursos as $item) {
  1038. $arrRes = $this->getDatos($item->id, $item->user_id, $existsUser);
  1039. if ($arrRes != null) {
  1040. array_push($arrRecursos, $arrRes);
  1041. }
  1042.  
  1043. }
  1044.  
  1045. return response()->json(["message" => "Recursos con mas gracias listados correctamente", "state" => "OK", "data" => $arrRecursos], 201);
  1046.  
  1047. } catch (\Exception $exception) {
  1048.  
  1049.  
  1050. return response()->json(["message" => "Hubo un problema y no se pudieron obtener los recursos con mas gracias de la base de datos.", "state" => "ERROR", "Exception" => $exception], 401);
  1051.  
  1052.  
  1053. }
  1054.  
  1055. }
  1056.  
  1057.  
  1058. public function ResourceWithMoreViews_dev(Request $request)
  1059. {
  1060.  
  1061. try {
  1062.  
  1063. $idUsuario = $request->get('user_id');
  1064. $email = $request->get('email');
  1065. $existsUser = User::where('id', $idUsuario)->where('email', $email)->first();
  1066. if ($existsUser == null) {
  1067. return response()->json(["message" => "No se encontró ningún usuario", "state" => "USER_NOT_FOUND"], 401);
  1068. }
  1069. //Los 3 recursos con maas me gustas
  1070. $recursos = DB::table('listings')->select('id', 'user_id', 'is_published')->where('is_published', true)->orderByDesc('views_count')->limit($this->recursosXlista)->get();
  1071. $arrRecursos = [];
  1072. foreach ($recursos as $item) {
  1073. $arrRes = $this->getDatos($item->id, $item->user_id, $existsUser);
  1074. if ($arrRes != null) {
  1075. array_push($arrRecursos, $arrRes);
  1076. }
  1077.  
  1078. }
  1079.  
  1080. return response()->json(["message" => "Recursos mas vistos listados correctamente", "state" => "OK", "data" => $arrRecursos], 201);
  1081.  
  1082. } catch (\Exception $exception) {
  1083.  
  1084. return response()->json(["message" => "Hubo un problema y no se pudieron obtener los recursos con mas gracias de la base de datos.", "state" => "ERROR", "Exception" => $exception], 401);
  1085.  
  1086.  
  1087. }
  1088.  
  1089. }
  1090.  
  1091. public function ResourceWithFauvorites_dev(Request $request)
  1092. {
  1093.  
  1094. try {
  1095.  
  1096. $idUsuario = $request->get('user_id');
  1097. $email = $request->get('email');
  1098. $existsUser = User::where('id', $idUsuario)->where('email', $email)->first();
  1099. if ($existsUser == null) {
  1100. return response()->json(["message" => "No se encontró ningún usuario", "state" => "USER_NOT_FOUND"], 401);
  1101. }
  1102. //Los 3 recursos con maas me gustas
  1103. //$recursos = DB::select('SELECT listing_id, user_id, COUNT(listing_id) AS Recursos FROM listing_assign GROUP BY listing_id ORDER BY Recursos DESC LIMIT ?;', [$this->recursosXlista]);
  1104. $recursos = DB::table('listings')->select('id', 'user_id', 'favourite_count')->groupBy('id')->orderByDesc('favourite_count')->limit($this->recursosXlista)->get();
  1105. $arrRecursos = [];
  1106. foreach ($recursos as $item) {
  1107. $arrRes = $this->getDatos($item->id, $item->user_id, $existsUser);
  1108. if ($arrRes != null) {
  1109. array_push($arrRecursos, $arrRes);
  1110. }
  1111. }
  1112.  
  1113. return response()->json(["message" => "Recursos mas vistos listados correctamente", "state" => "OK", "data" => $arrRecursos], 201);
  1114.  
  1115. } catch (\Exception $exception) {
  1116.  
  1117. return response()->json(["message" => "Hubo un problema y no se pudieron obtener los recursos con mas gracias de la base de datos.", "state" => "ERROR", "Exception" => $exception], 401);
  1118.  
  1119.  
  1120. }
  1121.  
  1122. }
  1123.  
  1124. public function ResourceMoreNews_dev(Request $request)
  1125. {
  1126.  
  1127. try {
  1128.  
  1129. $idUsuario = $request->get('user_id');
  1130. $email = $request->get('email');
  1131. $existsUser = User::where('id', $idUsuario)->where('email', $email)->first();
  1132. if ($existsUser == null) {
  1133. return response()->json(["message" => "No se encontró ningún usuario", "state" => "USER_NOT_FOUND"], 401);
  1134. }
  1135. //Los recursos con maas me nuevos
  1136. $recursos = DB::table('listings')->select('id', 'user_id', 'is_published')->where('is_published', true)->orderByDesc('created_at')->limit($this->recursosXlista)->get();
  1137. $arrRecursos = [];
  1138. foreach ($recursos as $item) {
  1139. $arrRes = $this->getDatos($item->id, $item->user_id, $existsUser);
  1140. if ($arrRes != null) {
  1141. array_push($arrRecursos, $arrRes);
  1142. }
  1143.  
  1144. }
  1145.  
  1146. return response()->json(["message" => "Los recursos mas nuevos listados correctamente", "state" => "OK", "data" => $arrRecursos], 201);
  1147.  
  1148. } catch (\Exception $exception) {
  1149.  
  1150. return response()->json(["message" => "Hubo un problema y no se pudieron obtener los recursos con mas gracias de la base de datos.", "state" => "ERROR", "Exception" => $exception], 401);
  1151.  
  1152.  
  1153. }
  1154.  
  1155. }
  1156.  
  1157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement