src/Controller/ImageController.php line 18

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\JsonResponse;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use App\Entity\Configuration;
  8. use CURLFile;
  9. use App\Services\PrestaShopWebservice;
  10. use App\Services\PrestaShopWebserviceException;
  11. class ImageController extends AbstractController
  12. {
  13.     public function export(Request $request)
  14.     {
  15.         // if ($request->isXmlHttpRequest()) {
  16.             $config $this->getDoctrine()->getRepository(Configuration::class)->findAll()[0];
  17.             try {
  18.                 $ws = new PrestaShopWebservice($config->getToApiUrl(), $config->getToApiKey());
  19.                 $opt = array(
  20.                     'resource' => 'products',
  21.                     'display' => 'full'
  22.                 );
  23.                 $productos $ws->get($opt);
  24.                 if ($productos) {
  25.                     $ftp_server "ksixmobile.com";
  26.                     $ftp_user "ksix_user_ftp";
  27.                     $ftp_pass "s_N2noQuS2";
  28.                     $path_ftp "/web/img/web/";
  29.                     // establecer conexión FTP o finalizarla
  30.                     $conexionFtp ftp_connect($ftp_server) or die("No se pudo conectar a $ftp_server");
  31.                     $resutadoLogin ftp_login($conexionFtp$ftp_user$ftp_pass) or die("no logueado");
  32.                     $modopasivo ftp_pasv($conexionFtptrue);
  33.                     $ficheros ftp_nlist($conexionFtp$path_ftp);
  34.                     $ficheros array_diff($ficheros, array("."".."));
  35.                     // // ORDENO $FICHEROS POR ORDEN ALFABETICO
  36.                     sort($ficheros);
  37.                     $estructura '<h2>Carpeta contenedora de Fotos: ' $path_ftp '<br/>Listado de archivos</h2>';
  38.                     $estructura .= '<ul>';
  39.                     // array bidimensional $FICHEROS_CORTADOS donde voy a guardar referencia y número
  40.                     $ficheros_cortados = array();
  41.                     for ($i 0$i count($ficheros); $i++) {
  42.                         if (strpos($ficheros[$i], "_") !== false) {
  43.                             $cortado explode('_'$ficheros[$i]);
  44.                             $sku $cortado[0];
  45.                             if (count($cortado) == 3) {
  46.                                 $letra $cortado[1];
  47.                                 $cortadoextension explode('.'$cortado[2]);
  48.                                 $numerofoto $cortadoextension[0];
  49.                                 $extension $cortadoextension[1];
  50.                             } else {
  51.                                 $letra '';
  52.                                 $cortadoextension explode('.'$cortado[1]);
  53.                                 $numerofoto $cortadoextension[0];
  54.                                 $extension $cortadoextension[1];
  55.                             }
  56.                         } else {
  57.                             $letra '';
  58.                             $numerofoto '';
  59.                             $cortadoextension explode('.'$ficheros[$i]);
  60.                             $sku $cortadoextension[0];
  61.                             $extension $cortadoextension[1];
  62.                         }
  63.                         $ficheros_cortados[$i][0] = $sku// cogemos la referencia
  64.                         $ficheros_cortados[$i][1] = $letra;  // cogemos la letra intermedia
  65.                         $ficheros_cortados[$i][2] = $numerofoto;  // cogemos el número de la foto
  66.                         $ficheros_cortados[$i][3] = $extension;  // cogemos la extensión
  67.                     }
  68.                     // Por cada producto extraido del Prestashop
  69.                     // compruebo si hay fotos en el FTP para eliminarlas en PRESTASHOP
  70.                     // y almaceno las referencias en un array para luego saber cuales ha encontrado
  71.                     $array_productos = array();
  72.                     foreach ($productos->products->product as $producto) {
  73.                         // Busco la referencia del producto en el array de fichero del FTP
  74.                         echo $producto->id ': ';
  75.                         $buscar $producto->reference;
  76.                         $resultado_busqueda_fichero array_filter($ficheros_cortados, function ($item) use ($buscar) {
  77.                             return strcasecmp($buscar$item[0]) == 0;
  78.                         });
  79.                         print_r($resultado_busqueda_fichero);
  80.                         // Si no encuentro la referencia no hacemos nada
  81.                         if (empty($resultado_busqueda_fichero)) {
  82.                             //echo '';
  83.                         } else {
  84.                             // guardo la referencia del producto encontrado para poder recorrer en la subida
  85.                             // solo aquellos que ha encontrado y reducir el tiempo de ejecución
  86.                             array_push($array_productos$producto->reference);
  87.                             // Elimino las fotos que hay en PRESTASHOP
  88.                             $cadena 'images/products/' $producto->id;
  89.                             $url $config->getToApiUrl() . 'api/' $cadena '?ws_key=' $config->getToApiKey();
  90.                             $ch = @curl_init($url);
  91.                             @curl_setopt($chCURLOPT_HEADERTRUE);
  92.                             @curl_setopt($chCURLOPT_NOBODYTRUE);
  93.                             @curl_setopt($chCURLOPT_FOLLOWLOCATIONFALSE);
  94.                             @curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
  95.                             $status = array();
  96.                             preg_match('/HTTP\/.* ([0-9]+) .*/', @curl_exec($ch), $status);
  97.                             if ($status[1] == 200) {
  98.                                 // Existe la url de las imagenes del producto y procedo a eliminar
  99.                                 $opt2 = array(
  100.                                     'resource' => $cadena,
  101.                                     'display' => 'full'
  102.                                 );
  103.                                 $imagenes_del_producto $ws->get($opt2);
  104.                                 $imagen_del_producto $imagenes_del_producto->children()->children();
  105.                                 $numero_imagenes count($imagen_del_producto);
  106.                                 foreach ($imagen_del_producto as $key => $imagenes) {
  107.                                     $cadena2 'images/products/' $producto->id '/' $imagenes['id'];
  108.                                     $url2 $config->getToApiUrl() . 'api/' $cadena2 '?ws_key=' $config->getToApiKey();
  109.                                     $ch = @curl_init($url2);
  110.                                     @curl_setopt($chCURLOPT_HEADERTRUE);
  111.                                     @curl_setopt($chCURLOPT_NOBODYTRUE);
  112.                                     @curl_setopt($chCURLOPT_FOLLOWLOCATIONFALSE);
  113.                                     @curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
  114.                                     $status = array();
  115.                                     preg_match('/HTTP\/.* ([0-9]+) .*/', @curl_exec($ch), $status);
  116.                                     if ($status[1] == 200) {
  117.                                         $resultado $this->eliminar_fotos($ws$producto->id$imagenes['id']);
  118.                                     } else {
  119.                                         echo 'parece que no encuentra: ' $url2 '<br/>';
  120.                                     }
  121.                                 }
  122.                             } else {
  123.                                 echo ' no existe la url, porque no tiene fotos en prestashop<br/>';
  124.                             }
  125.                         }
  126.                     }
  127.                     echo var_dump($array_productos);
  128.                     // Almaceno las fotos que hay en el FTP haciendo un filtrado en el webservice por Referencia
  129.                     $referencia_anterior '';
  130.                     $longitud count($ficheros_cortados);
  131.                     $contador_general 1;
  132.                     for ($i 0$i $longitud$i++) {
  133.                         if ($referencia_anterior <> $ficheros_cortados[$i][0]) {
  134.                             $referencia_anterior $ficheros_cortados[$i][0];
  135.                             $buscar $ficheros_cortados[$i][0];
  136.                             $resultado_busqueda_fichero array_filter($array_productos, function ($item) use ($buscar) {
  137.                                 return strcasecmp($buscar$item[0]) == 0;
  138.                             });
  139.                             if (empty($resultado_busqueda_fichero)) {
  140.                                 $paso 0;
  141.                             } else {
  142.                                 $opt2 = array(
  143.                                     'resource' => 'products',
  144.                                     'display' => 'full',
  145.                                     'filter[reference]' => $ficheros_cortados[$i][0]
  146.                                 );
  147.                                 $productos_filtrados $ws->get($opt2);
  148.                                 $producto_filtrado $productos_filtrados->products->product;
  149.                                 $numero_productos count($producto_filtrado);
  150.                                 if ($numero_productos 0) {
  151.                                     //$respuesta_tpl .= '<br><strong>' . $producto_filtrado->reference . '</strong><br/>';
  152.                                     $paso 1;
  153.                                     //$respuesta_tpl .= 'Existe el producto en prestashop<br/>';
  154.                                 } else {
  155.                                     $paso 0;
  156.                                     echo $contador_general ': <strong>' $ficheros_cortados[$i][0] . '</strong>: ';
  157.                                     echo 'NO EXISTE el producto en prestashop. No se sube la foto.<br/>';
  158.                                     $contador_general++;
  159.                                 }
  160.                             }
  161.                         }
  162.                         if ($paso == 1) {
  163.                             $fichero_montado $ficheros_cortados[$i][0];
  164.                             if (strlen($ficheros_cortados[$i][1]) > 0) {
  165.                                 $fichero_montado .= '_' $ficheros_cortados[$i][1];
  166.                             }
  167.                             if (strlen($ficheros_cortados[$i][2]) > 0) {
  168.                                 $fichero_montado .= '_' $ficheros_cortados[$i][2];
  169.                             }
  170.                             $fichero_montado .= '.' $ficheros_cortados[$i][3];
  171.                             /*MODIFICO ESTA LINEA*/
  172.                             $resultado $this->subir_fotos($config->getToApiUrl(), $config->getToApiKey(), $producto_filtrado->id$fichero_montado$path_ftp);
  173.                             echo $contador_general ': <strong>' $fichero_montado '</strong> ' $resultado '.<br/>';
  174.                             // se borrar las fotos del ftp
  175.                             $urlfichero $path_ftp $fichero_montado;
  176.                             /*
  177.                             if (ftp_delete($conexionFtp, $urlfichero)) {
  178.                                 echo $urlfichero . ' se ha eliminado satisfactoriamente<br/>';
  179.                             } else {
  180.                                 echo 'No se pudo eliminar ' . $urlfichero;
  181.                             }*/
  182.                             // ---------------
  183.                             $contador_general++;
  184.                         }
  185.                     }
  186.                 }
  187.             } catch (PrestaShopWebserviceException $e) {
  188.                 $logFile fopen("log.txt"'a') or die("Error creando archivo");
  189.                 fwrite($logFile"\n" date("d/m/Y H:i:s") . $e->getMessage()) or die("Error escribiendo en el archivo");
  190.                 fclose($logFile);
  191.             }
  192.             // return new JsonResponse(true);
  193.             return $this->redirectToRoute('app_index');
  194.         // } else {
  195.         //     return $this->redirectToRoute('app_index');
  196.         // }
  197.     }
  198.     /**
  199.         ELIMINACION DE FOTOS
  200.         Recibe el webService, el ID del producto, el ID de la foto a eliminar
  201.      **/
  202.     public  function eliminar_fotos($ws$producto$foto)
  203.     {
  204.         $ruta_producto 'images/products/' $producto;
  205.         $xml $ws->delete(array('resource' => $ruta_producto'id' => $foto));
  206.         return $ruta_producto '/' $foto;
  207.     }
  208.     /**
  209.         SUBIDA DE FOTOS
  210.      **/
  211.     public  function subir_fotos($url$key_api$id_producto$foto$path_ftp)
  212.     {
  213.         echo "
  214.         <script>
  215.             console.log('Url: " $url "' );
  216.             console.log('Key api: " $key_api "' );
  217.             console.log('Id producto: " $id_producto "' );
  218.             console.log('Foto: " $foto "' );
  219.             console.log('Path FTP: " $path_ftp "' );
  220.         </script>
  221.         ";
  222.         echo '<br /><br />';
  223.         $urlImage $url 'api/images/products/' $id_producto;
  224.         // ubicación de la foto en el ftp
  225.         $image_path 'https://ksixmobile.com/img/web/' $foto;
  226.         $image_mime 'image/jpg';
  227.         // $imageCurl = curl_init($image_path);
  228.         // curl_setopt($imageCurl, CURLOPT_RETURNTRANSFER, 1);
  229.         // $data = curl_exec($imageCurl);
  230.         $args['image'] = new CURLFile($image_path$image_mime);
  231.         // $args['image'] = $data;
  232.         $ch curl_init();
  233.         curl_setopt($chCURLOPT_URL$urlImage);
  234.         curl_setopt($chCURLOPT_POST1);
  235.         curl_setopt($chCURLOPT_USERPWD$key_api ':');
  236.         curl_setopt($chCURLOPT_POSTFIELDS, array('image' => '@'.$image_path));
  237.         curl_setopt($chCURLOPT_RETURNTRANSFER1);
  238.         //curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
  239.         //curl_setopt($ch, CURLOPT_HEADER, 1);
  240.         //curl_setopt($ch, CURLINFO_HEADER_OUT, 1);
  241.         $result curl_exec($ch);
  242.         $httpCode curl_getinfo($chCURLINFO_HTTP_CODE);
  243.         curl_close($ch);
  244.         if (200 == $httpCode) {
  245.             $respuesta =  '<br/>Ha subido la foto correctamente. ' $image_path '<br/>';
  246.         } else {
  247.             echo 'ERROR DE CURL<br>';
  248.             var_dump(curl_error($ch));
  249.             echo 'ERROR DE PETICION<br>';
  250.             var_dump($result);
  251.             $respuesta '<br/>Error en la inserción de la foto. ' $image_path ' | ' $urlImage '<br/>';
  252.         }
  253.         return $respuesta;
  254.     }
  255. }