Passed
Push — main ( 93508d...088a49 )
by Sammy
01:32
created
StorageManager/__DEL__FileManager.class.php 1 patch
Indentation   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -100,4 +100,4 @@
 block discarded – undo
100 100
 
101 101
 }
102 102
 
103
- ?>
103
+  ?>
Please login to merge, or discard this patch.
StorageManager/SnapshotManager.class.php 1 patch
Indentation   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -15,4 +15,4 @@
 block discarded – undo
15 15
   }
16 16
 }
17 17
 
18
- ?>
18
+  ?>
Please login to merge, or discard this patch.
StorageManager/PictureManager.class.php 1 patch
Indentation   +47 added lines, -47 removed lines patch added patch discarded remove patch
@@ -29,8 +29,8 @@  discard block
 block discarded – undo
29 29
   {
30 30
     $picture_directory = $this->build_path_to_directory();
31 31
     $thumbnail_directory = $picture_directory;
32
-		if(!file_exists($picture_directory) && mkdir($picture_directory) === false)
33
-			throw new PictureManagerException("directory '$picture_directory' does not exist");
32
+    if(!file_exists($picture_directory) && mkdir($picture_directory) === false)
33
+      throw new PictureManagerException("directory '$picture_directory' does not exist");
34 34
 
35 35
     $filenames = self::preg_scandir($picture_directory, self::FILENAME_REGEX);
36 36
 
@@ -87,11 +87,11 @@  discard block
 block discarded – undo
87 87
     $filepath = $this->build_filename() . '.' . self::file_ext($_FILES[$this->get_type()]['name']);
88 88
     $filepath = $this->locate_file($filepath);
89 89
 
90
-		if(file_exists($filepath))
90
+    if(file_exists($filepath))
91 91
       throw new PictureManagerException($this->get_type()." new path '$filepath' already exists");
92 92
 
93
-		if(copy($_FILES[$this->get_type()]['tmp_name'], $filepath) === false)
94
-			throw new PictureManagerException(" cant copy ".$_FILES[$this->get_type()]['name']." to ($filepath)");
93
+    if(copy($_FILES[$this->get_type()]['tmp_name'], $filepath) === false)
94
+      throw new PictureManagerException(" cant copy ".$_FILES[$this->get_type()]['name']." to ($filepath)");
95 95
 
96 96
     $this->make_thumbnail($filepath);
97 97
   }
@@ -107,64 +107,64 @@  discard block
 block discarded – undo
107 107
   }
108 108
 
109 109
   public function make_thumbnail($filepath)
110
-	{
110
+  {
111 111
     global $settings;
112 112
 
113
-		$cover_iri = null;
114
-
115
-		$mime_type = mime_content_type($filepath);
116
-		switch($mime_type)
117
-		{
118
-			case 'image/jpeg':
119
-			case 'image/pjpeg':
120
-				$cover_iri = imagecreatefromjpeg($filepath);
121
-			break;
113
+    $cover_iri = null;
122 114
 
123
-			case 'image/png':
124
-				$cover_iri = imagecreatefrompng($filepath);
125
-			break;
126
-
127
-			case 'image/gif':
128
-				$cover_iri = imagecreatefromgif($filepath);
129
-			break;
130
-		}
115
+    $mime_type = mime_content_type($filepath);
116
+    switch($mime_type)
117
+    {
118
+      case 'image/jpeg':
119
+      case 'image/pjpeg':
120
+        $cover_iri = imagecreatefromjpeg($filepath);
121
+      break;
122
+
123
+      case 'image/png':
124
+        $cover_iri = imagecreatefrompng($filepath);
125
+      break;
126
+
127
+      case 'image/gif':
128
+        $cover_iri = imagecreatefromgif($filepath);
129
+      break;
130
+    }
131 131
 
132
-		if(!is_null($cover_iri))
133
-		{
134
-			$width = imagesx( $cover_iri );
135
-			$height = imagesy( $cover_iri );
132
+    if(!is_null($cover_iri))
133
+    {
134
+      $width = imagesx( $cover_iri );
135
+      $height = imagesy( $cover_iri );
136 136
 
137
-			// calculate thumbnail size
137
+      // calculate thumbnail size
138 138
       
139
-			$new_width = $settings[get_class($this->pmi)::model_type()][$this->get_type()]['thumbnail']['width'];
140
-			$new_height = floor( $height * ( $new_width / $width ) );
139
+      $new_width = $settings[get_class($this->pmi)::model_type()][$this->get_type()]['thumbnail']['width'];
140
+      $new_height = floor( $height * ( $new_width / $width ) );
141 141
 
142
-			// create a new temporary image
143
-			$thumb_iri = imagecreatetruecolor($new_width, $new_height);
142
+      // create a new temporary image
143
+      $thumb_iri = imagecreatetruecolor($new_width, $new_height);
144 144
 
145
-			// copy and resize old image into new image
146
-			imagecopyresized( $thumb_iri, $cover_iri, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
145
+      // copy and resize old image into new image
146
+      imagecopyresized( $thumb_iri, $cover_iri, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
147 147
 
148
-			// save thumbnail into a file
148
+      // save thumbnail into a file
149 149
       imagejpeg($thumb_iri, $this->locate_thumbnail(pathinfo($filepath, PATHINFO_BASENAME)));
150
-		}
151
-	}
150
+    }
151
+  }
152 152
 
153 153
   public function remove_all()
154 154
   {
155 155
     $filenames = $this->filenames();
156 156
 
157 157
     foreach($filenames as $filename)
158
-				$this->remove($filename);
158
+        $this->remove($filename);
159 159
 
160 160
     $directory = $this->build_path_to_directory();
161
-		if(file_exists($directory) === true)
161
+    if(file_exists($directory) === true)
162 162
     {
163 163
       if(is_dir($directory) === false)
164 164
         throw new PictureManagerException($this->get_type()."' directory '$directory' is not a directory");
165 165
 
166
-   		if(rmdir($directory) === false)
167
-  			throw new PictureManagerException("rmdir($directory) failed like a bitch");
166
+        if(rmdir($directory) === false)
167
+        throw new PictureManagerException("rmdir($directory) failed like a bitch");
168 168
     }
169 169
     else trigger_error($this->get_type()." $directory doesn't exist", E_USER_WARNING);
170 170
   }
@@ -181,7 +181,7 @@  discard block
 block discarded – undo
181 181
     foreach($pathes as $what => $path)
182 182
     {
183 183
       $error = null;
184
-  		if(!file_exists($path))
184
+      if(!file_exists($path))
185 185
         $error = 'file does not exist';
186 186
       elseif(unlink($path)===false)
187 187
         $error = 'unlink() failed';
@@ -235,16 +235,16 @@  discard block
 block discarded – undo
235 235
     global $settings;
236 236
     $pi_manager = new PictureManager($item, $picture_type);
237 237
 
238
-		$pictures = $pi_manager->filenames();
238
+    $pictures = $pi_manager->filenames();
239 239
 
240 240
     $item_model_type = get_class($item)::model_type();
241 241
     if(count($pictures)===0)
242 242
       return hopper::file_uri($settings[$item_model_type][$picture_type]['generic_picture']);
243 243
 
244
-		if($settings[$item_model_type][$picture_type]['cycle_on_load'])
245
-			$filename = $pictures[array_rand($pictures, 1)];
246
-		else
247
-			$filename = array_shift($pictures);
244
+    if($settings[$item_model_type][$picture_type]['cycle_on_load'])
245
+      $filename = $pictures[array_rand($pictures, 1)];
246
+    else
247
+      $filename = array_shift($pictures);
248 248
 
249 249
     return hopper::file_uri( $thumbnail===true ? $pi_manager->locate_thumbnail($filename) : $pi_manager->locate_file($filename));
250 250
   }
Please login to merge, or discard this patch.
Auth/ACL.class.php 1 patch
Indentation   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -9,9 +9,9 @@
 block discarded – undo
9 9
   const TABLE_ALIAS = 'acl';
10 10
 
11 11
   public function traceable() : bool
12
-	{
13
-		return false;
14
-	}
12
+  {
13
+    return false;
14
+  }
15 15
 
16 16
   public static function match(OperatorInterface $op, $permission_name)
17 17
   {
Please login to merge, or discard this patch.
Auth/Operatorability.class.php 1 patch
Indentation   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -45,8 +45,8 @@  discard block
 block discarded – undo
45 45
 
46 46
   public static function enhance_query_retrieve($Query, $filters, $options)
47 47
   {
48
-		$joined_alias = $Query->auto_join([ACL::table(),'ACL'], null, 'LEFT OUTER');
49
-		$joined_alias = $Query->auto_join([Permission::table(), 'permission'], null, 'LEFT OUTER');
48
+    $joined_alias = $Query->auto_join([ACL::table(),'ACL'], null, 'LEFT OUTER');
49
+    $joined_alias = $Query->auto_join([Permission::table(), 'permission'], null, 'LEFT OUTER');
50 50
 
51 51
     $permission_ids_and_names = [];
52 52
     $permission_ids_and_names []= sprintf('GROUP_CONCAT(DISTINCT %s.%s) as %s', $joined_alias, 'id', $joined_alias.'_ids');
@@ -67,7 +67,7 @@  discard block
 block discarded – undo
67 67
     return $Query;
68 68
   }
69 69
 
70
-	public function is_active() : bool
70
+  public function is_active() : bool
71 71
   {
72 72
     return is_null($this->operator()) ? false : $this->operator()->is_active();
73 73
   }
@@ -77,12 +77,12 @@  discard block
 block discarded – undo
77 77
     return is_null($this->operator()) ? null : $this->operator()->operator_id();
78 78
   }
79 79
 
80
-	public function username()
80
+  public function username()
81 81
   {
82 82
     return is_null($this->operator()) ? null : $this->operator()->username();
83 83
   }
84 84
 
85
-	public function password()
85
+  public function password()
86 86
   {
87 87
     return is_null($this->operator()) ? null : $this->operator()->password();
88 88
   }
@@ -97,22 +97,22 @@  discard block
 block discarded – undo
97 97
     return $this->operator()->password_verify($string);
98 98
   }
99 99
 
100
-	public function name()
100
+  public function name()
101 101
   {
102 102
     return is_null($this->operator()) ? null : $this->operator()->name();
103 103
   }
104 104
 
105
-	public function email()
105
+  public function email()
106 106
   {
107 107
     return is_null($this->operator()) ? null : $this->operator()->email();
108 108
   }
109 109
 
110
-	public function phone()
110
+  public function phone()
111 111
   {
112 112
     return is_null($this->operator()) ? null : $this->operator()->phone();
113 113
   }
114 114
 
115
-	public function language_code()
115
+  public function language_code()
116 116
   {
117 117
     return is_null($this->operator()) ? null : $this->operator()->language_code();
118 118
   }
Please login to merge, or discard this patch.
common.inc.php 1 patch
Indentation   +106 added lines, -106 removed lines patch added patch discarded remove patch
@@ -2,153 +2,153 @@
 block discarded – undo
2 2
 
3 3
 namespace HexMakina\kadro
4 4
 {
5
-	use \HexMakina\LocalFS\FileSystem;
5
+  use \HexMakina\LocalFS\FileSystem;
6 6
 
7
-	define('KADRO_BASE', APP_BASE.'/lib/kadro/'); // this is project dependant, should be in settings
8
-	// define('QIVIVE_BASE', APP_BASE.'/lib/qivive/'); // this is project dependant, should be in settings
7
+  define('KADRO_BASE', APP_BASE.'/lib/kadro/'); // this is project dependant, should be in settings
8
+  // define('QIVIVE_BASE', APP_BASE.'/lib/qivive/'); // this is project dependant, should be in settings
9 9
 
10
-	set_include_path(implode(PATH_SEPARATOR, [get_include_path(), APP_BASE.'/lib/', APP_BASE.'/vendor/', KADRO_BASE]));
10
+  set_include_path(implode(PATH_SEPARATOR, [get_include_path(), APP_BASE.'/lib/', APP_BASE.'/vendor/', KADRO_BASE]));
11 11
 
12
-	//---------------------------------------------------------------     autoloader
12
+  //---------------------------------------------------------------     autoloader
13 13
   require 'vendor/autoload.php';
14 14
 
15
-	require 'lib/kadro/PSR4Autoloader.class.php';
16
-	$loader=new PSR4Autoloader;
17
-	$loader->register(); //Register loader with SPL autoloader stack.
15
+  require 'lib/kadro/PSR4Autoloader.class.php';
16
+  $loader=new PSR4Autoloader;
17
+  $loader->register(); //Register loader with SPL autoloader stack.
18 18
 
19
-	$loader->addNamespace('HexMakina', APP_BASE.'/lib/');
19
+  $loader->addNamespace('HexMakina', APP_BASE.'/lib/');
20 20
 
21
-	// $loader->addNamespace('HexMakina\Crudites', APP_BASE.'/lib/Crudites/');
22
-	// $loader->addNamespace('HexMakina\ORM', APP_BASE.'/lib/ORM/');
23
-	// $loader->addNamespace('HexMakina\Lezer', APP_BASE.'/lib/Lezer/');
24
-	// $loader->addNamespace('HexMakina\Format', APP_BASE.'/lib/Format');
21
+  // $loader->addNamespace('HexMakina\Crudites', APP_BASE.'/lib/Crudites/');
22
+  // $loader->addNamespace('HexMakina\ORM', APP_BASE.'/lib/ORM/');
23
+  // $loader->addNamespace('HexMakina\Lezer', APP_BASE.'/lib/Lezer/');
24
+  // $loader->addNamespace('HexMakina\Format', APP_BASE.'/lib/Format');
25 25
 
26
-	// $loader->addNamespace('HexMakina\kadro', KADRO_BASE);
27
-	// $loader->addNamespace('HexMakina\qivive', QIVIVE_BASE);
28
-	// $loader->addNamespace('HexMakina\LocalFS', __DIR__.'/Format/File');
29
-	$loader->addNamespaceTree(KADRO_BASE);
26
+  // $loader->addNamespace('HexMakina\kadro', KADRO_BASE);
27
+  // $loader->addNamespace('HexMakina\qivive', QIVIVE_BASE);
28
+  // $loader->addNamespace('HexMakina\LocalFS', __DIR__.'/Format/File');
29
+  $loader->addNamespaceTree(KADRO_BASE);
30 30
 
31
-	//---------------------------------------------------------------     erara raportado
32
-	error_reporting(E_ALL);
31
+  //---------------------------------------------------------------     erara raportado
32
+  error_reporting(E_ALL);
33 33
 
34
-	set_error_handler('\HexMakina\kadro\Logger\LogLaddy::error_handler');
35
-	set_exception_handler('\HexMakina\kadro\Logger\LogLaddy::exception_handler');
34
+  set_error_handler('\HexMakina\kadro\Logger\LogLaddy::error_handler');
35
+  set_exception_handler('\HexMakina\kadro\Logger\LogLaddy::exception_handler');
36 36
 
37
-	\HexMakina\Debugger\Debugger::init();
37
+  \HexMakina\Debugger\Debugger::init();
38 38
 
39
-	//---------------------------------------------------------------     parametroj
40
-	require_once 'configs/settings.php';
41
-	$box=new Container\LeMarchand($settings);
39
+  //---------------------------------------------------------------     parametroj
40
+  require_once 'configs/settings.php';
41
+  $box=new Container\LeMarchand($settings);
42 42
 
43 43
   foreach($box->get('settings.app.namespaces') as $namespace => $path)
44 44
   {
45
-  	$loader->addNamespace($namespace, $path);
45
+    $loader->addNamespace($namespace, $path);
46 46
   }
47 47
 
48
-	define('PRODUCTION', $_SERVER['HTTP_HOST'] === $box->get('settings.app.production_host'));
49
-	ini_set('display_errors', PRODUCTION ? 0 : 1);
48
+  define('PRODUCTION', $_SERVER['HTTP_HOST'] === $box->get('settings.app.production_host'));
49
+  ini_set('display_errors', PRODUCTION ? 0 : 1);
50 50
 
51
-	//---------------------------------------------------------------       logger
52
-	$box->register('LoggerInterface', new Logger\LogLaddy());
51
+  //---------------------------------------------------------------       logger
52
+  $box->register('LoggerInterface', new Logger\LogLaddy());
53 53
 
54
-	//---------------------------------------------------------------       router
55
-	$box->register('RouterInterface', new Router\hopper($box->get('settings.RouterInterface')));
54
+  //---------------------------------------------------------------       router
55
+  $box->register('RouterInterface', new Router\hopper($box->get('settings.RouterInterface')));
56 56
 
57
-	//---------------------------------------------------------------        kuketoj
58
-	setcookie('cookie_test', 'test_value', time()+(365 * 24 * 60 * 60), "/", "");
59
-	$cookies_enabled=isset($_COOKIE['cookie_test']); // houston, do we have cookies ?
57
+  //---------------------------------------------------------------        kuketoj
58
+  setcookie('cookie_test', 'test_value', time()+(365 * 24 * 60 * 60), "/", "");
59
+  $cookies_enabled=isset($_COOKIE['cookie_test']); // houston, do we have cookies ?
60 60
 
61
-	if($cookies_enabled === false)
62
-	{
63
-		ini_set('session.use_cookies', 0);
64
-		ini_set('session.use_only_cookies', 0);
65
-		ini_set('session.use_trans_sid', 1);
66
-		ini_set('session.cache_limiter', 'nocache');
67
-	}
61
+  if($cookies_enabled === false)
62
+  {
63
+    ini_set('session.use_cookies', 0);
64
+    ini_set('session.use_only_cookies', 0);
65
+    ini_set('session.use_trans_sid', 1);
66
+    ini_set('session.cache_limiter', 'nocache');
67
+  }
68 68
 
69 69
 //---------------------------------------------------------------        Session Management
70
-	$StateAgent=new StateAgent($box->get('settings.app.session_start_options') ?? []);
71
-	$StateAgent->add_runtime_filters((array)$box->get('settings.filter'));
72
-	$StateAgent->add_runtime_filters((array)($_SESSION['filter'] ?? []));
73
-	$StateAgent->add_runtime_filters((array)($_REQUEST['filter'] ?? []));
70
+  $StateAgent=new StateAgent($box->get('settings.app.session_start_options') ?? []);
71
+  $StateAgent->add_runtime_filters((array)$box->get('settings.filter'));
72
+  $StateAgent->add_runtime_filters((array)($_SESSION['filter'] ?? []));
73
+  $StateAgent->add_runtime_filters((array)($_REQUEST['filter'] ?? []));
74 74
 
75
-	$box->register('StateAgent', $StateAgent);
75
+  $box->register('StateAgent', $StateAgent);
76 76
 
77 77
 
78
-	//---------------------------------------------------------------     parametroj:signo
78
+  //---------------------------------------------------------------     parametroj:signo
79 79
 
80
-	ini_set('default_charset', $box->get('settings.default.charset'));
81
-	header('Content-type: text/html; charset='.strtolower($box->get('settings.default.charset')));
80
+  ini_set('default_charset', $box->get('settings.default.charset'));
81
+  header('Content-type: text/html; charset='.strtolower($box->get('settings.default.charset')));
82 82
 
83
-	//---------------------------------------------------------------     parametroj:linguo
84
-	putenv('LANG='.$box->get('settings.default.language'));
85
-	setlocale(LC_ALL, $box->get('settings.default.language'));
83
+  //---------------------------------------------------------------     parametroj:linguo
84
+  putenv('LANG='.$box->get('settings.default.language'));
85
+  setlocale(LC_ALL, $box->get('settings.default.language'));
86 86
 
87
-	//---------------------------------------------------------------     parametroj:datoj
88
-	date_default_timezone_set($box->get('settings.default.timezone'));
87
+  //---------------------------------------------------------------     parametroj:datoj
88
+  date_default_timezone_set($box->get('settings.default.timezone'));
89 89
 
90 90
 
91
-	//---------------------------------------------------------------     ŝablonoj
92
-	require_once 'smarty/smarty/libs/Smarty.class.php';
93
-	// Load smarty template parser
94
-	if(is_null($box->get('settings.smarty.template_path')) || is_null($box->get('settings.smarty.compiled_path')))
95
-			throw new \Exception("SMARTY CONFIG ERROR: missing parameters");
91
+  //---------------------------------------------------------------     ŝablonoj
92
+  require_once 'smarty/smarty/libs/Smarty.class.php';
93
+  // Load smarty template parser
94
+  if(is_null($box->get('settings.smarty.template_path')) || is_null($box->get('settings.smarty.compiled_path')))
95
+      throw new \Exception("SMARTY CONFIG ERROR: missing parameters");
96 96
 
97
-	$smarty=new \Smarty();
98
-	$box->register('template_engine', $smarty);
97
+  $smarty=new \Smarty();
98
+  $box->register('template_engine', $smarty);
99 99
 
100
-	$smarty->setTemplateDir($box->get('RouterInterface')->file_root() . $box->get('settings.smarty.template_path').'app');
101
-	$smarty->addTemplateDir($box->get('RouterInterface')->file_root() . $box->get('settings.smarty.template_path'));
102
-	$smarty->addTemplateDir(KADRO_BASE . 'Views/');
100
+  $smarty->setTemplateDir($box->get('RouterInterface')->file_root() . $box->get('settings.smarty.template_path').'app');
101
+  $smarty->addTemplateDir($box->get('RouterInterface')->file_root() . $box->get('settings.smarty.template_path'));
102
+  $smarty->addTemplateDir(KADRO_BASE . 'Views/');
103 103
 
104
-	$smarty->setCompileDir(APP_BASE . $box->get('settings.smarty.compiled_path'));
105
-	$smarty->setDebugging($box->get('settings.smarty.debug'));
104
+  $smarty->setCompileDir(APP_BASE . $box->get('settings.smarty.compiled_path'));
105
+  $smarty->setDebugging($box->get('settings.smarty.debug'));
106 106
 
107
-	$smarty->registerClass('Lezer', 			'\HexMakina\Lezer\Lezer');
108
-	$smarty->registerClass('Marker', 			'\HexMakina\Format\HTML\Marker');
109
-	$smarty->registerClass('Form', 				'\HexMakina\Format\HTML\Form');
110
-	$smarty->registerClass('TableToForm',	'\HexMakina\kadro\TableToForm');
111
-	$smarty->registerClass('Dato', 				'\HexMakina\Format\Tempo\Dato');
107
+  $smarty->registerClass('Lezer', 			'\HexMakina\Lezer\Lezer');
108
+  $smarty->registerClass('Marker', 			'\HexMakina\Format\HTML\Marker');
109
+  $smarty->registerClass('Form', 				'\HexMakina\Format\HTML\Form');
110
+  $smarty->registerClass('TableToForm',	'\HexMakina\kadro\TableToForm');
111
+  $smarty->registerClass('Dato', 				'\HexMakina\Format\Tempo\Dato');
112 112
 
113
-	$smarty->assign('APP_NAME', $box->get('settings.app.name'));
113
+  $smarty->assign('APP_NAME', $box->get('settings.app.name'));
114 114
 
115
-	//---------------------------------------------------------------     lingva
115
+  //---------------------------------------------------------------     lingva
116 116
 
117
-	$languages=\HexMakina\Lezer\Lezer::languages_by_file(APP_BASE.'locale/');
117
+  $languages=\HexMakina\Lezer\Lezer::languages_by_file(APP_BASE.'locale/');
118 118
 
119 119
   $smarty->assign('languages', $languages);
120 120
 
121
-	$language=null;
122
-
123
-	// changing / setting the language
124
-	if(isset($_GET['lang']))
125
-	{
126
-		if(isset($languages[$_GET['lang']]))
127
-		{
128
-			$language=$_GET['lang'];
129
-			if($cookies_enabled === true)
130
-				setcookie('lang', $language, time()+(365 * 24 * 60 * 60), "/", "");
131
-			else
132
-				trigger_error('KADRO_SYSTEM_ERR_COOKIES_ARE_DISABLED_LANGUAGE_CANNOT_BE_STORED', E_USER_WARNING);
133
-		}
134
-		else
135
-			throw new \Exception('KADRO_SYSTEM_ERR_INVALID_PARAMETER');
136
-	}
137
-	else if($cookies_enabled === true && array_key_exists('lang', $_COOKIE) && array_key_exists($_COOKIE['lang'], $languages))
138
-		$language=$_COOKIE['lang'];
139
-
140
-	if(is_null($language) && !empty($languages))
141
-	{
142
-		if(count($languages) === 1)
143
-			$language=key($languages);
144
-		elseif(array_key_exists($box->get('settings.default.language'), $languages))
145
-			$language=$box->get('settings.default.language');
146
-		else
147
-			throw new \Exception('FALLBACK_TO_DEFAULT_LANGUAGE_FAILED');
148
-		$i18n = new \HexMakina\Lezer\Lezer(APP_BASE.'locale/'.$language.'/user_interface.json', APP_BASE.'locale/cache/', $language);
149
-		$i18n->init();
150
-		$smarty->assign('language', $language);
151
-	}
121
+  $language=null;
122
+
123
+  // changing / setting the language
124
+  if(isset($_GET['lang']))
125
+  {
126
+    if(isset($languages[$_GET['lang']]))
127
+    {
128
+      $language=$_GET['lang'];
129
+      if($cookies_enabled === true)
130
+        setcookie('lang', $language, time()+(365 * 24 * 60 * 60), "/", "");
131
+      else
132
+        trigger_error('KADRO_SYSTEM_ERR_COOKIES_ARE_DISABLED_LANGUAGE_CANNOT_BE_STORED', E_USER_WARNING);
133
+    }
134
+    else
135
+      throw new \Exception('KADRO_SYSTEM_ERR_INVALID_PARAMETER');
136
+  }
137
+  else if($cookies_enabled === true && array_key_exists('lang', $_COOKIE) && array_key_exists($_COOKIE['lang'], $languages))
138
+    $language=$_COOKIE['lang'];
139
+
140
+  if(is_null($language) && !empty($languages))
141
+  {
142
+    if(count($languages) === 1)
143
+      $language=key($languages);
144
+    elseif(array_key_exists($box->get('settings.default.language'), $languages))
145
+      $language=$box->get('settings.default.language');
146
+    else
147
+      throw new \Exception('FALLBACK_TO_DEFAULT_LANGUAGE_FAILED');
148
+    $i18n = new \HexMakina\Lezer\Lezer(APP_BASE.'locale/'.$language.'/user_interface.json', APP_BASE.'locale/cache/', $language);
149
+    $i18n->init();
150
+    $smarty->assign('language', $language);
151
+  }
152 152
 }
153 153
 
154 154
 ?>
Please login to merge, or discard this patch.
PSR4Autoloader.class.php 1 patch
Indentation   +45 added lines, -45 removed lines patch added patch discarded remove patch
@@ -7,18 +7,18 @@  discard block
 block discarded – undo
7 7
 {
8 8
   
9 9
   /**
10
-  * An associative array where the key is a namespace prefix and the value
11
-  * is an array of base directories for classes in that namespace.
12
-  *
13
-  * @var array
14
-  */
10
+   * An associative array where the key is a namespace prefix and the value
11
+   * is an array of base directories for classes in that namespace.
12
+   *
13
+   * @var array
14
+   */
15 15
   protected $prefixes = [];
16 16
 
17 17
   /**
18
-  * Register loader with SPL autoloader stack.
19
-  *
20
-  * @return void
21
-  */
18
+   * Register loader with SPL autoloader stack.
19
+   *
20
+   * @return void
21
+   */
22 22
 
23 23
   public function register()
24 24
   {
@@ -26,28 +26,28 @@  discard block
 block discarded – undo
26 26
   }
27 27
 
28 28
   /**
29
-  * Adds a base directory for a namespace prefix.
30
-  *
31
-  * @param string $prefix The namespace prefix.
32
-  * @param string $base_dir A base directory for class files in the
33
-  * namespace.
34
-  * @param bool $prepend If true, prepend the base directory to the stack
35
-  * instead of appending it; this causes it to be searched first rather
36
-  * than last.
37
-  * @return void
38
-  */
29
+   * Adds a base directory for a namespace prefix.
30
+   *
31
+   * @param string $prefix The namespace prefix.
32
+   * @param string $base_dir A base directory for class files in the
33
+   * namespace.
34
+   * @param bool $prepend If true, prepend the base directory to the stack
35
+   * instead of appending it; this causes it to be searched first rather
36
+   * than last.
37
+   * @return void
38
+   */
39 39
   public function addNamespaceTree($base_dir, $prepend = false)
40 40
   {
41
-  	$dir_content = FileSystem::preg_scandir($base_dir, '/^[A-Z]{1}[A-Za-z]+(?!\.class.\.php)$/');
41
+    $dir_content = FileSystem::preg_scandir($base_dir, '/^[A-Z]{1}[A-Za-z]+(?!\.class.\.php)$/');
42 42
     
43
-  	foreach($dir_content as $res)
44
-  	{
45
-  		if(is_dir($fullpath = $base_dir.'/'.$res))
46
-  		{
47
-  			$this->addNamespace('HexMakina\kadro\\'.$res, $fullpath);
43
+    foreach($dir_content as $res)
44
+    {
45
+      if(is_dir($fullpath = $base_dir.'/'.$res))
46
+      {
47
+        $this->addNamespace('HexMakina\kadro\\'.$res, $fullpath);
48 48
         $this->addNamespaceTree($fullpath);
49
-  		}
50
-  	}
49
+      }
50
+    }
51 51
   }
52 52
   
53 53
   public function addNamespace($prefix, $base_dir, $prepend = false)
@@ -73,12 +73,12 @@  discard block
 block discarded – undo
73 73
   }
74 74
 
75 75
   /**
76
-  * Loads the class file for a given class name.
77
-  *
78
-  * @param string $class The fully-qualified class name.
79
-  * @return mixed The mapped file name on success, or boolean false on
80
-  * failure.
81
-  */
76
+   * Loads the class file for a given class name.
77
+   *
78
+   * @param string $class The fully-qualified class name.
79
+   * @return mixed The mapped file name on success, or boolean false on
80
+   * failure.
81
+   */
82 82
   public function loadClass($class)
83 83
   {
84 84
     // var_dump(__FUNCTION__."($class)");
@@ -110,13 +110,13 @@  discard block
 block discarded – undo
110 110
   }
111 111
 
112 112
   /**
113
-  * Load the mapped file for a namespace prefix and relative class.
114
-  *
115
-  * @param string $prefix The namespace prefix.
116
-  * @param string $relative_class The relative class name.
117
-  * @return mixed Boolean false if no mapped file can be loaded, or the
118
-  * name of the mapped file that was loaded.
119
-  */
113
+   * Load the mapped file for a namespace prefix and relative class.
114
+   *
115
+   * @param string $prefix The namespace prefix.
116
+   * @param string $relative_class The relative class name.
117
+   * @return mixed Boolean false if no mapped file can be loaded, or the
118
+   * name of the mapped file that was loaded.
119
+   */
120 120
   protected function loadMappedFile($prefix, $relative_class)
121 121
   {
122 122
     // are there any base directories for this namespace prefix?
@@ -147,11 +147,11 @@  discard block
 block discarded – undo
147 147
   }
148 148
 
149 149
   /**
150
-  * If a file exists, require it from the file system.
151
-  *
152
-  * @param string $file The file to require.
153
-  * @return bool True if the file exists, false if not.
154
-  */
150
+   * If a file exists, require it from the file system.
151
+   *
152
+   * @param string $file The file to require.
153
+   * @return bool True if the file exists, false if not.
154
+   */
155 155
   protected function requireFile($file)
156 156
   {
157 157
     // var_dump(__FUNCTION__."($file)");
Please login to merge, or discard this patch.
Router/hopper.class.php 1 patch
Indentation   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -192,8 +192,8 @@
 block discarded – undo
192 192
 
193 193
   public function hop_url($url)
194 194
   {
195
-  	header('Cache-Control: no-cache, must-revalidate');
196
-  	header('Expires: Mon, 01 Jan 1970 00:00:00 GMT');
195
+    header('Cache-Control: no-cache, must-revalidate');
196
+    header('Expires: Mon, 01 Jan 1970 00:00:00 GMT');
197 197
     header('Location: '.$url);
198 198
     exit();
199 199
   }
Please login to merge, or discard this patch.
Router/AltoRouter.php 1 patch
Indentation   +261 added lines, -261 removed lines patch added patch discarded remove patch
@@ -2,266 +2,266 @@
 block discarded – undo
2 2
 
3 3
 class AltoRouter {
4 4
 
5
-	/**
6
-	 * @var array Array of all routes (incl. named routes).
7
-	 */
8
-	protected $routes = [];
9
-
10
-	/**
11
-	 * @var array Array of all named routes.
12
-	 */
13
-	protected $namedRoutes = [];
14
-
15
-	/**
16
-	 * @var string Can be used to ignore leading part of the Request URL (if main file lives in subdirectory of host)
17
-	 */
18
-	protected $basePath = '';
19
-
20
-	/**
21
-	 * @var array Array of default match types (regex helpers)
22
-	 */
23
-	protected $matchTypes = array(
24
-		'i'  => '[0-9]++',
25
-		'a'  => '[0-9A-Za-z]++',
26
-		'h'  => '[0-9A-Fa-f]++',
27
-		'*'  => '.+?',
28
-		'**' => '.++',
29
-		''   => '[^/\.]++'
30
-	);
31
-
32
-	/**
33
-	  * Create router in one call from config.
34
-	  *
35
-	  * @param array $routes
36
-	  * @param string $basePath
37
-	  * @param array $matchTypes
38
-	  */
39
-	public function __construct( $routes = array(), $basePath = '', $matchTypes = array() ) {
40
-		$this->addRoutes($routes);
41
-		$this->setBasePath($basePath);
42
-		$this->addMatchTypes($matchTypes);
43
-	}
44
-
45
-	/**
46
-	 * Retrieves all routes.
47
-	 * Useful if you want to process or display routes.
48
-	 * @return array All routes.
49
-	 */
50
-	public function getRoutes() {
51
-		return $this->routes;
52
-	}
53
-
54
-	/**
55
-	 * Add multiple routes at once from array in the following format:
56
-	 *
57
-	 *   $routes = array(
58
-	 *      array($method, $route, $target, $name)
59
-	 *   );
60
-	 *
61
-	 * @param array $routes
62
-	 * @return void
63
-	 * @author Koen Punt
64
-	 * @throws Exception
65
-	 */
66
-	public function addRoutes($routes){
67
-		if(!is_array($routes) && !$routes instanceof Traversable) {
68
-			throw new \Exception('Routes should be an array or an instance of Traversable');
69
-		}
70
-		foreach($routes as $route) {
71
-			call_user_func_array(array($this, 'map'), $route);
72
-		}
73
-	}
74
-
75
-	/**
76
-	 * Set the base path.
77
-	 * Useful if you are running your application from a subdirectory.
78
-	 */
79
-	public function setBasePath($basePath) {
80
-		$this->basePath = $basePath;
81
-	}
82
-
83
-	/**
84
-	 * Add named match types. It uses array_merge so keys can be overwritten.
85
-	 *
86
-	 * @param array $matchTypes The key is the name and the value is the regex.
87
-	 */
88
-	public function addMatchTypes($matchTypes) {
89
-		$this->matchTypes = array_merge($this->matchTypes, $matchTypes);
90
-	}
91
-
92
-	/**
93
-	 * Map a route to a target
94
-	 *
95
-	 * @param string $method One of 5 HTTP Methods, or a pipe-separated list of multiple HTTP Methods (GET|POST|PATCH|PUT|DELETE)
96
-	 * @param string $route The route regex, custom regex must start with an @. You can use multiple pre-set regex filters, like [i:id]
97
-	 * @param mixed $target The target where this route should point to. Can be anything.
98
-	 * @param string $name Optional name of this route. Supply if you want to reverse route this url in your application.
99
-	 * @throws Exception
100
-	 */
101
-	public function map($method, $route, $target, $name = null) {
102
-
103
-		$this->routes[] = array($method, $route, $target, $name);
104
-
105
-		if($name) {
106
-			if(isset($this->namedRoutes[$name])) {
107
-				throw new \Exception("Can not redeclare route '{$name}'");
108
-			} else {
109
-				$this->namedRoutes[$name] = $route;
110
-			}
111
-
112
-		}
113
-
114
-		return;
115
-	}
116
-
117
-	/**
118
-	 * Reversed routing
119
-	 *
120
-	 * Generate the URL for a named route. Replace regexes with supplied parameters
121
-	 *
122
-	 * @param string $routeName The name of the route.
123
-	 * @param array @params Associative array of parameters to replace placeholders with.
124
-	 * @return string The URL of the route with named parameters in place.
125
-	 * @throws Exception
126
-	 */
127
-	public function generate($routeName, array $params = array()) {
128
-
129
-		// Check if named route exists
130
-		if(!isset($this->namedRoutes[$routeName])) {
131
-			throw new \Exception("Route '{$routeName}' does not exist.");
132
-		}
133
-
134
-		// Replace named parameters
135
-		$route = $this->namedRoutes[$routeName];
136
-
137
-		// prepend base path to route url again
138
-		$url = $this->basePath . $route;
139
-
140
-		if (preg_match_all('`(/|\.|)\[([^:\]]*+)(?::([^:\]]*+))?\](\?|)`', $route, $matches, PREG_SET_ORDER)) {
141
-
142
-			foreach($matches as $match) {
143
-				list($block, $pre, $type, $param, $optional) = $match;
144
-
145
-				if ($pre) {
146
-					$block = substr($block, 1);
147
-				}
148
-
149
-				if(isset($params[$param])) {
150
-					$url = str_replace($block, $params[$param], $url);
151
-				} elseif ($optional) {
152
-					$url = str_replace($pre . $block, '', $url);
153
-				}
154
-			}
155
-
156
-
157
-		}
158
-
159
-		return $url;
160
-	}
161
-
162
-	/**
163
-	 * Match a given Request Url against stored routes
164
-	 * @param string $requestUrl
165
-	 * @param string $requestMethod
166
-	 * @return array|boolean Array with route information on success, false on failure (no match).
167
-	 */
168
-	public function match($requestUrl = null, $requestMethod = null) {
169
-
170
-		$params = [];
171
-		$match = false;
172
-
173
-		// set Request Url if it isn't passed as parameter
174
-		if($requestUrl === null) {
175
-			$requestUrl = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '/';
176
-		}
177
-
178
-		// strip base path from request url
179
-		$requestUrl = substr($requestUrl, strlen($this->basePath));
5
+  /**
6
+   * @var array Array of all routes (incl. named routes).
7
+   */
8
+  protected $routes = [];
9
+
10
+  /**
11
+   * @var array Array of all named routes.
12
+   */
13
+  protected $namedRoutes = [];
14
+
15
+  /**
16
+   * @var string Can be used to ignore leading part of the Request URL (if main file lives in subdirectory of host)
17
+   */
18
+  protected $basePath = '';
19
+
20
+  /**
21
+   * @var array Array of default match types (regex helpers)
22
+   */
23
+  protected $matchTypes = array(
24
+    'i'  => '[0-9]++',
25
+    'a'  => '[0-9A-Za-z]++',
26
+    'h'  => '[0-9A-Fa-f]++',
27
+    '*'  => '.+?',
28
+    '**' => '.++',
29
+    ''   => '[^/\.]++'
30
+  );
31
+
32
+  /**
33
+   * Create router in one call from config.
34
+   *
35
+   * @param array $routes
36
+   * @param string $basePath
37
+   * @param array $matchTypes
38
+   */
39
+  public function __construct( $routes = array(), $basePath = '', $matchTypes = array() ) {
40
+    $this->addRoutes($routes);
41
+    $this->setBasePath($basePath);
42
+    $this->addMatchTypes($matchTypes);
43
+  }
44
+
45
+  /**
46
+   * Retrieves all routes.
47
+   * Useful if you want to process or display routes.
48
+   * @return array All routes.
49
+   */
50
+  public function getRoutes() {
51
+    return $this->routes;
52
+  }
53
+
54
+  /**
55
+   * Add multiple routes at once from array in the following format:
56
+   *
57
+   *   $routes = array(
58
+   *      array($method, $route, $target, $name)
59
+   *   );
60
+   *
61
+   * @param array $routes
62
+   * @return void
63
+   * @author Koen Punt
64
+   * @throws Exception
65
+   */
66
+  public function addRoutes($routes){
67
+    if(!is_array($routes) && !$routes instanceof Traversable) {
68
+      throw new \Exception('Routes should be an array or an instance of Traversable');
69
+    }
70
+    foreach($routes as $route) {
71
+      call_user_func_array(array($this, 'map'), $route);
72
+    }
73
+  }
74
+
75
+  /**
76
+   * Set the base path.
77
+   * Useful if you are running your application from a subdirectory.
78
+   */
79
+  public function setBasePath($basePath) {
80
+    $this->basePath = $basePath;
81
+  }
82
+
83
+  /**
84
+   * Add named match types. It uses array_merge so keys can be overwritten.
85
+   *
86
+   * @param array $matchTypes The key is the name and the value is the regex.
87
+   */
88
+  public function addMatchTypes($matchTypes) {
89
+    $this->matchTypes = array_merge($this->matchTypes, $matchTypes);
90
+  }
91
+
92
+  /**
93
+   * Map a route to a target
94
+   *
95
+   * @param string $method One of 5 HTTP Methods, or a pipe-separated list of multiple HTTP Methods (GET|POST|PATCH|PUT|DELETE)
96
+   * @param string $route The route regex, custom regex must start with an @. You can use multiple pre-set regex filters, like [i:id]
97
+   * @param mixed $target The target where this route should point to. Can be anything.
98
+   * @param string $name Optional name of this route. Supply if you want to reverse route this url in your application.
99
+   * @throws Exception
100
+   */
101
+  public function map($method, $route, $target, $name = null) {
102
+
103
+    $this->routes[] = array($method, $route, $target, $name);
104
+
105
+    if($name) {
106
+      if(isset($this->namedRoutes[$name])) {
107
+        throw new \Exception("Can not redeclare route '{$name}'");
108
+      } else {
109
+        $this->namedRoutes[$name] = $route;
110
+      }
111
+
112
+    }
113
+
114
+    return;
115
+  }
116
+
117
+  /**
118
+   * Reversed routing
119
+   *
120
+   * Generate the URL for a named route. Replace regexes with supplied parameters
121
+   *
122
+   * @param string $routeName The name of the route.
123
+   * @param array @params Associative array of parameters to replace placeholders with.
124
+   * @return string The URL of the route with named parameters in place.
125
+   * @throws Exception
126
+   */
127
+  public function generate($routeName, array $params = array()) {
128
+
129
+    // Check if named route exists
130
+    if(!isset($this->namedRoutes[$routeName])) {
131
+      throw new \Exception("Route '{$routeName}' does not exist.");
132
+    }
133
+
134
+    // Replace named parameters
135
+    $route = $this->namedRoutes[$routeName];
136
+
137
+    // prepend base path to route url again
138
+    $url = $this->basePath . $route;
139
+
140
+    if (preg_match_all('`(/|\.|)\[([^:\]]*+)(?::([^:\]]*+))?\](\?|)`', $route, $matches, PREG_SET_ORDER)) {
141
+
142
+      foreach($matches as $match) {
143
+        list($block, $pre, $type, $param, $optional) = $match;
144
+
145
+        if ($pre) {
146
+          $block = substr($block, 1);
147
+        }
148
+
149
+        if(isset($params[$param])) {
150
+          $url = str_replace($block, $params[$param], $url);
151
+        } elseif ($optional) {
152
+          $url = str_replace($pre . $block, '', $url);
153
+        }
154
+      }
155
+
156
+
157
+    }
158
+
159
+    return $url;
160
+  }
161
+
162
+  /**
163
+   * Match a given Request Url against stored routes
164
+   * @param string $requestUrl
165
+   * @param string $requestMethod
166
+   * @return array|boolean Array with route information on success, false on failure (no match).
167
+   */
168
+  public function match($requestUrl = null, $requestMethod = null) {
169
+
170
+    $params = [];
171
+    $match = false;
172
+
173
+    // set Request Url if it isn't passed as parameter
174
+    if($requestUrl === null) {
175
+      $requestUrl = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '/';
176
+    }
177
+
178
+    // strip base path from request url
179
+    $requestUrl = substr($requestUrl, strlen($this->basePath));
180 180
     
181
-		// Strip query string (?a=b) from Request Url
182
-		if (($strpos = strpos($requestUrl, '?')) !== false) {
183
-			$requestUrl = substr($requestUrl, 0, $strpos);
184
-		}
185
-
186
-		// set Request Method if it isn't passed as a parameter
187
-		if($requestMethod === null) {
188
-			$requestMethod = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : 'GET';
189
-		}
190
-
191
-		foreach($this->routes as $handler) {
192
-			list($methods, $route, $target, $name) = $handler;
193
-			$method_match = (stripos($methods, $requestMethod) !== false);
194
-
195
-			// Method did not match, continue to next route.
196
-			if (!$method_match) continue;
197
-
198
-			if ($route === '*') {
199
-				// * wildcard (matches all)
200
-				$match = true;
201
-			} elseif (isset($route[0]) && $route[0] === '@') {
202
-				// @ regex delimiter
203
-				$pattern = '`' . substr($route, 1) . '`u';
204
-				$match = preg_match($pattern, $requestUrl, $params) === 1;
205
-			} elseif (($position = strpos($route, '[')) === false) {
206
-				// No params in url, do string comparison
207
-				$match = strcmp($requestUrl, $route) === 0;
208
-			} else {
209
-				// Compare longest non-param string with url
210
-				if (strncmp($requestUrl, $route, $position) !== 0) {
211
-					continue;
212
-				}
213
-				$regex = $this->compileRoute($route);
214
-				$match = preg_match($regex, $requestUrl, $params) === 1;
215
-			}
216
-
217
-			if ($match) {
218
-
219
-				if ($params) {
220
-					foreach($params as $key => $value) {
221
-						if(is_numeric($key)) unset($params[$key]);
222
-					}
223
-				}
224
-
225
-				return array(
226
-					'target' => $target,
227
-					'params' => $params,
228
-					'name' => $name
229
-				);
230
-			}
231
-		}
232
-		return false;
233
-	}
234
-
235
-	/**
236
-	 * Compile the regex for a given route (EXPENSIVE)
237
-	 */
238
-	private function compileRoute($route) {
239
-		if (preg_match_all('`(/|\.|)\[([^:\]]*+)(?::([^:\]]*+))?\](\?|)`', $route, $matches, PREG_SET_ORDER)) {
240
-
241
-			$matchTypes = $this->matchTypes;
242
-			foreach($matches as $match) {
243
-				list($block, $pre, $type, $param, $optional) = $match;
244
-
245
-				if (isset($matchTypes[$type])) {
246
-					$type = $matchTypes[$type];
247
-				}
248
-				if ($pre === '.') {
249
-					$pre = '\.';
250
-				}
251
-
252
-				//Older versions of PCRE require the 'P' in (?P<named>)
253
-				$pattern = '(?:'
254
-						. ($pre !== '' ? $pre : null)
255
-						. '('
256
-						. ($param !== '' ? "?P<$param>" : null)
257
-						. $type
258
-						. '))'
259
-						. ($optional !== '' ? '?' : null);
260
-
261
-				$route = str_replace($block, $pattern, $route);
262
-			}
263
-
264
-		}
265
-		return "`^$route$`u";
266
-	}
181
+    // Strip query string (?a=b) from Request Url
182
+    if (($strpos = strpos($requestUrl, '?')) !== false) {
183
+      $requestUrl = substr($requestUrl, 0, $strpos);
184
+    }
185
+
186
+    // set Request Method if it isn't passed as a parameter
187
+    if($requestMethod === null) {
188
+      $requestMethod = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : 'GET';
189
+    }
190
+
191
+    foreach($this->routes as $handler) {
192
+      list($methods, $route, $target, $name) = $handler;
193
+      $method_match = (stripos($methods, $requestMethod) !== false);
194
+
195
+      // Method did not match, continue to next route.
196
+      if (!$method_match) continue;
197
+
198
+      if ($route === '*') {
199
+        // * wildcard (matches all)
200
+        $match = true;
201
+      } elseif (isset($route[0]) && $route[0] === '@') {
202
+        // @ regex delimiter
203
+        $pattern = '`' . substr($route, 1) . '`u';
204
+        $match = preg_match($pattern, $requestUrl, $params) === 1;
205
+      } elseif (($position = strpos($route, '[')) === false) {
206
+        // No params in url, do string comparison
207
+        $match = strcmp($requestUrl, $route) === 0;
208
+      } else {
209
+        // Compare longest non-param string with url
210
+        if (strncmp($requestUrl, $route, $position) !== 0) {
211
+          continue;
212
+        }
213
+        $regex = $this->compileRoute($route);
214
+        $match = preg_match($regex, $requestUrl, $params) === 1;
215
+      }
216
+
217
+      if ($match) {
218
+
219
+        if ($params) {
220
+          foreach($params as $key => $value) {
221
+            if(is_numeric($key)) unset($params[$key]);
222
+          }
223
+        }
224
+
225
+        return array(
226
+          'target' => $target,
227
+          'params' => $params,
228
+          'name' => $name
229
+        );
230
+      }
231
+    }
232
+    return false;
233
+  }
234
+
235
+  /**
236
+   * Compile the regex for a given route (EXPENSIVE)
237
+   */
238
+  private function compileRoute($route) {
239
+    if (preg_match_all('`(/|\.|)\[([^:\]]*+)(?::([^:\]]*+))?\](\?|)`', $route, $matches, PREG_SET_ORDER)) {
240
+
241
+      $matchTypes = $this->matchTypes;
242
+      foreach($matches as $match) {
243
+        list($block, $pre, $type, $param, $optional) = $match;
244
+
245
+        if (isset($matchTypes[$type])) {
246
+          $type = $matchTypes[$type];
247
+        }
248
+        if ($pre === '.') {
249
+          $pre = '\.';
250
+        }
251
+
252
+        //Older versions of PCRE require the 'P' in (?P<named>)
253
+        $pattern = '(?:'
254
+            . ($pre !== '' ? $pre : null)
255
+            . '('
256
+            . ($param !== '' ? "?P<$param>" : null)
257
+            . $type
258
+            . '))'
259
+            . ($optional !== '' ? '?' : null);
260
+
261
+        $route = str_replace($block, $pattern, $route);
262
+      }
263
+
264
+    }
265
+    return "`^$route$`u";
266
+  }
267 267
 }
Please login to merge, or discard this patch.