open($zipname); if ($res === TRUE) { $zip->extractTo($ext_dir); $zip->close(); } else { echo 'Error: Failed to open'.$zipname; } return $ext_dir; } function zip2html_dir($upload, $upload_dir){ $unzip_dir = unzip_me($upload["tmp_name"]); $name = basename($upload["name"]); $name = explode('.', $name)[0]; if(is_file($unzip_dir.'/index.html')){ $html_dir = $upload_dir.'/'.$name; rename($unzip_dir, $html_dir); }else if(is_file($unzip_dir.'/'.$name.'/index.html')){ $html_dir = $unzip_dir.'/'.$name; }else{ echo 'Error: index.html not found'; $html_dir = null; } return $html_dir; } $result = ['success' => false, 'message' => 'Error while processing your request!']; if(isset($_SESSION['user']) && $_SESSION['user']->accesslevel == 'Admin') { $database = new Database(DB_HOST, DB_NAME, DB_USER, DB_PASS, DB_PORT, DB_SCMA); $obj = new map_Class($database->getConn(), $_SESSION['user']->id); $id = isset($_POST['id']) ? intval($_POST['id']) : 0; if(($id > 0) && !$obj->isOwnedByUs($id)){ $result = ['success' => false, 'message' => 'Action not allowed!']; }else if(isset($_POST['save'])) { $newId = 0; if($id) { // update $newId = $obj->update($_POST) ? $id : 0; if($newId > 0){ $html_dir = APPS_DIR.'/'.$newId; App::updateDatasources($_POST, $html_dir, DATA_DIR, APPS_DIR); } } else if(!empty($_POST['app']) || !empty($_FILES['archive'])){ // insert $newId = $obj->create($_POST); if(!is_dir(CACHE_DIR.'/'.$newId)){ mkdir(CACHE_DIR.'/'.$newId, 0770); } if($newId > 0){ $upload_dir = App::upload_dir($_SESSION['user']->ftp_user); $html_dir = null; $unzip_dir = null; // html dir can be in /var/www/upload or in /tmp, if its an upload if(isset($_POST['app'])){ $html_dir = $upload_dir.'/'.$_POST['app']; }else if(!empty($_FILES["archive"]["tmp_name"])){ // if we have uploaded file $html_dir = zip2html_dir($_FILES["archive"], $upload_dir); } if($html_dir){ App::installApp($newId, $_POST, $html_dir, DATA_DIR, APPS_DIR); // process map data files if($unzip_dir){ App::rrmdir($unzip_dir); } }else{ $obj->delete($newId); $newId = 0; } } } if($newId > 0){ if(isset($_FILES["image"]) && ($_FILES['image']['size'] < 10485760)){ // if image file and is less than 10 MB $image = null; // scale image to 200x150 if($_FILES["image"]["type"] == 'image/png'){ $image = imagecreatefrompng($_FILES["image"]["tmp_name"]); }else if($_FILES["image"]["type"] == 'image/jpeg'){ $image = imagecreatefromjpeg($_FILES["image"]["tmp_name"]); } if($image){ $imgResized = imagescale($image , 200, 150); imagepng($imgResized, "../../assets/maps/".$newId.'.png'); } } $result = ['success' => true, 'message' => 'Map successfully created!', 'id' => $newId]; }else{ $result = ['success' => false, 'message' => 'Failed to save Map!']; } } else if(isset($_POST['delete'])) { $result = $obj->getById($_POST['id']); $row = pg_fetch_assoc($result); pg_free_result($result); if($obj->delete(intval($_POST['id']))){ App::uninstallApp($row['name'], DATA_DIR, APPS_DIR); $result = ['success' => true, 'message' => 'Data Successfully Deleted!']; }else{ $result = ['success' => false, 'message' => 'Error: Data Not Deleted!']; } } else if(isset($_POST['clear'])) { $map_cache_dir = CACHE_DIR.'/'.$_POST['id']; if(is_dir($map_cache_dir)){ $dir_size = 0; $files = scandir($map_cache_dir); foreach($files as $f){ if(is_file($map_cache_dir.'/'.$f)){ $dir_size += filesize($map_cache_dir.'/'.$f); unlink($map_cache_dir.'/'.$f); } } rmdir($map_cache_dir); $unit = 'bytes'; if($dir_size > (1024*1024)){ $dir_size = $dir_size / (1024*1024); $unit = 'Mbytes'; } else if($dir_size > 1024){ $dir_size = $dir_size / 1024; $unit = 'kbytes'; } $result = ['success' => true, 'message' => 'Successfully removed '.sprintf("%.2f %s", $dir_size, $unit)]; }else{ $result = ['success' => false, 'message' => 'Error: No cache!']; } } } echo json_encode($result); ?>