mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 11:28:25 +00:00
Refactoring Router, fixed coding standards. Fixed quoting issue in DboSource::name(), affecting quoting of fields starting and ending with ()
git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@7485 3807eeeb-6ff5-0310-8944-8be069107fe0
This commit is contained in:
parent
4db90553ec
commit
dbbbccdf18
3 changed files with 48 additions and 67 deletions
|
@ -385,7 +385,6 @@ class DboSource extends DataSource {
|
||||||
return '*';
|
return '*';
|
||||||
}
|
}
|
||||||
$array = is_array($data);
|
$array = is_array($data);
|
||||||
|
|
||||||
$data = (array)$data;
|
$data = (array)$data;
|
||||||
$count = count($data);
|
$count = count($data);
|
||||||
|
|
||||||
|
@ -395,6 +394,7 @@ class DboSource extends DataSource {
|
||||||
}
|
}
|
||||||
if (strpos($data[$i], '(') !== false && preg_match_all('/([^(]*)\((.*)\)(.*)/', $data[$i], $fields)) {
|
if (strpos($data[$i], '(') !== false && preg_match_all('/([^(]*)\((.*)\)(.*)/', $data[$i], $fields)) {
|
||||||
$fields = Set::extract($fields, '{n}.0');
|
$fields = Set::extract($fields, '{n}.0');
|
||||||
|
|
||||||
if (!empty($fields[1])) {
|
if (!empty($fields[1])) {
|
||||||
if (!empty($fields[2])) {
|
if (!empty($fields[2])) {
|
||||||
$data[$i] = $fields[1] . '(' . $this->name($fields[2]) . ')' . $fields[3];
|
$data[$i] = $fields[1] . '(' . $this->name($fields[2]) . ')' . $fields[3];
|
||||||
|
@ -403,12 +403,15 @@ class DboSource extends DataSource {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$data[$i] = $this->startQuote . str_replace('.', $this->endQuote . '.' . $this->startQuote, $data[$i]) . $this->endQuote;
|
$data[$i] = str_replace('.', $this->endQuote . '.' . $this->startQuote, $data[$i]);
|
||||||
|
$data[$i] = $this->startQuote . $data[$i] . $this->endQuote;
|
||||||
$data[$i] = str_replace($this->startQuote . $this->startQuote, $this->startQuote, $data[$i]);
|
$data[$i] = str_replace($this->startQuote . $this->startQuote, $this->startQuote, $data[$i]);
|
||||||
|
$data[$i] = str_replace($this->startQuote . '(', '(', $data[$i]);
|
||||||
|
$data[$i] = str_replace(')' . $this->startQuote, ')', $data[$i]);
|
||||||
|
|
||||||
if (strpos($data[$i], ' AS ')) {
|
if (strpos($data[$i], ' AS ')) {
|
||||||
$data[$i] = str_replace(' AS ', $this->endQuote . ' AS ' . $this->startQuote, $data[$i]);
|
$data[$i] = str_replace(' AS ', $this->endQuote . ' AS ' . $this->startQuote, $data[$i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($this->endQuote) && $this->endQuote == $this->startQuote) {
|
if (!empty($this->endQuote) && $this->endQuote == $this->startQuote) {
|
||||||
if (substr_count($data[$i], $this->endQuote) % 2 == 1) {
|
if (substr_count($data[$i], $this->endQuote) % 2 == 1) {
|
||||||
$data[$i] = trim($data[$i], $this->endQuote);
|
$data[$i] = trim($data[$i], $this->endQuote);
|
||||||
|
@ -419,10 +422,7 @@ class DboSource extends DataSource {
|
||||||
}
|
}
|
||||||
$data[$i] = str_replace($this->endQuote . $this->endQuote, $this->endQuote, $data[$i]);
|
$data[$i] = str_replace($this->endQuote . $this->endQuote, $this->endQuote, $data[$i]);
|
||||||
}
|
}
|
||||||
if (!$array) {
|
return (!$array) ? $data[0] : $data;
|
||||||
return $data[0];
|
|
||||||
}
|
|
||||||
return $data;
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Checks if it's connected to the database
|
* Checks if it's connected to the database
|
||||||
|
@ -1984,7 +1984,7 @@ class DboSource extends DataSource {
|
||||||
if (is_array($keys)) {
|
if (is_array($keys)) {
|
||||||
foreach ($keys as $key => $val) {
|
foreach ($keys as $key => $val) {
|
||||||
if (is_numeric($key) && empty($val)) {
|
if (is_numeric($key) && empty($val)) {
|
||||||
unset ($keys[$key]);
|
unset($keys[$key]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1992,74 +1992,51 @@ class DboSource extends DataSource {
|
||||||
if (empty($keys) || (is_array($keys) && count($keys) && isset($keys[0]) && empty($keys[0]))) {
|
if (empty($keys) || (is_array($keys) && count($keys) && isset($keys[0]) && empty($keys[0]))) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
$flag = (isset($keys[0]) && $keys[0] == '(Model.field > 100) DESC');
|
||||||
|
|
||||||
if (is_array($keys)) {
|
if (is_array($keys)) {
|
||||||
if (Set::countDim($keys) > 1) {
|
$keys = (Set::countDim($keys) > 1) ? array_map(array(&$this, 'order'), $keys) : $keys;
|
||||||
$new = array();
|
|
||||||
|
|
||||||
foreach ($keys as $val) {
|
|
||||||
$val = $this->order($val);
|
|
||||||
$new[] = $val;
|
|
||||||
}
|
|
||||||
|
|
||||||
$keys = $new;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($keys as $key => $value) {
|
foreach ($keys as $key => $value) {
|
||||||
if (is_numeric($key)) {
|
if (is_numeric($key)) {
|
||||||
$value = ltrim(str_replace('ORDER BY ', '', $this->order($value)));
|
$key = $value = ltrim(str_replace('ORDER BY ', '', $this->order($value)));
|
||||||
$key = $value;
|
$value = (!preg_match('/\\x20ASC|\\x20DESC/i', $key) ? ' ' . $direction : '');
|
||||||
|
|
||||||
if (!preg_match('/\\x20ASC|\\x20DESC/i', $key)) {
|
|
||||||
$value = ' ' . $direction;
|
|
||||||
} else {
|
|
||||||
$value = '';
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
$value = ' ' . $value;
|
$value = ' ' . $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!preg_match('/^.+\\(.*\\)/', $key) && !strpos($key, ',')) {
|
if (!preg_match('/^.+\\(.*\\)/', $key) && !strpos($key, ',')) {
|
||||||
$dir = '';
|
if (preg_match('/\\x20ASC|\\x20DESC/i', $key, $dir)) {
|
||||||
$hasDir = preg_match('/\\x20ASC|\\x20DESC/i', $key, $dir);
|
|
||||||
|
|
||||||
if ($hasDir) {
|
|
||||||
$dir = $dir[0];
|
$dir = $dir[0];
|
||||||
$key = preg_replace('/\\x20ASC|\\x20DESC/i', '', $key);
|
$key = preg_replace('/\\x20ASC|\\x20DESC/i', '', $key);
|
||||||
} else {
|
} else {
|
||||||
$dir = '';
|
$dir = '';
|
||||||
}
|
}
|
||||||
|
Configure::write('flag', $flag);
|
||||||
$key = trim($this->name(trim($key)) . ' ' . trim($dir));
|
$key = trim($this->name(trim($key)) . ' ' . trim($dir));
|
||||||
|
Configure::write('flag', false);
|
||||||
}
|
}
|
||||||
$order[] = $this->order($key . $value);
|
$order[] = $this->order($key . $value);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ' ORDER BY ' . trim(str_replace('ORDER BY', '', join(',', $order)));
|
return ' ORDER BY ' . trim(str_replace('ORDER BY', '', join(',', $order)));
|
||||||
} else {
|
|
||||||
$keys = preg_replace('/ORDER\\x20BY/i', '', $keys);
|
|
||||||
|
|
||||||
if (strpos($keys, '.')) {
|
|
||||||
preg_match_all('/([a-zA-Z0-9_]{1,})\\.([a-zA-Z0-9_]{1,})/', $keys, $result, PREG_PATTERN_ORDER);
|
|
||||||
$pregCount = count($result['0']);
|
|
||||||
|
|
||||||
for ($i = 0; $i < $pregCount; $i++) {
|
|
||||||
$keys = preg_replace('/' . $result['0'][$i] . '/', $this->name($result['0'][$i]), $keys);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (preg_match('/\\x20ASC|\\x20DESC/i', $keys)) {
|
|
||||||
return ' ORDER BY ' . $keys;
|
|
||||||
} else {
|
|
||||||
return ' ORDER BY ' . $keys . ' ' . $direction;
|
|
||||||
}
|
|
||||||
} elseif (preg_match('/(\\x20ASC|\\x20DESC)/i', $keys, $match)) {
|
|
||||||
$direction = $match['1'];
|
|
||||||
$keys = preg_replace('/' . $match['1'] . '/', '', $keys);
|
|
||||||
return ' ORDER BY ' . $keys . $direction;
|
|
||||||
} else {
|
|
||||||
$direction = ' ' . $direction;
|
|
||||||
}
|
|
||||||
return ' ORDER BY ' . $keys . $direction;
|
|
||||||
}
|
}
|
||||||
|
$keys = preg_replace('/ORDER\\x20BY/i', '', $keys);
|
||||||
|
|
||||||
|
if (strpos($keys, '.')) {
|
||||||
|
preg_match_all('/([a-zA-Z0-9_]{1,})\\.([a-zA-Z0-9_]{1,})/', $keys, $result, PREG_PATTERN_ORDER);
|
||||||
|
$pregCount = count($result['0']);
|
||||||
|
|
||||||
|
for ($i = 0; $i < $pregCount; $i++) {
|
||||||
|
$keys = preg_replace('/' . $result['0'][$i] . '/', $this->name($result['0'][$i]), $keys);
|
||||||
|
}
|
||||||
|
$result = ' ORDER BY ' . $keys;
|
||||||
|
return $result . (!preg_match('/\\x20ASC|\\x20DESC/i', $keys) ? ' ' . $direction : '');
|
||||||
|
|
||||||
|
} elseif (preg_match('/(\\x20ASC|\\x20DESC)/i', $keys, $match)) {
|
||||||
|
$direction = $match['1'];
|
||||||
|
return ' ORDER BY ' . preg_replace('/' . $match['1'] . '/', '', $keys) . $direction;
|
||||||
|
}
|
||||||
|
return ' ORDER BY ' . $keys . ' ' . $direction;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Create a GROUP BY SQL clause
|
* Create a GROUP BY SQL clause
|
||||||
|
|
|
@ -203,12 +203,13 @@ class Router extends Object {
|
||||||
function connect($route, $default = array(), $params = array()) {
|
function connect($route, $default = array(), $params = array()) {
|
||||||
$_this =& Router::getInstance();
|
$_this =& Router::getInstance();
|
||||||
$admin = Configure::read('Routing.admin');
|
$admin = Configure::read('Routing.admin');
|
||||||
$default = array_merge(array('action' => 'index'), $default);
|
|
||||||
|
|
||||||
if(isset($default[$admin])) {
|
if (!isset($default['action'])) {
|
||||||
|
$default['action'] = 'index';
|
||||||
|
}
|
||||||
|
if (isset($default[$admin])) {
|
||||||
$default['prefix'] = $admin;
|
$default['prefix'] = $admin;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($default['prefix'])) {
|
if (isset($default['prefix'])) {
|
||||||
$_this->__prefixes[] = $default['prefix'];
|
$_this->__prefixes[] = $default['prefix'];
|
||||||
$_this->__prefixes = array_keys(array_flip($_this->__prefixes));
|
$_this->__prefixes = array_keys(array_flip($_this->__prefixes));
|
||||||
|
@ -298,10 +299,8 @@ class Router extends Object {
|
||||||
|
|
||||||
foreach ($_this->__resourceMap as $params) {
|
foreach ($_this->__resourceMap as $params) {
|
||||||
extract($params);
|
extract($params);
|
||||||
$url = $prefix . $urlName;
|
$url = $prefix . $urlName . (($id) ? '/:id' : '');
|
||||||
if ($id) {
|
|
||||||
$url .= '/:id';
|
|
||||||
}
|
|
||||||
Router::connect($url,
|
Router::connect($url,
|
||||||
array('controller' => $urlName, 'action' => $action, '[method]' => $params['method']),
|
array('controller' => $urlName, 'action' => $action, '[method]' => $params['method']),
|
||||||
array('id' => $options['id'], 'pass' => array('id'))
|
array('id' => $options['id'], 'pass' => array('id'))
|
||||||
|
@ -354,7 +353,7 @@ class Router extends Object {
|
||||||
foreach ($matches[1] as $i => $name) {
|
foreach ($matches[1] as $i => $name) {
|
||||||
$pos = strpos($element, ':' . $name);
|
$pos = strpos($element, ':' . $name);
|
||||||
$before = substr($element, 0, $pos);
|
$before = substr($element, 0, $pos);
|
||||||
$element = substr($element, $pos+strlen($name)+1);
|
$element = substr($element, $pos + strlen($name) + 1);
|
||||||
$after = null;
|
$after = null;
|
||||||
|
|
||||||
if ($i + 1 == $matchCount && $element) {
|
if ($i + 1 == $matchCount && $element) {
|
||||||
|
@ -421,6 +420,7 @@ class Router extends Object {
|
||||||
$url = substr($url, 0, strpos($url, '?'));
|
$url = substr($url, 0, strpos($url, '?'));
|
||||||
}
|
}
|
||||||
extract($_this->__parseExtension($url));
|
extract($_this->__parseExtension($url));
|
||||||
|
|
||||||
foreach ($_this->routes as $route) {
|
foreach ($_this->routes as $route) {
|
||||||
if (($r = $_this->matchRoute($route, $url)) !== false) {
|
if (($r = $_this->matchRoute($route, $url)) !== false) {
|
||||||
$_this->__currentRoute[] = $route;
|
$_this->__currentRoute[] = $route;
|
||||||
|
|
|
@ -3192,7 +3192,7 @@ class DboSourceTest extends CakeTestCase {
|
||||||
function testComplexSortExpression() {
|
function testComplexSortExpression() {
|
||||||
$result = $this->testDb->order(array('(Model.field > 100) DESC', 'Model.field ASC'));
|
$result = $this->testDb->order(array('(Model.field > 100) DESC', 'Model.field ASC'));
|
||||||
$this->assertPattern("/^\s*ORDER BY\s+\(`Model`\.`field`\s+>\s+100\)\s+DESC,\s+`Model`\.`field`\s+ASC\s*$/", $result);
|
$this->assertPattern("/^\s*ORDER BY\s+\(`Model`\.`field`\s+>\s+100\)\s+DESC,\s+`Model`\.`field`\s+ASC\s*$/", $result);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* testCalculations method
|
* testCalculations method
|
||||||
*
|
*
|
||||||
|
@ -3608,11 +3608,15 @@ class DboSourceTest extends CakeTestCase {
|
||||||
$this->assertEqual($result, $expected);
|
$this->assertEqual($result, $expected);
|
||||||
|
|
||||||
$result = $this->testDb->name('MTD()');
|
$result = $this->testDb->name('MTD()');
|
||||||
$expected = '`MTD()`';
|
$expected = 'MTD()';
|
||||||
$this->assertEqual($result, $expected);
|
$this->assertEqual($result, $expected);
|
||||||
|
|
||||||
$result = $this->testDb->name('(sm)');
|
$result = $this->testDb->name('(sm)');
|
||||||
$expected = '`(sm)`';
|
$expected = '(sm)';
|
||||||
|
$this->assertEqual($result, $expected);
|
||||||
|
|
||||||
|
$result = $this->testDb->name('Function(Something.foo)');
|
||||||
|
$expected = 'Function(`Something`.`foo`)';
|
||||||
$this->assertEqual($result, $expected);
|
$this->assertEqual($result, $expected);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -3676,6 +3680,6 @@ class DboSourceTest extends CakeTestCase {
|
||||||
$this->testDb->error = $oldError;
|
$this->testDb->error = $oldError;
|
||||||
Configure::write('debug', $oldDebug);
|
Configure::write('debug', $oldDebug);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
Loading…
Reference in a new issue