public function testIndex() { $req = new Request('test/test', ['td1' => 'd1']); $this->assertEquals('test/test', $req->getRequestUri()); $this->assertEquals('d1', $req->td1); $this->assertTrue(isset($req->td1)); $_SERVER['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'; $this->assertTrue($req->isXmlHttpRequest()); $req->setParam('a', 1); $this->assertEquals(1, $req->a); $this->assertEquals(1, $req->env('q', 1)); $this->assertEquals(1, $req->cookie('q', 1)); $this->assertEquals(1, $req->server('q', 1)); $this->assertInstanceOf('Yagrysha\\MVC\\User', $req->user); }
/** * Thank's Symfony :) */ public function match(Request $request_) { $matches = $variables = $tokens = array(); $defaultSeparator = '/'; $uri = $request_->getUri(); preg_match_all('#\\{\\w+\\}#', $this->path, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); if (!empty($matches)) { // Use of {} variables $pos = 0; foreach ($matches as $match) { $varName = substr($match[0][0], 1, -1); $precedingText = substr($this->path, $pos, $match[0][1] - $pos); $pos = $match[0][1] + strlen($match[0][0]); $precedingChar = strlen($precedingText) > 0 ? substr($precedingText, -1) : ''; $isSeparator = $precedingChar !== '' && strpos(static::SEPARATORS, $precedingChar) !== false; if (is_numeric($varName)) { throw new \Exception(sprintf('Variable name "%s" cannot be numeric in route pattern "%s". Please use a different name.', $varName, $this->path)); } if (in_array($varName, $variables)) { throw new \Exception(sprintf('Route pattern "%s" cannot reference variable name "%s" more than once.', $this->path, $varName)); } if ($isSeparator && strlen($precedingText) > 1) { $tokens[] = array('text', substr($precedingText, 0, -1)); } else { if (!$isSeparator && strlen($precedingText) > 0) { $tokens[] = array('text', $precedingText); } } $followingPattern = (string) substr($this->path, $pos); $nextSeparator = self::findNextSeparator($followingPattern); $regexp = sprintf('[^%s%s]+', preg_quote($defaultSeparator, self::REGEX_DELIMITER), $defaultSeparator !== $nextSeparator && '' !== $nextSeparator ? preg_quote($nextSeparator, self::REGEX_DELIMITER) : ''); if ($nextSeparator !== '' && !preg_match('#^\\{\\w+\\}#', $followingPattern) || $followingPattern === '') { $regexp .= '+'; } $variables[] = $varName; $tokens[] = array('variable', $isSeparator ? $precedingChar : '', $regexp, $varName); } if ($pos < strlen($this->path)) { $tokens[] = array('text', substr($this->path, $pos)); } // compute the matching regexp $regexp = ''; for ($i = 0, $nbToken = count($tokens); $i < $nbToken; ++$i) { $regexp .= self::computeRegexp($tokens, $i, PHP_INT_MAX); } $regex = self::REGEX_DELIMITER . '^' . $regexp . '$' . self::REGEX_DELIMITER . 's'; $matchingValues = array(); $res = preg_match($regex, $uri, $matchingValues); if ($res) { foreach ($variables as $k => $v) { $request_->setParam($v, $matchingValues[$v]); } return true; } return false; } return $this->path === $request_->getUri(); }
public static function start() { // Include model incFile('modules/profile/system/Model.php'); incFile('../mail/class.phpmailer.php'); // Connect to DB $model = new ProfileModel(); if (getSession('user')) { $id = getSession('user'); } else { $id = getCookie('user'); setSession('user', $id, false); } // $id = (getSession('user')) ? getSession('user') : getCookie('user') ; if ($id) { $uData = array(); // Update user $uData['controller'] = CONTROLLER; $uData['action'] = ACTION; $uData['dateLast'] = time(); $model->updateUserByID($uData, $id); // Get data user Request::setParam('user', $model->getUserByID($id)); // Count new message Request::setParam('countMsg', $model->countMsg($id)); // Count new message Request::setParam('countRequests', $model->countRequests($id)); // Count challenges Request::setParam('countChallenges', $model->countChallengesList($id)); } else { $gip = ip2long($_SERVER['REMOTE_ADDR']); // Null Request::setParam('user', null); // Guest Request::setParam('guest', $model->getGuestByIP($gip)); // Role Request::setRole('guest'); /* // Language if (CONTROLLER == 'page' && ACTION == 'lang') { if (Request::getUri(0) == 'ru' OR Request::getUri(0) == 'en') setMyCookie('lang', Request::getUri(0), time() + 365 * 86400); } $lang = getCookie('lang'); if ($lang == 'ru' OR $lang == 'en') Lang::setLanguage($lang); else Lang::setLanguage(); */ if (Request::getParam('guest')->id) { $gData['count'] = Request::getParam('guest')->count + 1; $gData['time'] = time(); $model->update('guests', $gData, "`id` = '" . Request::getParam('guest')->id . "' LIMIT 1"); } else { $gData['ip'] = $gip; $gData['browser'] = $_SERVER['HTTP_USER_AGENT']; $gData['referer'] = $_SERVER['HTTP_REFERER']; $gData['count'] = 1; $gData['time'] = time(); $model->insert('guests', $gData); } } // Count users online Request::setParam('countUsersOnline', $model->countUsersOnline()); // Count guests online Request::setParam('countGuestsOnline', $model->countGuestsOnline()); }
/** * Function callbackParser * @param $buffer */ function callbackParser($buffer) { $arr1 = array(); $arr2 = array(); preg_match_all("~{([0-9A-Z_]{1,}):([0-9A-Za-z_//#]+)}~", $buffer, $m); foreach ($m[1] as $key => $value) { if ($value == 'L') { $arr1[] = '{' . $value . ':' . $m[2][$key] . '}'; $arr2[] = Lang::translate($m[2][$key]); } elseif ($value == 'URL') { $arr1[] = '{' . $value . ':' . $m[2][$key] . '}'; $arr2[] = url($m[2][$key]); } } $ar = str_replace($arr1, $arr2, $buffer); Request::setParam('buffer', $ar); Request::setParam('buf', $m); }