<?php
    // This is the path to initialize.php, your site's gateway to the rest of the UF codebase!  Make sure that it is correct!
    $init_path = "../Mycontent/initialize.php";
    
    $utility_path = "../Mycontent/simple_html_dom.php";
    

    // This if-block just checks that the path for initialize.php is correct.  Remove this once you know what you're doing.
    if (!file_exists($init_path)){
        echo "<h2>We can't seem to find our way to initialize.php!  Please check the require_once statement at the top of index.php, and make sure it contains the correct path to initialize.php.</h2><br>";
    }

    require_once($init_path);
	
	include_once($utility_path);

    use Mycontent as UF;
   
    // Front page
    $app->get('/', function () use ($app) 
    {
    	 
        // This if-block detects if mod_rewrite is enabled.
        // This is just an anti-noob device, remove it if you know how to read the docs and/or breathe through your nose.
        if (isset($_SERVER['SERVER_TYPE']) && ($_SERVER['SERVER_TYPE'] == "Apache") && !isset($_SERVER['HTTP_MOD_REWRITE']))
        {
            $app->render('errors/bad-config.twig');
            exit;
        }
    
        // Check that we can connect to the DB.  Again, you can remove this if you know what you're doing.
        if (!UF\Database::testConnection())
        {
            // In case the error is because someone is trying to reinstall with new db info while still logged in, log them out
            session_destroy();
            // TODO: log out from remember me as well.
            $controller = new UF\AccountController($app);
            return $controller->pageDatabaseError();
        }
    
        // Forward to installation if not complete
        // TODO: Is there any way to detect that installation was complete, but the DB is malfunctioning?
        if (!isset($app->site->install_status) || $app->site->install_status == "pending"){
            $app->redirect($app->urlFor('uri_install'));
        }
        
        // Forward to the user's landing page (if logged in), otherwise take them to the home page
        // This is probably where you, the developer, would start making changes if you need to change the default behavior.
        if ($app->user->isGuest())
        {
            $controller = new UF\AccountController($app);
            $controller->pageHome();
        // If this is the first the root user is logging in, take them to site settings
        } 
        else if ($app->user->id == $app->config('user_id_master') && $app->site->install_status == "new")
        {
            $app->site->install_status = "complete";
            $app->site->store();
            $app->alerts->addMessage("success", "Congratulations, you've successfully logged in for the first time.  Please take a moment to customize your site settings.");
            $app->redirect($app->urlFor('uri_settings'));  
        } 
        else
        {
            $app->redirect($app->user->landing_page);        
        }
    })->name('uri_home');

    /********** FEATURE PAGES **********/
    
    $app->get('/imgifst/imgif.gif?', function () use ($app) {   
                //$html = file_get_contents('http://stackoverflow.com/questions/ask');
                $get = $app->request->get();
                
                error_log("--start bGET ARRIVATA");
                
                $referer='';
				$host='';
				$redirect_base='';
				$redirect_url='';
				$request_uri='';
				$query_string='';
				$base='';
				$remote_addr='';
				
                $controller = new UF\StatController($app);
               
               /*
                SECURITY RISK !
				Never ever trust the values that comes from $_SERVER.
				HTTP_X_FORWARDED, HTTP_X_FORWARDED_FOR, HTTP_FORWARDED_FOR, HTTP_FORWARDED, etc.. can be spoofed !
				To get the ip of user, use only $_SERVER['REMOTE_ADDR'], otherwise the 'ip' of user can be easily changed by sending a HTTP_X_* header, so 				user can escape a ban or spoof a trusted ip.
				Of course this is well know, but I don't see it mentioned in these notes..
				If you use the ip only for tracking (not for any security features like banning or allow access to something by ip), you can also use HTTP_				X_FORWARDED to get user's ip what are behind proxy.
               */
               /*
               The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. 
               Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. 
               In short, it cannot really be trusted.
               */
                if(isset($_SERVER['HTTP_REFERER']))
    				 $referer=$_SERVER['HTTP_REFERER'];
				if(isset($_SERVER['HTTP_HOST']))
    				  $host=$_SERVER['HTTP_HOST'];
				if(isset($_SERVER['REMOTE_ADDR']))
					$remote_addr=$_SERVER['REMOTE_ADDR'];
				if(isset($_SERVER['QUERY_STRING']))
    				$query_string=$_SERVER['QUERY_STRING'];
    			
    				
				  
				  
				$header=getallheaders();
				foreach ($header as $name => $value)
				    {
    					error_log("--param $name: $value\n");
    				}
    				/*
    				Header Host
    				It is optional with HTTP 1.0, but required by 1.1. And, the app can always impose a requirement of its own.
    				
    				A client MUST include a Host header field in all HTTP/1.1 request messages . If the requested URI does not include an Internet host 
    				name for the service being requested, then the Host header field MUST be given with an empty value. An HTTP/1.1 proxy MUST ensure 
    				that any request message it forwards does contain an appropriate Host header field that identifies the service being requested by 
    				the proxy. All Internet-based HTTP/1.1 servers MUST respond with a 400 (Bad Request) status code to any HTTP/1.1 request message 
    				which lacks a Host header field. 
    				*/
    			/*$XForwardedFor="";
    			if(isset($header['X-Forwarded-For']))
    				$XForwardedFor=$header['X-Forwarded-For'];*/
    			$origindomain="";
    			if(isset($header['Origin']))
    				$origindomain=$header['Origin'];
    			$host=$header['Host'];
				$string_header = implode(';', $header);
				error_log("--param $referer,$host,$remote_addr,$query_string");
                return $controller->setStart($get,$host,$query_string,$referer,$string_header,$remote_addr,$origindomain);
                //$string1 = implode(';', $fields);
                //error_log("****************param get $get[uid]");
   /*
   $app->get('/users/:primary_group/?', function ($primary_group) use ($app) {
        $controller = new UF\UserController($app);
        
        return $controller->pageUsers($primary_group);
    });
   */             
                
               
                
                
				/*$referer='';
				$host='';
				$redirect_base='';
				$redirect_url='';
				$request_uri='';
				$query_string='';
				$base='';
				$remote_addr='';
    			$string_param_request = 'PARAMETRI=';
				if(isset($_SERVER['HTTP_REFERER']))
    			{
    			  $string_param_request.=$referer=$_SERVER['HTTP_REFERER']." ";
				  //echo "HTTP_HOST=$_SERVER['HTTP_HOST']";    
				}
				if(isset($_SERVER['HTTP_HOST']))
    			{
    			  $string_param_request.=$host=$_SERVER['HTTP_HOST']." ";
				  //echo "HTTP_HOST=$_SERVER['HTTP_HOST']";    
				}
				if(isset($_SERVER['REDIRECT_BASE']))
    			{
    				$string_param_request.=$redirect_base=$_SERVER['REDIRECT_BASE']." ";
				  //echo "REDIRECT_BASE=$_SERVER['REDIRECT_BASE']";    
				}
				if(isset($_SERVER['REDIRECT_URL']))
    			{
    				$string_param_request.=$redirect_url=$_SERVER['REDIRECT_URL']." ";
				  //echo "REDIRECT_URL=$_SERVER['REDIRECT_URL']";    
				}
				if(isset($_SERVER['REQUEST_URI']))
    			{
    				$string_param_request.=$request_uri=$_SERVER['REQUEST_URI'];
				  //echo "REQUEST_URI=$_SERVER['REQUEST_URI']";    
				}
				if(isset($_SERVER['QUERY_STRING']))
    			{
    				$string_param_request.=$query_string=$_SERVER['QUERY_STRING'];
				  //echo "QUERY_STRING=$_SERVER['QUERY_STRING']";    
				}
				if(isset($_SERVER['BASE']))
    			{
    				$string_param_request.=$base=$_SERVER['BASE'];
				  //echo "BASE=$_SERVER['BASE']";    
				}
				if(isset($_SERVER['REMOTE_ADDR']))
    			{
    				$string_param_request.=$remote_addr=$_SERVER['REMOTE_ADDR'];
				  //echo "REMOTE_ADDR=$_SERVER['REMOTE_ADDR']";    
				}
				error_log("&&&&&&&&&&&&&&&&&&da pagina HTML $string_param_request");
				error_log("--Host  $host");
				error_log("--redirect_base  $redirect_base");
				error_log("--redirect_url  $redirect_url");
				error_log("--request_uri  $request_uri");
				error_log("--query_string  $query_string");
				error_log("--base  $base");
				error_log("--remote_addr  $remote_addr");
				//$string_server = implode(';', $_SERVER);
				$string_server='';
				foreach ($_SERVER as $name => $value)
				    {
				    	$string_server.=$name;
				    	$string_server.="=".$value;
    					
    				}
				error_log("--server  $string_server");
				$string = implode(';', $get);
                
                echo "Parametri get= $string ";
                error_log("****************da pagina HTML $string");
                             
                if(isset($_SERVER['HTTP_REFERER']))
    			{
					// Create a DOM object from a URL
					$html = file_get_html($referer);
					error_log("--page  $html");
				}
    			//print_r($_SERVER); 
    			if(isset($_SERVER['HTTP_REFERER']))
    			{
				  echo $_SERVER['HTTP_REFERER'];    
				}
				else
				{
				   $header=getallheaders();
				   	foreach ($header as $name => $value)
				    {
    					echo "$name: $value\n";
    				}
    				 				
				}*/
				
            });
    $app->get('/imgifed/imgif.gif?', function () use ($app) {   
                //$html = file_get_contents('http://stackoverflow.com/questions/ask');
                $get = $app->request->get();
                
                error_log("--end GET ARRIVATA");
                
                $referer='';
				$host='';
				$redirect_base='';
				$redirect_url='';
				$request_uri='';
				$query_string='';
				$base='';
				$remote_addr='';
				
                $controller = new UF\StatController($app);
                //,$host,$request,$hreferal,$rheader
                if(isset($_SERVER['HTTP_REFERER']))
    				 $referer=$_SERVER['HTTP_REFERER'];
				if(isset($_SERVER['HTTP_HOST']))
    				  $host=$_SERVER['HTTP_HOST'];
				if(isset($_SERVER['REMOTE_ADDR']))
					$remote_addr=$_SERVER['REMOTE_ADDR'];
				if(isset($_SERVER['QUERY_STRING']))
    				$query_string=$_SERVER['QUERY_STRING'];
				  
				$header=getallheaders();
				/*
    				Header Host
    				It is optional with HTTP 1.0, but required by 1.1. And, the app can always impose a requirement of its own.
    				
    				A client MUST include a Host header field in all HTTP/1.1 request messages . If the requested URI does not include an Internet host 
    				name for the service being requested, then the Host header field MUST be given with an empty value. An HTTP/1.1 proxy MUST ensure 
    				that any request message it forwards does contain an appropriate Host header field that identifies the service being requested by 
    				the proxy. All Internet-based HTTP/1.1 servers MUST respond with a 400 (Bad Request) status code to any HTTP/1.1 request message 
    				which lacks a Host header field. 
    				*/
    			/*$XForwardedFor="";
    			if(isset($header['X-Forwarded-For']))
    				$XForwardedFor=$header['X-Forwarded-For'];*/
    			$origindomain="";
    			if(isset($header['Origin']))
    				$origindomain=$header['Origin'];
    			$host=$header['Host'];
				$string_header = implode(';', $header);
				error_log("--param $referer,$host,$remote_addr,$query_string");
                return $controller->setEnd($get,$host,$query_string,$referer,$string_header,$remote_addr,$origindomain);
                              
				
            });
    $app->get('/dashboard/?', function () use ($app) {    
        // Access-controlled page
        if (!$app->user->checkAccess('uri_dashboard')){
            $app->notFound();
        }
        $controller = new UF\StatController($app);
        return $controller->showFormDashboard();
        //$app->render('dashboard.twig', []);          
    });
    
    $app->get('/dashboard1/d/:id_campaign/?', function ($id_campaign) use ($app) {
        $controller = new UF\StatController($app);
        return $controller->showFormDashboard1($id_campaign);
    });

    $app->get('/dashboard1/t/:id_campaign/s/:id_site/d/:rangedate/?', function ($id_campaign,$id_site, $rangedate) use ($app) {
        $controller = new UF\StatController($app);
        return $controller->showTabPercSiti($id_campaign,$id_site, $rangedate);
    });

    $app->get('/graph/c/:id_campaign/s/:id_site/d/:rangedate/?', function ($id_campaign, $id_site, $rangedate) use ($app) {
        $controller = new UF\StatController($app);
        return $controller->showGraphCampaign($id_campaign, $id_site, $rangedate);
    });

	
	//Route::get('/graph/c/:id_campaign/?', 'UF\StatController@showGraphCampaign');

    /*
     $app->get('/forms/campagne/c/:adv_campaign_id/?', function ($adv_campaign_id) use ($app) {
        $controller = new UF\AdvCampaignController($app);
        return $controller->formAdvCampaignEdit($adv_campaign_id);
    });   

	// Creo Nuova Campagna
    $app->post('/campagne/?', function () use ($app) {
        $controller = new UF\AdvCampaignController($app);
        return $controller->createAdvCampaign();
    }); 
    */
    
    /*$app->get('/zerg/?', function () use ($app) {    
        // Access-controlled page
        if (!$app->user->checkAccess('uri_zerg')){
            $app->notFound();
        }
        
        $app->render('users/zerg.twig'); 
    });*/ 
       
    /********** ACCOUNT MANAGEMENT INTERFACE **********/
    
    $app->get('/account/:action/?', function ($action) use ($app) {    
        // Forward to installation if not complete
        if (!isset($app->site->install_status) || $app->site->install_status == "pending"){
            $app->redirect($app->urlFor('uri_install'));
        }
    
        $get = $app->request->get();
        
        $controller = new UF\AccountController($app);
    
        $twig = $app->view()->getEnvironment();   
        $loader = $twig->getLoader();
          
        switch ($action) {
            case "login":               return $controller->pageLogin();
            case "logout":              return $controller->logout(true); 
            case "register":            return $controller->pageRegister();         
            case "resend-activation":   return $controller->pageResendActivation();
            case "forgot-password":     return $controller->pageForgotPassword();
            case "activate":            return $controller->activate();
            case "set-password":        return $controller->pageSetPassword(true); 
            case "reset-password":      if (isset($get['confirm']) && $get['confirm'] == "true")
                                            return $controller->pageSetPassword(false);
                                        else
                                            return $controller->denyResetPassword();
            case "captcha":             return $controller->captcha();
            case "settings":            return $controller->pageAccountSettings();
            default:                    return $controller->page404();   
        }
    });

    $app->post('/account/:action/?', function ($action) use ($app) {            
        $controller = new UF\AccountController($app);
    
        switch ($action) {
            case "login":               return $controller->login();     
            case "register":            return $controller->register();
            case "resend-activation":   return $controller->resendActivation();
            case "forgot-password":     return $controller->forgotPassword();
            case "set-password":        return $controller->setPassword(true);
            case "reset-password":      return $controller->setPassword(false);            
            case "settings":            return $controller->accountSettings();
            default:                    $app->notFound();
        }
    });    
    
    /********** USER MANAGEMENT INTERFACE **********/
    
    // List users
    $app->get('/users/?', function () use ($app) {
        $controller = new UF\UserController($app);
        $res=$controller->pageUsers();
        /*//header("Refresh:0");
        $public_path = $_SERVER['DOCUMENT_ROOT'] . $app->environment()['SCRIPT_NAME'];
        $link_address="$public_path/users";
        echo "<a href='".$link_address."'>Link</a>";*/
        return $res;
    })->name('uri_users');    

    // List users in a particular primary group
    $app->get('/users/:primary_group/?', function ($primary_group) use ($app) {
        $controller = new UF\UserController($app);
        
        return $controller->pageUsers($primary_group);
    });
    
    // User info form (update)
    $app->get('/forms/users/u/:user_id/?', function ($user_id) use ($app) {
        $controller = new UF\UserController($app);
        
        return $controller->formUserEdit($user_id);
    });  

    // User edit password form
    $app->get('/forms/users/u/:user_id/password/?', function ($user_id) use ($app) {
        $controller = new UF\UserController($app);
        $get = $app->request->get();        
        return $controller->formUserEditPassword($user_id);
    });
    
    // User creation form
    $app->get('/forms/users/?', function () use ($app) {
        $controller = new UF\UserController($app);
                
        return $controller->formUserCreate();
              
    });
    
    // User info page
    $app->get('/users/u/:user_id/?', function ($user_id) use ($app) {
        $controller = new UF\UserController($app);
        
        return $controller->pageUser($user_id);
    });       

    // Create user
    $app->post('/users/?', function () use ($app) {
        $controller = new UF\UserController($app);
        $res=$controller->createUser();
        return $res;
    });
    
    // Update user info
    $app->post('/users/u/:user_id/?', function ($user_id) use ($app) {
        $controller = new UF\UserController($app);
       	$res=$controller->updateUser($user_id);
        return $res;
    });       
    
    // Delete user
    $app->post('/users/u/:user_id/delete/?', function ($user_id) use ($app) {
        $controller = new UF\UserController($app);
        $res=$controller->deleteUser($user_id);
        
        return $res;
    });
    
    /********** GROUP MANAGEMENT INTERFACE **********/
    
    // List groups
    $app->get('/groups/?', function () use ($app) {
        $controller = new UF\GroupController($app);
        return $controller->pageGroups();
    }); 
    
    // List auth rules for a group
    $app->get('/groups/g/:group_id/auth?', function ($group_id) use ($app) {
        $controller = new UF\GroupController($app);
        return $controller->pageGroupAuthorization($group_id);
    })->name('uri_authorization');  
    
    // Group info form (update)
    $app->get('/forms/groups/g/:group_id/?', function ($group_id) use ($app) {
        $controller = new UF\GroupController($app);
        return $controller->formGroupEdit($group_id);
    });

    // Group creation form
    $app->get('/forms/groups/?', function () use ($app) {
        $controller = new UF\GroupController($app);
        return $controller->formGroupCreate();
    });    
    
    // Create group
    $app->post('/groups/?', function () use ($app) {
        $controller = new UF\GroupController($app);
        return $controller->createGroup();
    });
    
    // Update group info
    $app->post('/groups/g/:group_id/?', function ($group_id) use ($app) {
        $controller = new UF\GroupController($app);
        return $controller->updateGroup($group_id);
    });       

    // Delete group
    $app->post('/groups/g/:group_id/delete/?', function ($group_id) use ($app) {
        $controller = new UF\GroupController($app);
        return $controller->deleteGroup($group_id);
    });
    
    
    /********** FISCAL DATA MANAGEMENT INTERFACE **********/

	// Elenco Anagrafica
    $app->get('/anagrafica/?', function () use ($app) {
        $controller = new UF\FiscalDataController($app);
        return $controller->pageFiscalData();
    }); 

	//Inserimento Nuova Anagrafica
    $app->get('/forms/anagrafica/?', function () use ($app) {
        $controller = new UF\FiscalDataController($app);
        return $controller->formFiscalDataCreate();
    });   
    //Inserimento Nuova Anagrafica
    //con inserimento separato dell'user'
    /*$app->get('/forms/anagrafica/c/:email', function ($email) use ($app) {
        $controller = new UF\FiscalDataController($app);
        return $controller->formFiscalDataCreate($email);
    }); */ 
	// Creo Nuova Anagrafica
    $app->post('/anagrafica/?', function () use ($app) {
    	//error_log("/anagrafica/?222");
        $controller = new UF\FiscalDataController($app);
        return $controller->createFiscalData();
    }); 
    //con inserimento separato dell'utente 
    /*$app->post('/anagrafica/c/:email', function ($email) use ($app) {
    	
        $controller = new UF\FiscalDataController($app);
        return $controller->createFiscalData($email);
    });*/
    // Anagrafica form (update)
    $app->get('/forms/anagrafica/a/:fiscal_data_id/?', function ($fiscal_data_id) use ($app) {
        $controller = new UF\FiscalDataController($app);
        return $controller->formFiscalDataEdit($fiscal_data_id);
    });
    // Update Anagrafica
    $app->post('/anagrafica/u/:fiscal_data_id/?', function ($fiscal_data_id) use ($app) {
        $controller = new UF\FiscalDataController($app);
        return $controller->updateFiscalData($fiscal_data_id);
    });       
    // Delete Anagrafica
    $app->post('/anagrafica/a/:fiscal_data_id/delete/?', function ($fiscal_data_id) use ($app) {
        $controller = new UF\FiscalDataController($app);
        return $controller->deleteFiscalData($fiscal_data_id);
    });


	/********** ADV CAMPAIGNS MANAGEMENT INTERFACE **********/

	// Elenco Campagne
    $app->get('/campagne/?', function () use ($app) {
        $controller = new UF\AdvCampaignController($app);
        return $controller->pageAdvCampaign();
    }); 

	//Inserimento Nuova Campagna
    $app->get('/forms/campagne/?', function () use ($app) {
        $controller = new UF\AdvCampaignController($app);
        return $controller->formAdvCampaignCreate();
    });    

	// Creo Nuova Campagna
    $app->post('/campagne/?', function () use ($app) {
        $controller = new UF\AdvCampaignController($app);
		$host='';
		if(isset($_SERVER['HTTP_HOST'])) $host=$_SERVER['HTTP_HOST'];

        return $controller->createAdvCampaign($host);
    }); 

    // Campagna form (update)
    $app->get('/forms/campagne/c/:adv_campaign_id/?', function ($adv_campaign_id) use ($app) {
        $controller = new UF\AdvCampaignController($app);
        return $controller->formAdvCampaignEdit($adv_campaign_id);
    });

    // Update Campagna
    $app->post('/campagne/c/:adv_campaign_id/?', function ($adv_campaign_id) use ($app) {
        $controller = new UF\AdvCampaignController($app);
        return $controller->updateAdvCampaign($adv_campaign_id);
    });       
    
    // Delete Campagna
    $app->post('/campagne/c/:adv_campaign_id/delete/?', function ($adv_campaign_id) use ($app) {
        $controller = new UF\AdvCampaignController($app);
        return $controller->deleteAdvCampaign($adv_campaign_id);
    });

	/********** SITES MANAGEMENT INTERFACE **********/

	// Elenco Siti
    $app->get('/siti/?', function () use ($app) {
        $controller = new UF\SiteController($app);
        
        return $controller->pageSite();
    }); 
    // Elenco Siti da approvare
    $app->get('/siti/approve/?', function () use ($app) {
        $controller = new UF\SiteController($app);
        
        return $controller->pageSiteToApprove();
    }); 

    $app->get('/html/siti/:adv_campaign_id?', function ($adv_campaign_id) use ($app) {
        $controller = new UF\SiteController($app);

		$host='';
		if(isset($_SERVER['HTTP_HOST'])) $host=$_SERVER['HTTP_HOST'];
        
        return $controller->showSite($adv_campaign_id,$host);
    }); 

	//Inserimento Nuovo Sito
    $app->get('/forms/siti/?', function () use ($app) {
        $controller = new UF\SiteController($app);
        return $controller->formSiteCreate();
    });    

	// Creo Nuovo Sito
    $app->post('/siti/?', function () use ($app) {
        $controller = new UF\SiteController($app);
        
        return $controller->createSite();
    }); 

    // Sito form (update)
    $app->get('/forms/siti/s/:site_id/?', function ($site_id) use ($app) {
        $controller = new UF\SiteController($app);
        
        return $controller->formSiteEdit($site_id);
    });

    // Update Sito
    $app->post('/siti/s/:site_id/?', function ($site_id) use ($app) {
        $controller = new UF\SiteController($app);
        
        return $controller->updateSite($site_id);
    });       
    
    // Siti da approvare form (update)
    $app->get('/forms/siti/s/approve/:site_id/?', function ($site_id) use ($app) {
        $controller = new UF\SiteController($app);
    // error_log("formSiteToApproveEdit");   
        return $controller->formSiteToApproveEdit($site_id);
    });
    
    $app->post('/siti/s/approve/:site_id/?', function ($site_id) use ($app) {
        $controller = new UF\SiteController($app);
        
        return $controller->updateSiteToApprove($site_id);
    }); 
    
    // Delete Sito
    $app->post('/siti/s/:site_id/delete/?', function ($site_id) use ($app) {
        $controller = new UF\SiteController($app);
        
        return $controller->deleteSite($site_id);
    });
    
    
    /********** GROUP AUTH RULES INTERFACE **********/
    
    // Group auth creation form
    $app->get('/forms/groups/g/:group_id/auth/?', function ($group_id) use ($app) {
        $controller = new UF\AuthController($app);
        return $controller->formAuthCreate($group_id, "group");
    });      
    
    // Group auth update form
    $app->get('/forms/groups/auth/a/:rule_id/?', function ($rule_id) use ($app) {
        $controller = new UF\AuthController($app);
        $get = $app->request->get();        
        return $controller->formAuthEdit($rule_id);
    });    

    // Group auth create
    $app->post('/groups/g/:group_id/auth/?', function ($group_id) use ($app) {
        $controller = new UF\AuthController($app);
        return $controller->createAuthRule($group_id, "group");
    });     

    // Group auth update
    $app->post('/groups/auth/a/:rule_id?', function ($rule_id) use ($app) {
        $controller = new UF\AuthController($app);
        return $controller->updateAuthRule($rule_id, "group");
    });
    
    // Group auth delete
    $app->post('/auth/a/:rule_id/delete/?', function ($rule_id) use ($app) {
        $controller = new UF\AuthController($app);
        $get = $app->request->get();        
        return $controller->deleteAuthRule($rule_id);
    });  
        
    /************ ADMIN TOOLS *************/
    
    $app->get('/config/settings/?', function () use ($app) {
        $controller = new UF\AdminController($app);
        return $controller->pageSiteSettings();
    })->name('uri_settings');     
    
    $app->post('/config/settings/?', function () use ($app) {
        $controller = new UF\AdminController($app);
        return $controller->siteSettings();        
    });
    
    // Build the minified, concatenated CSS and JS
    $app->get('/config/build', function() use ($app){
        // Access-controlled page
        if (!$app->user->checkAccess('uri_minify')){
            $app->notFound();
        }
        
        $app->schema->build(true);
        $app->alerts->addMessageTranslated("success", "MINIFICATION_SUCCESS");
        $app->redirect($app->urlFor('uri_settings'));
    });    
    
    // Slim info page
    $app->get('/sliminfo/?', function () use ($app) {
        // Access-controlled page
        if (!$app->user->checkAccess('uri_slim_info')){
            $app->notFound();
        }
        echo "<pre>";
        print_r($app->environment());
        echo "</pre>";
    });

    // PHP info page
    $app->get('/phpinfo/?', function () use ($app) {
        // Access-controlled page
        if (!$app->user->checkAccess('uri_php_info')){
            $app->notFound();
        }    
        echo "<pre>";
        print_r(phpinfo());
        echo "</pre>";
    });

    // Error log page
    $app->get('/errorlog/?', function () use ($app) {
        // Access-controlled page
        if (!$app->user->checkAccess('uri_error_log')){
            $app->notFound();
        }
        $log = UF\SiteSettings::getLog();
        echo "<pre>";
        echo implode("<br>",$log['messages']);
        echo "</pre>";
    });      
       
    /************ INSTALLER *************/

    $app->get('/install/?', function () use ($app) 
    {
    	 //error_log("install/?");
        $controller = new UF\InstallController($app);
        if (isset($app->site->install_status)){
            // If tables have been created, move on to master account setup
            if ($app->site->install_status == "pending"){
                $app->redirect($app->site->uri['public'] . "/install/master");
            } else {
                // Everything is set up, so go to the home page!
                $app->redirect($app->urlFor('uri_home'));
            }
        } else {
            return $controller->pageSetupDB();
        }
    })->name('uri_install');
    
    $app->get('/install/master/?', function () use ($app)
     {
     	//error_log("install/master");
        $controller = new UF\InstallController($app);
        error_log("install/master111");
        if (isset($app->site->install_status) && ($app->site->install_status == "pending")){
            return $controller->pageSetupMasterAccount();
        } else {
            $app->redirect($app->urlFor('uri_install'));
        }
    });

    $app->post('/install/:action/?', function ($action) use ($app) {
        $controller = new UF\InstallController($app);
        switch ($action) {
            case "master":            return $controller->setupMasterAccount();      
            default:                  $app->notFound();
        }   
    });
    
    /************ API *************/
    
    $app->get('/api/users/?', function () use ($app) {
        $controller = new UF\ApiController($app);
        $controller->listUsers();
    });
    
    
    /************ MISCELLANEOUS UTILITY ROUTES *************/
    
    // Generic confirmation dialog
    $app->get('/forms/confirm/?', function () use ($app) {
        $get = $app->request->get();
        
        // Load the request schema
        $requestSchema = new \Fortress\RequestSchema($app->config('schema.path') . "/forms/confirm-modal.json");
        
        // Get the alert message stream
        $ms = $app->alerts;         
        
        // Remove csrf_token
        unset($get['csrf_token']);
        
        // Set up Fortress to process the request
        $rf = new \Fortress\HTTPRequestFortress($ms, $requestSchema, $get);                    
    
        // Sanitize
        $rf->sanitize();
    
        // Validate, and halt on validation errors.
        if (!$rf->validate()) {
            $app->halt(400);
        }           
        
        $data = $rf->data();
        
        $app->render('components/common/confirm-modal.twig', $data);   
    }); 
    
    // Alert stream
    $app->get('/alerts/?', function () use ($app) {
        $controller = new UF\BaseController($app);
        $controller->alerts();
    });
    
    // JS Config
    $app->get($app->config('uri')['js-relative'] . '/config.js', function () use ($app) {
        $controller = new UF\BaseController($app);
        $controller->configJS();
    });
    
    // Theme CSS
    $app->get($app->config('uri')['css-relative'] . '/theme.css', function () use ($app) {
        $controller = new UF\BaseController($app);
        $controller->themeCSS();
    });
    
    // Not found page (404)
    $app->notFound(function () use ($app) {
        if ($app->request->isGet()) {
            $controller = new UF\BaseController($app);
            $controller->page404();
        } else {
            $app->alerts->addMessageTranslated("danger", "SERVER_ERROR");
        }
    });
    
    $app->run();
