| 1 | #!/usr/bin/php5 |
| 2 | <?php |
| 3 | |
| 4 | require('./connect.db.inc.php'); |
| 5 | require_once('profil.func.inc.php'); |
| 6 | |
| 7 | $globals->debug = 0; //do not store backtraces |
| 8 | |
| 9 | |
| 10 | function do_update_by_block($values) |
| 11 | { |
| 12 | // Update display_tel by block |
| 13 | // Because there is no mysql update syntax for multiple updates in one query |
| 14 | // we use a multiple insert syntax which will fail because the key already exist |
| 15 | // and then update the display_tel |
| 16 | XDB::execute("INSERT INTO profile_phones (uid, link_type, link_id, tel_id ,tel_type, |
| 17 | search_tel, display_tel, pub, comment) |
| 18 | VALUES " . $values . " |
| 19 | ON DUPLICATE KEY UPDATE display_tel = VALUES(display_tel)"); |
| 20 | } |
| 21 | |
| 22 | $res = XDB::query("SELECT DISTINCT phonePrefix |
| 23 | FROM geoloc_countries |
| 24 | WHERE phonePrefix IS NOT NULL"); |
| 25 | $prefixes = $res->fetchColumn(); |
| 26 | foreach ($prefixes as $i => $prefix) { |
| 27 | $res = XDB::query("SELECT phoneFormat |
| 28 | FROM geoloc_countries |
| 29 | WHERE phonePrefix = {?} AND phoneFormat != '' LIMIT 1", |
| 30 | $prefix); |
| 31 | if ($res->numRows() > 0) { |
| 32 | $format = $res->fetchOneCell(); |
| 33 | //Build regexp for mysql query |
| 34 | $len = strlen($format); |
| 35 | $regexp = "^"; |
| 36 | $nbPar = 0; |
| 37 | for ($i = 0; $i < $len; $i++) { |
| 38 | $char = $format[$i]; |
| 39 | switch ($char) { |
| 40 | case 'p': |
| 41 | $regexp .= $prefix; |
| 42 | break; |
| 43 | case '#': |
| 44 | if ($nbPar == 0) { |
| 45 | $regexp .= '('; |
| 46 | $nbPar++; |
| 47 | } |
| 48 | $regexp .= '[0-9]('; |
| 49 | $nbPar++; |
| 50 | break; |
| 51 | default: |
| 52 | //Appends the char after escaping it if necessary |
| 53 | $escape = array('[', ']', '{', '}', '(', ')', '*', '+', '?', '.', '^', '$', '|', '\\'); |
| 54 | if (in_array($char, $escape)) { |
| 55 | $regexp .= '[' . $char . ']'; |
| 56 | } else { |
| 57 | $regexp .= $char; |
| 58 | } |
| 59 | } |
| 60 | } |
| 61 | //allows additionnal spaces and numbers |
| 62 | $regexp .= '[0-9 ]*'; |
| 63 | //closes parenthesis |
| 64 | for ($i = 0; $i < $nbPar; $i++) { |
| 65 | $regexp .= ')?'; |
| 66 | } |
| 67 | $regexp .= '$'; |
| 68 | $res = XDB::iterator("SELECT uid, link_type, link_id, tel_id, tel_type, search_tel, |
| 69 | display_tel, pub, comment |
| 70 | FROM profile_phones |
| 71 | WHERE search_tel LIKE {?} AND display_tel NOT REGEXP {?}", |
| 72 | $prefix . '%', $regexp); |
| 73 | if ($res->numRows() > 0) |
| 74 | { |
| 75 | //To speed up the update of phone numbers, theses updates are grouped by block of 1000 |
| 76 | $values = ''; |
| 77 | $i = 0; |
| 78 | while ($phone = $res->next()) { |
| 79 | $disp = format_display_number($phone['search_tel'], $error, array('format' => $format, 'phoneprf' => $prefix)); |
| 80 | if ($values != '') { |
| 81 | $values .= ",\n"; |
| 82 | } |
| 83 | $values .= "('" . addslashes($phone['uid']) . "', '" . addslashes($phone['link_type']) |
| 84 | . "', '" . addslashes($phone['link_id']) |
| 85 | . "', '" . addslashes($phone['tel_id']) . "', '" . addslashes($phone['tel_type']) |
| 86 | . "', '" . addslashes($phone['search_tel']) . "', '" . addslashes($disp) |
| 87 | . "', '" . addslashes($phone['pub']) . "', '" . addslashes($phone['comment']) . "')"; |
| 88 | $i++; |
| 89 | if ($i == 1000) { |
| 90 | do_update_by_block($values); |
| 91 | $values = ''; |
| 92 | $i = 0; |
| 93 | } |
| 94 | } |
| 95 | if ($values != '') { |
| 96 | do_update_by_block($values); |
| 97 | } |
| 98 | } |
| 99 | } |
| 100 | } |
| 101 | |
| 102 | // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: |
| 103 | ?> |