| 
<?phpuse \Fr\Process;
 
 $appID = \Request::postParam("id");
 
 if(!CSRF::check()){
 echo json_encode(array(
 "statusID" => "error",
 "status" => "CSRF Token didn't match"
 ));
 }else if($appID === null){
 echo json_encode(array(
 "statusID" => "error",
 "status" => "Invalid App ID"
 ));
 }else{
 /**
 * A queue of App downloads
 */
 $appInstallQueue = Lobby\DB::getJSONOption("lobby_app_downloads");
 
 /**
 * If the $appID is in the queue, then give the download status of it
 * If the updated value is less than 20 seconds ago, then restart the download
 */
 if(isset($appInstallQueue[$appID]) && !isset($_POST["force-install"]) && $appInstallQueue[$appID]["updated"] > strtotime("-35 seconds")){
 echo json_encode(array(
 "statusID" => $appInstallQueue[$appID]["statusID"],
 "status" => $appInstallQueue[$appID]["status"]
 ));
 }else{
 $appInfo = \Lobby\Server::store(array(
 "get" => "app",
 "id" => $appID
 ));
 
 /**
 * App doesn't exist on Lobby Store
 */
 if($appInfo === "false"){
 echo json_encode(array(
 "status" => "error",
 "error" => "App Doesn't Exist"
 ));
 }else{
 $appName = $appInfo["name"];
 
 $Process = new Process(Process::getPHPExecutable(), array(
 "arguments" => array(
 L_DIR . "/admin/ar/install-app-bg.php",
 \Lobby::getLID(),
 base64_encode(serialize($_SERVER)),
 $appID
 )
 ));
 
 /**
 * Get the command used to execute install-app-bg.php
 */
 $command = $Process->start(function() use ($appID){
 /**
 * This callback will close the connection between browser and server,
 * http://stackoverflow.com/q/36968552/1372424
 */
 echo json_encode(array(
 "statusID" => "download_intro",
 "status" => "Downloading <b>$appID</b>..."
 ));
 });
 
 \Lobby::log("To install app '$appID', this command was executed : $command");
 }
 }
 }
 
 |