예제 #1
0
 function __construct($in = false, $cookieMessagesName = false)
 {
     //+	parse input{
     if ($in === false) {
         //apply default
         //+	Handle GET and POST variables{
         $in['get'] = $_SERVER['QUERY_STRING'];
         //we take it from here b/c php will replace characters like '.' and will ignore duplicate keys when forming $_GET
         //can cause script to hang (if no stdin), so don't run if in script unless configured to
         if (!$_ENV['inScript'] || $_ENV['scriptGetsStdin']) {
             //multipart forms can either result in 1. input being blank or 2. including the upload.  In case 1, post vars can be taken from $_POST.  In case 2, need to avoid putting entire file in memory by parsing input
             if (substr($_SERVER['CONTENT_TYPE'], 0, 19) != 'multipart/form-data') {
                 $in['post'] = file_get_contents('php://input');
                 $in['post'] = $in['post'] ? $in['post'] : file_get_contents('php://stdin');
             } elseif ($_POST) {
                 $in['post'] = http_build_query($_POST);
             }
         }
         if ($_SERVER['CONTENT_TYPE'] == 'application/json') {
             $in['post'] = ['json' => json_decode($in['post'])];
         } else {
             $in['post'] = Http::parseQuery($in['post'], $_ENV['pageInPHPStyle']);
         }
         $in['get'] = Http::parseQuery($in['get'], $_ENV['pageInPHPStyle']);
         $this->in = Arrays::merge($in['get'], $in['post']);
         //+	}
     } elseif (is_array($in)) {
         $this->in = $in;
     } else {
         $this->in = Http::parseQuery($in, $_ENV['pageInPHPStyle']);
     }
     $this->originalIn = $this->in;
     if ($_ENV['stripInputContexts']) {
         $this->in = self::removeInputContexts($this->in);
     }
     //+	}
     //+	Handle COOKIE system messages{
     if ($cookieMessagesName === false) {
         //apply default
         $cookieMessagesName = '_PageMessages';
     }
     //Page message are intended to be shown on viewed pages, not ajax responses, so ignore on ajax
     if ($cookieMessagesName && $_COOKIE[$cookieMessagesName] && !$this->in['_ajax']) {
         do {
             $cookie = @unserialize($_COOKIE[$cookieMessagesName]);
             if (is_array($cookie)) {
                 $code = self::saveMessagesCode($cookie['data']);
                 if ($cookie['code'] == $code) {
                     if (is_array($cookie['target'])) {
                         if (!array_diff($cookie['target'], Route::$urlTokens)) {
                             $this->messages = @unserialize($cookie['data']);
                         } else {
                             //not on right page, so break
                             break;
                         }
                     } else {
                         $this->messages = @unserialize($cookie['data']);
                     }
                 }
             }
             Cookie::remove($cookieMessagesName);
         } while (false);
     }
     //+	}
     //load db if configured
     if ($_ENV['database']['default']) {
         $this->db = Db::init(null, $_ENV['database']['default']);
     }
 }
예제 #2
0
 function standardizeConcernData($concernData)
 {
     if (is_string($concernData)) {
         $concernData = Http::parseQuery($concernData);
         $standard = array();
         foreach ($concernData as $k => $v) {
             if ($k[0] == '-') {
                 $standard[substr($k, 1)] = null;
             } else {
                 $standard[$k] = $v;
             }
         }
         return $standard;
     }
     return $concernData;
 }