HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: /home/xedaptot/360.naniguide.com/services/export_vt.php
<?php
error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE & ~E_DEPRECATED);
ob_start();
session_start();
if(($_SERVER['SERVER_ADDR']==$_SESSION['demo_server_ip']) && ($_SERVER['REMOTE_ADDR']!=$_SESSION['demo_developer_ip'])) {
    //DEMO CHECK
    die();
}
ini_set("memory_limit",-1);
ini_set('max_execution_time', 9999);
ini_set('max_input_time', 9999);
require_once(__DIR__."/../db/connection.php");
require_once(__DIR__."/../backend/functions.php");
require_once(__DIR__."/Minifier.php");
use \JShrink\Minifier;
$plan_permissions = get_plan_permission($_SESSION['id_user']);
if($plan_permissions['enable_export_vt']==0) {
    ob_end_clean();
    echo json_encode(array("status"=>"error"));
    exit;
}

$settings = get_settings();
$user_info = get_user_info($_SESSION['id_user']);
if(!empty($user_info['language'])) {
    set_language($user_info['language'],$settings['language_domain']);
} else {
    set_language($settings['language'],$settings['language_domain']);
}
session_write_close();
if (!class_exists('ZipArchive')) {
    ob_end_clean();
    echo json_encode(array("status"=>"error","msg"=>_("php zip not enabled")));
    exit;
}
$id_vt = $_POST['id_virtualtour'];
$s3Client = null;
$s3_params = check_s3_tour_enabled($id_vt);
$s3_enabled = false;
$s3_bucket_name = "";
if(!empty($s3_params)) {
    $s3_bucket_name = $s3_params['bucket'];
    if($s3Client==null) {
        $s3Client = init_s3_client_no_wrapper($s3_params);
        if($s3Client==null) {
            $s3_enabled = false;
        } else {
            $s3_enabled = true;
        }
    } else {
        $s3_enabled = true;
    }
}
$code = '';
$query = "SELECT name,description,author,code,song,logo,nadir_logo,loading_background_color,background_image,background_image_mobile,background_video,background_video_mobile,intro_desktop,intro_mobile,presentation_video,dollhouse_glb,language,languages_enabled,poweredby_image FROM svt_virtualtours WHERE id=$id_vt LIMIT 1;";
$result = $mysqli->query($query);
if($result) {
    if($result->num_rows==1) {
        $row = $result->fetch_array(MYSQLI_ASSOC);
        $code = $row['code'];
        $song = $row['song'];
        $logo = $row['logo'];
        $poweredby_image = $row['poweredby_image'];
        $nadir_logo = $row['nadir_logo'];
        $background_image = $row['background_image'];
        $background_video = $row['background_video'];
        $background_image_mobile = $row['background_image_mobile'];
        $background_video_mobile = $row['background_video_mobile'];
        $intro_desktop = $row['intro_desktop'];
        $intro_mobile = $row['intro_mobile'];
        $presentation_video = $row['presentation_video'];
        if($presentation_video!='') $presentation_video = basename($presentation_video);
        $dollhouse_glb = $row['dollhouse_glb'];
        $name = $row['name'];
        $description = $row['description'];
        $author = $row['author'];
        $loading_background_color = $row['loading_background_color'];
        $vt_language = $row['language'];
        if(empty($vt_language)) $vt_language='';
        if(!empty($row['languages_enabled'])) {
            $vt_languages_enabled=json_decode($row['languages_enabled'],true);
        }
        $query_s = "SELECT language FROM svt_settings LIMIT 1;";
        $result_s = $mysqli->query($query_s);
        if($result_s) {
            if ($result_s->num_rows == 1) {
                $row_s = $result_s->fetch_array(MYSQLI_ASSOC);
                if(!empty($vt_language)) {
                    $language = $vt_language;
                } else {
                    $language = $row_s['language'];
                }
                $default_language = $language;
                if(array_key_exists($language,$vt_languages_enabled)) {
                    $vt_languages_enabled[$language]=1;
                }
            }
        }
    }
}
if(empty($code)) {
    ob_end_clean();
    echo json_encode(array("status"=>"error"));
    exit;
}
$mysqli->close();
$mysqli = new mysqli(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);
if (mysqli_connect_errno()) {
    echo mysqli_connect_error();
    exit();
}
$mysqli->query("SET NAMES 'utf8';");
if(file_exists(dirname(__FILE__)."/export_tmp/$code/")) {
    deleteDirectory(dirname(__FILE__)."/export_tmp/$code/");
}
check_directory("/export_tmp/");
check_directory("/export_tmp/$code/");
check_directory("/export_tmp/$code/www/");
check_directory("/export_tmp/$code/www/favicons/");
check_directory("/export_tmp/$code/www/favicons/v_$code");
check_directory("/export_tmp/$code/www/css/");
check_directory("/export_tmp/$code/www/css/flags_lang/");
check_directory("/export_tmp/$code/www/css/images/");
check_directory("/export_tmp/$code/www/css/font/");
check_directory("/export_tmp/$code/www/js/");
check_directory("/export_tmp/$code/www/webfonts/");
check_directory("/export_tmp/$code/www/panoramas/");
check_directory("/export_tmp/$code/www/panoramas/lowres/");
check_directory("/export_tmp/$code/www/panoramas/mobile/");
check_directory("/export_tmp/$code/www/panoramas/multires/");
check_directory("/export_tmp/$code/www/panoramas/original/");
check_directory("/export_tmp/$code/www/panoramas/preview/");
check_directory("/export_tmp/$code/www/panoramas/thumb/");
check_directory("/export_tmp/$code/www/panoramas/thumb_custom/");
check_directory("/export_tmp/$code/www/videos/");
check_directory("/export_tmp/$code/www/content/");
check_directory("/export_tmp/$code/www/gallery/");
check_directory("/export_tmp/$code/www/gallery/thumb/");
check_directory("/export_tmp/$code/www/icons/");
check_directory("/export_tmp/$code/www/maps/");
check_directory("/export_tmp/$code/www/maps/thumb/");
check_directory("/export_tmp/$code/www/media/");
check_directory("/export_tmp/$code/www/media/thumb/");
check_directory("/export_tmp/$code/www/objects360/");
check_directory("/export_tmp/$code/www/products/");
check_directory("/export_tmp/$code/www/products/thumb/");
check_directory("/export_tmp/$code/www/pointclouds/");
check_directory("/export_tmp/$code/www/vendor/");
check_directory("/export_tmp/$code/www/vendor/pdf_viewer/");
check_directory("/export_tmp/$code/www/vendor/potree/");
check_directory("/export_tmp/$code/www/ajax/");
$readme = <<<STR
Due to browser security restrictions, a web server must be used locally as well.
To see the tour you can use one of these 4 methods:
1) upload the www directory contents to a web server and access the corresponding url (http: //server.domain/folder/index.html)
2) use a local web server (like xampp, mamp, python http server, ...) and access the corresponding url (http://127.0.0.1:port/index.html)
3) the files are ready to be packaged as desktop application (mac, linux, windows) with Electron (https://www.electronjs.org/)
3) the files are ready to be packaged as mobile application (android, ios) with Capacitor (https://capacitorjs.com/docs/getting-started#add-capacitor-to-your-web-app)
STR;
file_put_contents(dirname(__FILE__)."/export_tmp/$code/readme.txt",$readme);
$electron_js = <<<STR
const {app, BrowserWindow} = require('electron')
const url = require('url')
const path = require('path')
let win
function createWindow() {
   win = new BrowserWindow({width: 1280, height: 720})
   win.loadURL(url.format ({
      pathname: path.join(__dirname, 'www/index.html'),
      protocol: 'file:',
      slashes: true
   }))
}
app.on('ready', createWindow)
STR;
file_put_contents(dirname(__FILE__)."/export_tmp/$code/main.js",$electron_js);
$eletron_package = <<<STR
{
  "name": "$name",
  "version": "1.0.0",
  "description": "$description",
  "main": "main.js",
  "author": "$author",
  "scripts": {
    "start": "electron ."
  }
}
STR;
file_put_contents(dirname(__FILE__)."/export_tmp/$code/package.json",$eletron_package);
$variable1 = str_replace(' ', '', strtolower($settings['name']));
$variable2 = str_replace(' ', '', strtolower($name));
$app_id = "com." . $variable1 . "." . $variable2;
$capacitor_config = <<<STR
{
  "appId": "$app_id",
  "appName": "$name",
  "webDir": "www",
  "server": {
    "androidScheme": "https"
  },
  "backgroundColor": "$loading_background_color",
  "ios": {
  	"contentInset":"always"
  }
}
STR;
file_put_contents(dirname(__FILE__)."/export_tmp/$code/capacitor.config.json",$capacitor_config);
copy(dirname(__FILE__)."/../favicons/android-chrome-192x192.png",dirname(__FILE__)."/export_tmp/$code/www/favicons/android-chrome-192x192.png");
copy(dirname(__FILE__)."/../favicons/android-chrome-256x256.png",dirname(__FILE__)."/export_tmp/$code/www/favicons/android-chrome-256x256.png");
copy(dirname(__FILE__)."/../favicons/apple-touch-icon.png",dirname(__FILE__)."/export_tmp/$code/www/favicons/apple-touch-icon.png");
copy(dirname(__FILE__)."/../favicons/browserconfig.xml",dirname(__FILE__)."/export_tmp/$code/www/favicons/browserconfig.xml");
copy(dirname(__FILE__)."/../favicons/favicon.ico",dirname(__FILE__)."/export_tmp/$code/www/favicons/favicon.ico");
copy(dirname(__FILE__)."/../favicons/favicon-16x16.png",dirname(__FILE__)."/export_tmp/$code/www/favicons/favicon-16x16.png");
copy(dirname(__FILE__)."/../favicons/favicon-32x32.png",dirname(__FILE__)."/export_tmp/$code/www/favicons/favicon-32x32.png");
copy(dirname(__FILE__)."/../favicons/mstile-150x150.png",dirname(__FILE__)."/export_tmp/$code/www/favicons/mstile-150x150.png");
copy(dirname(__FILE__)."/../favicons/safari-pinned-tab.svg",dirname(__FILE__)."/export_tmp/$code/www/favicons/safari-pinned-tab.svg");
recursive_copy(dirname(__FILE__)."/../favicons/v_$code",dirname(__FILE__)."/export_tmp/$code/www/favicons/v_$code");
$array_js_files = ['js/jquery-ui.min.js','js/libpannellum.js','js/pannellum.js','vendor/videojs/video.min.js','js/videojs-pannellum-plugin.js','vendor/videojs/youtube.min.js','vendor/fancybox/jquery.fancybox.min.js','js/sly.min.js','js/jquery.floating-social-share.js','vendor/tooltipster/js/tooltipster.bundle.min.js','js/mobile-detect.min.js','js/typed.min.js','vendor/nanogallery2/jquery.nanogallery2.core.min.js','vendor/SpeechKITT/annyang.js','vendor/SpeechKITT/speechkitt.min.js','vendor/jquery-confirm/jquery-confirm.min.js','js/peerjs.min.js','vendor/clipboard.js/clipboard.min.js','js/pixi.min.js','js/jquery.ui.touch-punch.min.js','vendor/leaflet/leaflet.js','vendor/leaflet/L.Control.Locate.min.js','js/numeric.min.js','vendor/simplebar/simplebar.min.js','vendor/glide/glide.min.js','js/effects.js','js/360-view.min.js','js/lottie.min.js','js/progress.min.js','js/panzoom.min.js','vendor/leaderLine/leader-line.min.js','js/moment.js'];
$js = '';
foreach($array_js_files as $js_file) {
    $js .= file_get_contents(dirname(__FILE__)."/../viewer/$js_file");
    $js .= "\r\n\r\n";
}
file_put_contents(dirname(__FILE__)."/export_tmp/$code/www/js/script.js",$js);
copy_file(false,'',null,'jquery.min.js','js');
copy_file(false,'',null,'bootstrap.min.js','js');
copy_file(false,'',null,'jquery.touchSwipe.min.js','js');
copy(dirname(__FILE__)."/../viewer/vendor/threejs/three.min.js",dirname(__FILE__)."/export_tmp/$code/www/js/three.min.js");
copy(dirname(__FILE__)."/../viewer/vendor/threejs/Tween.js",dirname(__FILE__)."/export_tmp/$code/www/js/Tween.js");
copy(dirname(__FILE__)."/../viewer/vendor/threejs/OrbitControls.js",dirname(__FILE__)."/export_tmp/$code/www/js/OrbitControls.js");
copy(dirname(__FILE__)."/../viewer/vendor/threejs/CSS2DRenderer.js",dirname(__FILE__)."/export_tmp/$code/www/js/CSS2DRenderer.js");
copy(dirname(__FILE__)."/../viewer/vendor/threejs/threex.domevents.js",dirname(__FILE__)."/export_tmp/$code/www/js/threex.domevents.js");
copy(dirname(__FILE__)."/../viewer/vendor/sweet-dropdown/jquery.sweet-dropdown.min.js",dirname(__FILE__)."/export_tmp/$code/www/js/jquery.sweet-dropdown.min.js");
copy(dirname(__FILE__)."/../viewer/vendor/videojs/videojs-vr.min.js",dirname(__FILE__)."/export_tmp/$code/www/js/videojs-vr.min.js");
copy_file(false,'',null,'index.js','js');
copy_file(false,'',null,'model-viewer.min.js','js');
copy_file(false,'',null,'hls.min.js','js');
copy_file(false,'',null,'howler.min.js','js');
$js = Minifier::minify(file_get_contents(dirname(__FILE__)."/export_tmp/$code/www/js/index.js"),array('flaggedComments' => false));
file_put_contents(dirname(__FILE__)."/export_tmp/$code/www/js/index.js",$js);
if(file_exists(dirname(__FILE__)."/../viewer/js/custom.js")) {
    copy_file(false,'',null,'custom.js','js');
}
if(file_exists(dirname(__FILE__)."/../viewer/js/custom_$code.js")) {
    copy_file(false,'',null,"custom_$code.js",'js');
}
copy_file(false,'',null,'icomoon.eot','css');
copy_file(false,'',null,'icomoon.svg','css');
copy_file(false,'',null,'icomoon.ttf','css');
copy_file(false,'',null,'icomoon.woff','css');
copy_file(false,'',null,'compass.eot','css');
copy_file(false,'',null,'compass.svg','css');
copy_file(false,'',null,'compass.ttf','css');
copy_file(false,'',null,'compass.woff','css');
copy_file(false,'',null,'Smoke10.png','css');
copy_file(false,'',null,'transparent.png','css');
copy_file(false,'',null,'dots_loading.gif','css');
copy(dirname(__FILE__)."/../viewer/vendor/leaflet/images/layers.png",dirname(__FILE__)."/export_tmp/$code/www/css/images/layers.png");
copy(dirname(__FILE__)."/../viewer/vendor/SpeechKITT/themes/flat.css",dirname(__FILE__)."/export_tmp/$code/www/css/skflat.css");
file_put_contents(dirname(__FILE__)."/export_tmp/$code/www/css/skflat.css",minify_css(file_get_contents(dirname(__FILE__)."/export_tmp/$code/www/css/skflat.css")));
$array_css_files = ['css/jquery-ui.min.css','vendor/fontawesome-free/css/all.min.css','css/pannellum.css','vendor/fancybox/jquery.fancybox.min.css','css/jquery.floating-social-share.css','css/progress.css','vendor/tooltipster/css/tooltipster.bundle.min.css','vendor/tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-borderless.min.css','vendor/nanogallery2/css/nanogallery2.min.css','vendor/videojs/video-js.min.css','vendor/videojs/themes/city/index.css','vendor/jquery-confirm/jquery-confirm.min.css','css/bootstrap-iso.css','vendor/leaflet/leaflet.css','vendor/leaflet/L.Control.Locate.min.css','vendor/simplebar/simplebar.css','vendor/glide/glide.core.min.css','vendor/glide/glide.theme.min.css','css/effects.css','css/index.css','css/animate.min.css','vendor/sweet-dropdown/jquery.sweet-dropdown.min.css','css/woocommerce.css'];
$css = '';
foreach($array_css_files as $css_file) {
    $css .= minify_css(file_get_contents(dirname(__FILE__)."/../viewer/$css_file"));
    $css .= "\r\n\r\n";
}
file_put_contents(dirname(__FILE__)."/export_tmp/$code/www/css/style.css",$css);
if(file_exists(dirname(__FILE__)."/../viewer/css/custom.css")) {
    copy_file(false,'',null,'custom.css','css');
    $css = minify_css(file_get_contents(dirname(__FILE__)."/export_tmp/$code/www/css/custom.css"));
    file_put_contents(dirname(__FILE__)."/export_tmp/$code/www/css/custom.css",$css);
}
if(file_exists(dirname(__FILE__)."/../viewer/css/custom_$code.css")) {
    copy_file(false,'',null,"custom_$code.css",'css');
    $css = minify_css(file_get_contents(dirname(__FILE__)."/export_tmp/$code/www/css/custom_$code.css"));
    file_put_contents(dirname(__FILE__)."/export_tmp/$code/www/css/custom_$code.css",$css);
}
recursive_copy(dirname(__FILE__)."/../viewer/vendor/nanogallery2/css/font",dirname(__FILE__)."/export_tmp/$code/www/css/font");
recursive_copy(dirname(__FILE__)."/../viewer/vendor/fontawesome-free/webfonts",dirname(__FILE__)."/export_tmp/$code/www/webfonts");
copy_file($s3_enabled,$s3_bucket_name,$s3Client,$song,'content');
copy_file($s3_enabled,$s3_bucket_name,$s3Client,$logo,'content');
copy_file($s3_enabled,$s3_bucket_name,$s3Client,$poweredby_image,'content');
copy_file($s3_enabled,$s3_bucket_name,$s3Client,$nadir_logo,'content');
copy_file($s3_enabled,$s3_bucket_name,$s3Client,$background_image,'content');
copy_file($s3_enabled,$s3_bucket_name,$s3Client,$background_video,'content');
copy_file($s3_enabled,$s3_bucket_name,$s3Client,$background_image_mobile,'content');
copy_file($s3_enabled,$s3_bucket_name,$s3Client,$background_video_mobile,'content');
copy_file($s3_enabled,$s3_bucket_name,$s3Client,$intro_desktop,'content');
copy_file($s3_enabled,$s3_bucket_name,$s3Client,$intro_mobile,'content');
copy_file($s3_enabled,$s3_bucket_name,$s3Client,$presentation_video,'content');
copy_file($s3_enabled,$s3_bucket_name,$s3Client,$dollhouse_glb,'content');
copy_file($s3_enabled,$s3_bucket_name,$s3Client,$id_vt."_slideshow.mp4",'gallery');
$query = "SELECT id FROM svt_virtualtours WHERE shop_type='woocommerce' AND id=$id_vt;";
$result = $mysqli->query($query);
if($result) {
    if ($result->num_rows == 1) {
        copy(dirname(__FILE__)."/../viewer/ajax/add_to_cart_wc.php",dirname(__FILE__)."/export_tmp/$code/www/ajax/add_to_cart_wc.php");
        copy(dirname(__FILE__)."/../viewer/ajax/get_total_cart_wc.php",dirname(__FILE__)."/export_tmp/$code/www/ajax/get_total_cart_wc.php");
        copy(dirname(__FILE__)."/../viewer/ajax/remove_to_cart_wc.php",dirname(__FILE__)."/export_tmp/$code/www/ajax/remove_to_cart_wc.php");
        copy(dirname(__FILE__)."/../viewer/ajax/update_quantity_wc.php",dirname(__FILE__)."/export_tmp/$code/www/ajax/update_quantity_wc.php");
    }
}
$mysqli->close();
$mysqli = new mysqli(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);
if (mysqli_connect_errno()) {
    echo mysqli_connect_error();
    exit();
}
$mysqli->query("SET NAMES 'utf8';");
$query = "SELECT a.image,a.video FROM svt_advertisements as a JOIN svt_assign_advertisements saa on a.id = saa.id_advertisement WHERE saa.id_virtualtour=$id_vt;";
$result = $mysqli->query($query);
if($result) {
    if ($result->num_rows > 0) {
        while($row = $result->fetch_array(MYSQLI_ASSOC)) {
            $image = $row['image'];
            $video = $row['video'];
            copy_file($s3_enabled,$s3_bucket_name,$s3Client,$image,'content');
            copy_file($s3_enabled,$s3_bucket_name,$s3Client,$video,'content');
        }
    }
}
$mysqli->close();
$mysqli = new mysqli(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);
if (mysqli_connect_errno()) {
    echo mysqli_connect_error();
    exit();
}
$mysqli->query("SET NAMES 'utf8';");
$query = "SELECT image FROM svt_gallery WHERE id_virtualtour=$id_vt;";
$result = $mysqli->query($query);
if($result) {
    if ($result->num_rows > 0) {
        while($row = $result->fetch_array(MYSQLI_ASSOC)) {
            $image = $row['image'];
            copy_file($s3_enabled,$s3_bucket_name,$s3Client,$image,'gallery');
            copy_file($s3_enabled,$s3_bucket_name,$s3Client,$image,'gallery/thumb');
        }
    }
}
$mysqli->close();
$mysqli = new mysqli(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);
if (mysqli_connect_errno()) {
    echo mysqli_connect_error();
    exit();
}
$mysqli->query("SET NAMES 'utf8';");
$query = "SELECT map FROM svt_maps WHERE id_virtualtour=$id_vt;";
$result = $mysqli->query($query);
if($result) {
    if ($result->num_rows > 0) {
        while($row = $result->fetch_array(MYSQLI_ASSOC)) {
            $map = $row['map'];
            copy_file($s3_enabled,$s3_bucket_name,$s3Client,$map,'maps');
            copy_file($s3_enabled,$s3_bucket_name,$s3Client,$map,'maps/thumb');
        }
    }
}
$mysqli->close();
$mysqli = new mysqli(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);
if (mysqli_connect_errno()) {
    echo mysqli_connect_error();
    exit();
}
$mysqli->query("SET NAMES 'utf8';");
$array_id_rooms = array();
$query = "SELECT id,type,panorama_image,panorama_video,thumb_image,logo,song FROM svt_rooms WHERE id_virtualtour=$id_vt;";
$result = $mysqli->query($query);
if($result) {
    if ($result->num_rows > 0) {
        while($row = $result->fetch_array(MYSQLI_ASSOC)) {
            $id_room = $row['id'];
            array_push($array_id_rooms,$id_room);
            $panorama_image = $row['panorama_image'];
            $panorama_name = explode(".",$panorama_image)[0];
            $panorama_video = $row['panorama_video'];
            $thumb_image = $row['thumb_image'];
            $logo = $row['logo'];
            $song = $row['song'];
            copy_file($s3_enabled,$s3_bucket_name,$s3Client,$panorama_image,'panoramas');
            copy_file($s3_enabled,$s3_bucket_name,$s3Client,$panorama_image,'panoramas/lowres');
            copy_file($s3_enabled,$s3_bucket_name,$s3Client,$panorama_image,'panoramas/mobile');
            copy_file($s3_enabled,$s3_bucket_name,$s3Client,$panorama_image,'panoramas/original');
            copy_file($s3_enabled,$s3_bucket_name,$s3Client,$panorama_image,'panoramas/preview');
            copy_file($s3_enabled,$s3_bucket_name,$s3Client,$panorama_image,'panoramas/thumb');
            copy_file($s3_enabled,$s3_bucket_name,$s3Client,$panorama_video,'videos');
            copy_file($s3_enabled,$s3_bucket_name,$s3Client,$thumb_image,'panoramas/thumb_custom');
            copy_file($s3_enabled,$s3_bucket_name,$s3Client,$logo,'content');
            copy_file($s3_enabled,$s3_bucket_name,$s3Client,$song,'content');
            if($s3_enabled) {
                try {
                    $s3Client->downloadBucket(dirname(__FILE__)."/export_tmp/$code/www/panoramas/multires/$panorama_name/",$s3_bucket_name,"viewer/panoramas/multires/$panorama_name/");
                } catch (\Aws\S3\Exception\S3Exception $e) {}
            } else {
                if(file_exists(dirname(__FILE__)."/../viewer/panoramas/multires/$panorama_name/")) {
                    recursive_copy(dirname(__FILE__)."/../viewer/panoramas/multires/$panorama_name",dirname(__FILE__)."/export_tmp/$code/www/panoramas/multires/$panorama_name");
                }
            }
        }
    }
}
$mysqli->close();
$mysqli = new mysqli(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);
if (mysqli_connect_errno()) {
    echo mysqli_connect_error();
    exit();
}
$mysqli->query("SET NAMES 'utf8';");
$array_id_pois = array();
$array_id_products = array();
$id_rooms = implode(",",$array_id_rooms);
if(!empty($id_rooms)) {
    $query = "SELECT panorama_image FROM svt_rooms_alt WHERE id_room IN ($id_rooms);";
    $result = $mysqli->query($query);
    if($result) {
        if ($result->num_rows > 0) {
            while($row = $result->fetch_array(MYSQLI_ASSOC)) {
                $panorama_image = $row['panorama_image'];
                $panorama_name = explode(".",$panorama_image)[0];
                copy_file($s3_enabled,$s3_bucket_name,$s3Client,$panorama_image,'panoramas');
                copy_file($s3_enabled,$s3_bucket_name,$s3Client,$panorama_image,'panoramas/lowres');
                copy_file($s3_enabled,$s3_bucket_name,$s3Client,$panorama_image,'panoramas/mobile');
                copy_file($s3_enabled,$s3_bucket_name,$s3Client,$panorama_image,'panoramas/original');
                copy_file($s3_enabled,$s3_bucket_name,$s3Client,$panorama_image,'panoramas/preview');
                copy_file($s3_enabled,$s3_bucket_name,$s3Client,$panorama_image,'panoramas/thumb');
                if($s3_enabled) {
                    try {
                        $s3Client->downloadBucket(dirname(__FILE__)."/export_tmp/$code/www/panoramas/multires/$panorama_name/",$s3_bucket_name,"viewer/panoramas/multires/$panorama_name/");
                    } catch (\Aws\S3\Exception\S3Exception $e) {}
                } else {
                    if(file_exists(dirname(__FILE__)."/../viewer/panoramas/multires/$panorama_name/")) {
                        recursive_copy(dirname(__FILE__)."/../viewer/panoramas/multires/$panorama_name",dirname(__FILE__)."/export_tmp/$code/www/panoramas/multires/$panorama_name");
                    }
                }
            }
        }
    }
    $mysqli->close();
    $mysqli = new mysqli(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);
    if (mysqli_connect_errno()) {
        echo mysqli_connect_error();
        exit();
    }
    $mysqli->query("SET NAMES 'utf8';");
    $query = "SELECT COUNT(*) as num FROM svt_pois WHERE type IN ('pdf','link') AND content LIKE '%.pdf%' AND id_room IN ($id_rooms);";
    $result = $mysqli->query($query);
    if($result) {
        if ($result->num_rows == 1) {
            $row = $result->fetch_array(MYSQLI_ASSOC);
            if($row['num']>0) {
                recursive_copy(dirname(__FILE__)."/../viewer/vendor/pdf_viewer",dirname(__FILE__)."/export_tmp/$code/www/vendor/pdf_viewer");
                unlink(dirname(__FILE__)."/export_tmp/$code/www/vendor/pdf_viewer/index.php");
            }
        }
    }
    $mysqli->close();
    $mysqli = new mysqli(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);
    if (mysqli_connect_errno()) {
        echo mysqli_connect_error();
        exit();
    }
    $mysqli->query("SET NAMES 'utf8';");
    $query = "SELECT COUNT(*) as num FROM svt_pois WHERE type IN ('pointclouds') AND id_room IN ($id_rooms);";
    $result = $mysqli->query($query);
    if($result) {
        if ($result->num_rows == 1) {
            $row = $result->fetch_array(MYSQLI_ASSOC);
            if($row['num']>0) {
                recursive_copy(dirname(__FILE__)."/../viewer/vendor/potree",dirname(__FILE__)."/export_tmp/$code/www/vendor/potree");
            }
        }
    }
    $mysqli->close();
    $mysqli = new mysqli(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);
    if (mysqli_connect_errno()) {
        echo mysqli_connect_error();
        exit();
    }
    $mysqli->query("SET NAMES 'utf8';");
    $query = "SELECT sound FROM svt_markers WHERE id_room IN ($id_rooms);";
    $result = $mysqli->query($query);
    if($result) {
        if ($result->num_rows > 0) {
            while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
                $sound = $row['sound'];
                if (strpos($sound, 'content/') === 0) {
                    $content_file = basename($sound);
                    copy_file($s3_enabled,$s3_bucket_name,$s3Client,$content_file,'content');
                }
            }
        }
    }
    $mysqli->close();
    $mysqli = new mysqli(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);
    if (mysqli_connect_errno()) {
        echo mysqli_connect_error();
        exit();
    }
    $mysqli->query("SET NAMES 'utf8';");
    $query = "SELECT id,type,content,embed_type,embed_content,sound FROM svt_pois WHERE id_room IN ($id_rooms);";
    $result = $mysqli->query($query);
    if($result) {
        if ($result->num_rows > 0) {
            while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
                $id_poi = $row['id'];
                array_push($array_id_pois,$id_poi);
                $type = $row['type'];
                $content = $row['content'];
                $embed_type = $row['embed_type'];
                $embed_content = $row['embed_content'];
                $sound = $row['sound'];
                if (strpos($content, 'content/') === 0) {
                    $content_file = basename($content);
                    copy_file($s3_enabled,$s3_bucket_name,$s3Client,$content_file,'content');
                }
                if (strpos($sound, 'content/') === 0) {
                    $content_file = basename($sound);
                    copy_file($s3_enabled,$s3_bucket_name,$s3Client,$content_file,'content');
                }
                if (strpos($content, 'media/') === 0) {
                    $content_file = basename($content);
                    copy_file($s3_enabled,$s3_bucket_name,$s3Client,$content_file,'media');
                }
                if (strpos($content, 'pointclouds/') === 0) {
                    $path_pc = dirname($content);
                    if($s3_enabled) {
                        try {
                            $s3Client->downloadBucket(dirname(__FILE__)."/export_tmp/$code/www/$path_pc/",$s3_bucket_name,"viewer/$path_pc/");
                        } catch (\Aws\S3\Exception\S3Exception $e) {}
                    } else {
                        if(file_exists(dirname(__FILE__)."/../viewer/$path_pc/")) {
                            recursive_copy(dirname(__FILE__)."/../viewer/$path_pc/",dirname(__FILE__)."/export_tmp/$code/www/$path_pc/");
                        }
                    }
                }
                if($type=='product') {
                    if(!empty($content)) array_push($array_id_products,$content);
                }
                switch($embed_type) {
                    case 'image':
                    case 'video':
                    case 'video_chroma':
                    case 'object3d':
                        if (strpos($embed_content, 'content') === 0) {
                            $content_file = basename($embed_content);
                            copy_file($s3_enabled,$s3_bucket_name,$s3Client,$content_file,'content');
                        }
                        if (strpos($embed_content, 'media') === 0) {
                            $content_file = basename($embed_content);
                            copy_file($s3_enabled,$s3_bucket_name,$s3Client,$content_file,'media');
                        }
                        break;
                    case 'video_transparent':
                        if (strpos($embed_content, ',') !== false) {
                            $array_contents = explode(",",$embed_content);
                            foreach ($array_contents as $content) {
                                if (strpos($content, 'content') === 0) {
                                    $content_file = basename($content);
                                    copy_file($s3_enabled,$s3_bucket_name,$s3Client,$content_file,'content');
                                }
                                if (strpos($content, 'media') === 0) {
                                    $content_file = basename($content);
                                    copy_file($s3_enabled,$s3_bucket_name,$s3Client,$content_file,'media');
                                }
                            }
                        } else {
                            if (strpos($embed_content, 'content') === 0) {
                                $content_file = basename($embed_content);
                                copy_file($s3_enabled,$s3_bucket_name,$s3Client,$content_file,'content');
                            }
                            if (strpos($embed_content, 'media') === 0) {
                                $content_file = basename($embed_content);
                                copy_file($s3_enabled,$s3_bucket_name,$s3Client,$content_file,'media');
                            }
                        }
                        break;
                }
            }
        }
    }
    $mysqli->close();
    $mysqli = new mysqli(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);
    if (mysqli_connect_errno()) {
        echo mysqli_connect_error();
        exit();
    }
    $mysqli->query("SET NAMES 'utf8';");
    $query = "SELECT p.id,p.type,pl.content,p.embed_type,pl.embed_content FROM svt_pois_lang as pl JOIN svt_pois as p ON p.id=pl.id_poi WHERE p.id_room IN ($id_rooms);";
    $result = $mysqli->query($query);
    if($result) {
        if ($result->num_rows > 0) {
            while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
                $id_poi = $row['id'];
                array_push($array_id_pois,$id_poi);
                $type = $row['type'];
                $content = $row['content'];
                $embed_type = $row['embed_type'];
                $embed_content = $row['embed_content'];
                if (strpos($content, 'content/') === 0) {
                    $content_file = basename($content);
                    copy_file($s3_enabled,$s3_bucket_name,$s3Client,$content_file,'content');
                }
                if (strpos($content, 'media/') === 0) {
                    $content_file = basename($content);
                    copy_file($s3_enabled,$s3_bucket_name,$s3Client,$content_file,'media');
                }
                if (strpos($content, 'pointclouds/') === 0) {
                    $path_pc = dirname($content);
                    if($s3_enabled) {
                        try {
                            $s3Client->downloadBucket(dirname(__FILE__)."/export_tmp/$code/www/$path_pc/",$s3_bucket_name,"viewer/$path_pc/");
                        } catch (\Aws\S3\Exception\S3Exception $e) {}
                    } else {
                        if(file_exists(dirname(__FILE__)."/../viewer/$path_pc/")) {
                            recursive_copy(dirname(__FILE__)."/../viewer/$path_pc/",dirname(__FILE__)."/export_tmp/$code/www/$path_pc/");
                        }
                    }
                }
                if($type=='product') {
                    if(!empty($content)) array_push($array_id_products,$content);
                }
                switch($embed_type) {
                    case 'image':
                    case 'video':
                    case 'video_chroma':
                    case 'object3d':
                        if (strpos($embed_content, 'content') === 0) {
                            $content_file = basename($embed_content);
                            copy_file($s3_enabled,$s3_bucket_name,$s3Client,$content_file,'content');
                        }
                        if (strpos($embed_content, 'media') === 0) {
                            $content_file = basename($embed_content);
                            copy_file($s3_enabled,$s3_bucket_name,$s3Client,$content_file,'media');
                        }
                        break;
                    case 'video_transparent':
                        if (strpos($embed_content, ',') !== false) {
                            $array_contents = explode(",",$embed_content);
                            foreach ($array_contents as $content) {
                                if (strpos($content, 'content') === 0) {
                                    $content_file = basename($content);
                                    copy_file($s3_enabled,$s3_bucket_name,$s3Client,$content_file,'content');
                                }
                                if (strpos($content, 'media') === 0) {
                                    $content_file = basename($content);
                                    copy_file($s3_enabled,$s3_bucket_name,$s3Client,$content_file,'media');
                                }
                            }
                        } else {
                            if (strpos($embed_content, 'content') === 0) {
                                $content_file = basename($embed_content);
                                copy_file($s3_enabled,$s3_bucket_name,$s3Client,$content_file,'content');
                            }
                            if (strpos($embed_content, 'media') === 0) {
                                $content_file = basename($embed_content);
                                copy_file($s3_enabled,$s3_bucket_name,$s3Client,$content_file,'media');
                            }
                        }
                        break;
                }
            }
        }
    }
    $mysqli->close();
    $mysqli = new mysqli(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);
    if (mysqli_connect_errno()) {
        echo mysqli_connect_error();
        exit();
    }
    $mysqli->query("SET NAMES 'utf8';");
    $query = "SELECT image,id_virtualtour as id_vt_library FROM svt_icons WHERE id IN (SELECT id_icon_library FROM svt_markers WHERE id_icon_library!=0 AND id_room IN ($id_rooms));";
    $result = $mysqli->query($query);
    if($result) {
        if ($result->num_rows > 0) {
            while($row = $result->fetch_array(MYSQLI_ASSOC)) {
                $image = $row['image'];
                if(empty($row['id_vt_library'])) {
                    copy_file(false,$s3_bucket_name,$s3Client,$image,'icons');
                } else {
                    copy_file($s3_enabled,$s3_bucket_name,$s3Client,$image,'icons');
                }
            }
        }
    }
    $mysqli->close();
    $mysqli = new mysqli(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);
    if (mysqli_connect_errno()) {
        echo mysqli_connect_error();
        exit();
    }
    $mysqli->query("SET NAMES 'utf8';");

    $query = "SELECT image,id_virtualtour as id_vt_library FROM svt_icons WHERE id IN (SELECT id_icon_library FROM svt_pois WHERE id_icon_library!=0 AND id_room IN ($id_rooms));";
    $result = $mysqli->query($query);
    if($result) {
        if ($result->num_rows > 0) {
            while($row = $result->fetch_array(MYSQLI_ASSOC)) {
                $image = $row['image'];
                if(empty($row['id_vt_library'])) {
                    copy_file(false,$s3_bucket_name,$s3Client,$image,'icons');
                } else {
                    copy_file($s3_enabled,$s3_bucket_name,$s3Client,$image,'icons');
                }
            }
        }
    }
    $mysqli->close();
    $mysqli = new mysqli(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);
    if (mysqli_connect_errno()) {
        echo mysqli_connect_error();
        exit();
    }
    $mysqli->query("SET NAMES 'utf8';");
}
$id_pois = implode(",",$array_id_pois);
if(!empty($id_pois)) {
    $query = "SELECT image FROM svt_poi_embedded_gallery WHERE id_poi IN ($id_pois);";
    $result = $mysqli->query($query);
    if($result) {
        if ($result->num_rows > 0) {
            while($row = $result->fetch_array(MYSQLI_ASSOC)) {
                $image = $row['image'];
                copy_file($s3_enabled,$s3_bucket_name,$s3Client,$image,'gallery');
                copy_file($s3_enabled,$s3_bucket_name,$s3Client,$image,'gallery/thumb');
            }
        }
    }
    $mysqli->close();
    $mysqli = new mysqli(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);
    if (mysqli_connect_errno()) {
        echo mysqli_connect_error();
        exit();
    }
    $mysqli->query("SET NAMES 'utf8';");
    $query = "SELECT image FROM svt_poi_gallery WHERE id_poi IN ($id_pois);";
    $result = $mysqli->query($query);
    if($result) {
        if ($result->num_rows > 0) {
            while($row = $result->fetch_array(MYSQLI_ASSOC)) {
                $image = $row['image'];
                copy_file($s3_enabled,$s3_bucket_name,$s3Client,$image,'gallery');
                copy_file($s3_enabled,$s3_bucket_name,$s3Client,$image,'gallery/thumb');
            }
        }
    }
    $mysqli->close();
    $mysqli = new mysqli(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);
    if (mysqli_connect_errno()) {
        echo mysqli_connect_error();
        exit();
    }
    $mysqli->query("SET NAMES 'utf8';");
    $query = "SELECT image FROM svt_poi_objects360 WHERE id_poi IN ($id_pois);";
    $result = $mysqli->query($query);
    if($result) {
        if ($result->num_rows > 0) {
            while($row = $result->fetch_array(MYSQLI_ASSOC)) {
                $image = $row['image'];
                copy_file($s3_enabled,$s3_bucket_name,$s3Client,$image,'objects360');
            }
        }
    }
    $mysqli->close();
    $mysqli = new mysqli(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME);
    if (mysqli_connect_errno()) {
        echo mysqli_connect_error();
        exit();
    }
    $mysqli->query("SET NAMES 'utf8';");
}
$id_products = implode(",",$array_id_products);
if(!empty($id_products)) {
    $query = "SELECT image FROM svt_product_images WHERE id_product IN ($id_products);";
    $result = $mysqli->query($query);
    if($result) {
        if ($result->num_rows > 0) {
            while($row = $result->fetch_array(MYSQLI_ASSOC)) {
                $image = $row['image'];
                copy_file($s3_enabled,$s3_bucket_name,$s3Client,$image,'products');
                copy_file($s3_enabled,$s3_bucket_name,$s3Client,$image,'products/thumb');
            }
        }
    }
}
$currentPath = $_SERVER['PHP_SELF'];
$pathInfo = pathinfo($currentPath);
$hostName = $_SERVER['HTTP_HOST'];
if (is_ssl()) { $protocol = 'https'; } else { $protocol = 'http'; }
$url = $protocol."://".$hostName.$pathInfo['dirname']."/";
$url = str_replace('services/','viewer/',$url);
$data = file_get_contents($url."index.php?code=$code&export=1", false, stream_context_create(array("ssl"=>array("verify_peer"=>false,"verify_peer_name"=>false))));
file_put_contents(dirname(__FILE__)."/export_tmp/$code/www/index.html",$data);
foreach ($vt_languages_enabled as $lang=>$lang_enabled) {
    if($lang_enabled==1) copy_file(false,'',null,"$lang.png",'css/flags_lang');
    if($lang_enabled==1 && $lang!=$default_language) {
        $data = file_get_contents($url."index.php?code=$code&lang=$lang&export=1", false, stream_context_create(array("ssl"=>array("verify_peer"=>false,"verify_peer_name"=>false))));
        file_put_contents(dirname(__FILE__)."/export_tmp/$code/www/$lang.html",$data);
    }
}
$file_name_zip = str_replace(" ","_",$name).".zip";
RemoveEmptySubFolders(dirname(__FILE__)."/export_tmp/$code/");
zip_folder($code,$file_name_zip);
if(file_exists(dirname(__FILE__)."/export_tmp/$file_name_zip")) {
    deleteDirectory(dirname(__FILE__)."/export_tmp/$code/");
    ob_end_clean();
    echo json_encode(array("status"=>"ok","zip"=>"$file_name_zip"));
    exit;
} else {
    ob_end_clean();
    echo json_encode(array("status"=>"error"));
    exit;
}

function check_directory($path) {
    try {
        if (!file_exists(dirname(__FILE__).$path)) {
            mkdir(dirname(__FILE__).$path, 0775,true);
        }
    } catch (Exception $e) {}
}

function copy_file($s3_enabled,$s3_bucket_name,$s3Client,$file_name,$dir) {
    global $code;
    if(!empty($file_name)) {
        if($s3_enabled) {
            try {
                $exist = $s3Client->doesObjectExist($s3_bucket_name,'viewer/'.$dir.'/'.$file_name);
            } catch (\Aws\S3\Exception\S3Exception $e) {
                $exist = false;
            }
            if($exist) {
                try {
                    $s3Client->getObject(array(
                        'Bucket' => $s3_bucket_name,
                        'Key'    => 'viewer/'.$dir.'/'.$file_name,
                        'SaveAs' => dirname(__FILE__)."/export_tmp/$code/www/$dir/$file_name"
                    ));
                } catch (\Aws\S3\Exception\S3Exception $e) {}
            }
        } else {
            $source = dirname(__FILE__)."/../viewer/$dir/$file_name";
            if(file_exists($source)) {
                $dest = dirname(__FILE__)."/export_tmp/$code/www/$dir/$file_name";
                @copy($source,$dest);
            }
        }
    }
}

function recursive_copy($src,$dst) {
    $dir = opendir($src);
    if($dir!=false) {
        @mkdir($dst,0775,true);
        while(( $file = readdir($dir)) ) {
            if (( $file != '.' ) && ( $file != '..' )) {
                if (is_dir($src . '/' . $file)) {
                    recursive_copy($src .'/'. $file, $dst .'/'. $file);
                } else {
                    @copy($src .'/'. $file,$dst .'/'. $file);
                }
            }
        }
        closedir($dir);
    }
}


function minify_css($input) {
    if(trim($input) === "") return $input;
    $input = preg_replace('!/\*.*?\*/!s', '', $input);
    $input = preg_replace('/\n\s*\n/', "\n", $input);
    return preg_replace(
        array(
            '#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')|\/\*(?!\!)(?>.*?\*\/)|^\s*|\s*$#s',
            '#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\'|\/\*(?>.*?\*\/))|\s*+;\s*+(})\s*+|\s*+([*$~^|]?+=|[{};,>~]|\s(?![0-9\.])|!important\b)\s*+|([[(:])\s++|\s++([])])|\s++(:)\s*+(?!(?>[^{}"\']++|"(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')*+{)|^\s++|\s++\z|(\s)\s+#si',
        ),
        array(
            '$1',
            '$1$2$3$4$5$6$7',
        ),
        $input);
}

function RemoveEmptySubFolders($path) {
    $empty=true;
    foreach (glob($path.DIRECTORY_SEPARATOR."*") as $file) {
        if (is_dir($file)) {
            if (!RemoveEmptySubFolders($file)) $empty=false;
        } else {
            $empty=false;
        }
    }
    if ($empty) rmdir($path);
    return $empty;
}

function deleteDirectory($dir) {
    if (!file_exists($dir)) {
        return true;
    }
    if (!is_dir($dir)) {
        return unlink($dir);
    }
    foreach (scandir($dir) as $item) {
        if ($item == '.' || $item == '..') {
            continue;
        }
        if (!deleteDirectory($dir . DIRECTORY_SEPARATOR . $item)) {
            return false;
        }
    }
    return rmdir($dir);
}

function zip_folder($code,$file_name_zip) {
    $rootPath = realpath(dirname(__FILE__)."/export_tmp/$code/");
    $zip = new ZipArchive();
    $zip->open(dirname(__FILE__)."/export_tmp/$file_name_zip", ZipArchive::CREATE | ZipArchive::OVERWRITE);
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($rootPath), RecursiveIteratorIterator::LEAVES_ONLY);
    foreach ($files as $name => $file) {
        if (!$file->isDir()) {
            $filePath = $file->getRealPath();
            $relativePath = substr($filePath, strlen($rootPath) + 1);
            $zip->addFile($filePath, $relativePath);
        }
    }
    $zip->close();
}