From 2c71644dbcf51f1d5be49e2163330cb9121a7b0e Mon Sep 17 00:00:00 2001 From: Dries Buytaert <dries@buytaert.net> Date: Sun, 10 May 2009 16:50:19 +0000 Subject: [PATCH] - Patch #394510 by Berdir, ksenzee: convert to new database abstraction layer. --- modules/path/path.admin.inc | 36 +++++++++++++---------- modules/path/path.module | 58 ++++++++++++++++++++++++++++++------- modules/path/path.test | 2 +- 3 files changed, 70 insertions(+), 26 deletions(-) diff --git a/modules/path/path.admin.inc b/modules/path/path.admin.inc index cab9b5d1f34e..b980998c6be4 100644 --- a/modules/path/path.admin.inc +++ b/modules/path/path.admin.inc @@ -15,19 +15,9 @@ function path_admin_overview($keys = NULL) { // Add the filter form above the overview table. $output = drupal_get_form('path_admin_filter_form', $keys); // Enable language column if locale is enabled or if we have any alias with language - $count = db_result(db_query("SELECT COUNT(*) FROM {url_alias} WHERE language <> ''")); + $count = db_query("SELECT COUNT(*) FROM {url_alias} WHERE language <> ''")->fetchField(); $multilanguage = (module_exists('locale') || $count); - if ($keys) { - // Replace wildcards with PDO wildcards. - $keys = preg_replace('!\*+!', '%', $keys); - $sql = "SELECT * FROM {url_alias} WHERE dst LIKE :keys"; - $args = array(':keys' => '%' . $keys . '%'); - } - else { - $sql = 'SELECT * FROM {url_alias}'; - $args = array(); - } $header = array( array('data' => t('Alias'), 'field' => 'dst', 'sort' => 'asc'), array('data' => t('System'), 'field' => 'src'), @@ -36,12 +26,21 @@ function path_admin_overview($keys = NULL) { if ($multilanguage) { array_splice($header, 2, 0, array(array('data' => t('Language'), 'field' => 'language'))); } - $sql .= tablesort_sql($header); - $result = pager_query($sql, 50, 0 , NULL, $args); + + $query = db_select('url_alias')->extend('PagerDefault')->extend('TableSort'); + if ($keys) { + // Replace wildcards with PDO wildcards. + $query->condition('dst', '%' . preg_replace('!\*+!', '%', $keys) . '%', 'LIKE'); + } + $result = $query + ->fields('url_alias') + ->setHeader($header) + ->limit(50) + ->execute(); $rows = array(); $destination = drupal_get_destination(); - while ($data = db_fetch_object($result)) { + foreach ($result as $data) { $row = array( // If the system path maps to a different URL alias, highlight this table // row to let the user know of old aliases. @@ -144,7 +143,14 @@ function path_admin_form_validate($form, &$form_state) { // Language is only set if locale module is enabled, otherwise save for all languages. $language = isset($form_state['values']['language']) ? $form_state['values']['language'] : ''; - if (db_result(db_query("SELECT COUNT(dst) FROM {url_alias} WHERE pid <> %d AND dst = '%s' AND language = '%s'", $pid, $dst, $language))) { + $has_alias = db_query("SELECT COUNT(dst) FROM {url_alias} WHERE pid <> :pid AND dst = :dst AND language = :language", array( + ':pid' => $pid, + ':dst' => $dst, + ':language' => $language, + )) + ->fetchField(); + + if ($has_alias) { form_set_error('dst', t('The alias %alias is already in use in this language.', array('%alias' => $dst))); } $item = menu_get_item($src); diff --git a/modules/path/path.module b/modules/path/path.module index d7751d42dd59..525bb83dd561 100644 --- a/modules/path/path.module +++ b/modules/path/path.module @@ -71,7 +71,9 @@ function path_menu() { * Post-confirmation; delete an URL alias. */ function path_admin_delete($pid = 0) { - db_query('DELETE FROM {url_alias} WHERE pid = %d', $pid); + db_delete('url_alias') + ->condition('pid', $pid) + ->execute(); drupal_set_message(t('The alias has been deleted.')); } @@ -86,11 +88,19 @@ function path_set_alias($path = NULL, $alias = NULL, $pid = NULL, $language = '' // An existing alias. if (!$path || !$alias) { // Delete the alias based on pid. - db_query('DELETE FROM {url_alias} WHERE pid = %d', $pid); + db_delete('url_alias') + ->condition('pid', $pid) + ->execute(); } else { // Update the existing alias. - db_query("UPDATE {url_alias} SET src = '%s', dst = '%s', language = '%s' WHERE pid = %d", $path, $alias, $language, $pid); + db_update('url_alias') + ->fields(array( + 'src' => $path, + 'dst' => $alias, + 'language' => $language)) + ->condition('pid', $pid) + ->execute(); } } elseif ($path && $alias) { @@ -98,20 +108,37 @@ function path_set_alias($path = NULL, $alias = NULL, $pid = NULL, $language = '' if ($alias == drupal_get_path_alias($path, $language)) { // There is already such an alias, neutral or in this language. // Update the alias based on alias; setting the language if not yet done. - db_query("UPDATE {url_alias} SET src = '%s', dst = '%s', language = '%s' WHERE dst = '%s'", $path, $alias, $language, $alias); + db_update('url_alias') + ->fields(array( + 'src' => $path, + 'dst' => $alias, + 'language' => $language + )) + ->condition('dst', $alias) + ->execute(); } else { // A new alias. Add it to the database. - db_query("INSERT INTO {url_alias} (src, dst, language) VALUES ('%s', '%s', '%s')", $path, $alias, $language); + db_insert('url_alias') + ->fields(array( + 'src' => $path, + 'dst' => $alias, + 'language' => $language, + )) + ->execute(); } } else { // Delete the alias. if ($alias) { - db_query("DELETE FROM {url_alias} WHERE dst = '%s'", $alias); + db_delete('url_alias') + ->condition('dst', $alias) + ->execute(); } else { - db_query("DELETE FROM {url_alias} WHERE src = '%s'", $path); + db_delete('url_alias') + ->condition('src', $path) + ->execute(); } } drupal_clear_path_cache(); @@ -125,7 +152,14 @@ function path_node_validate($node, $form) { if (isset($node->path)) { $language = isset($node->language) ? $node->language : ''; $node->path = trim($node->path); - if (db_result(db_query("SELECT COUNT(dst) FROM {url_alias} WHERE dst = '%s' AND src <> '%s' AND language = '%s'", $node->path, "node/$node->nid", $language))) { + $has_alias = db_query("SELECT COUNT(dst) FROM {url_alias} WHERE src <> :src AND dst = :dst AND language = :language", array( + ':src' => "node/$node->nid", + ':dst' => $node->path, + ':language' => $language, + )) + ->fetchField(); + + if ($has_alias) { form_set_error('path', t('The path is already in use.')); } } @@ -211,7 +245,11 @@ function path_form_alter(&$form, $form_state, $form_id) { if ($path) { $form['path']['pid'] = array( '#type' => 'value', - '#value' => db_result(db_query("SELECT pid FROM {url_alias} WHERE dst = '%s' AND language = '%s'", $path, $form['#node']->language)) + '#value' => db_query("SELECT pid FROM {url_alias} WHERE dst = :dst AND language = :language", array( + ':dst' => $path, + ':language' => $form['#node']->language + )) + ->fetchField(), ); } } @@ -237,5 +275,5 @@ function path_perm() { * Fetch a specific URL alias from the database. */ function path_load($pid) { - return db_fetch_array(db_query('SELECT * FROM {url_alias} WHERE pid = %d', $pid)); + return db_query('SELECT * FROM {url_alias} WHERE pid = :pid', array(':pid' => $pid))->fetchAssoc(); } diff --git a/modules/path/path.test b/modules/path/path.test index d781316d1340..f13b12fcddcc 100644 --- a/modules/path/path.test +++ b/modules/path/path.test @@ -127,7 +127,7 @@ class PathTestCase extends DrupalWebTestCase { } function getPID($dst) { - return db_result(db_query("SELECT pid FROM {url_alias} WHERE dst = '%s'", $dst)); + return db_query("SELECT pid FROM {url_alias} WHERE dst = :dst", array(':dst' => $dst))->fetchField(); } } -- GitLab