Adds administration interface for phone number display formats
authorGuillaume Bandet <guillaume.bandet@polytechnique.org>
Mon, 16 Jun 2008 14:03:28 +0000 (16:03 +0200)
committerGuillaume Bandet <guillaume.bandet@polytechnique.org>
Thu, 10 Jul 2008 21:44:11 +0000 (23:44 +0200)
include/profil.func.inc.php
modules/profile.php
templates/admin/index.tpl

index c8334b1..ac4bc39 100644 (file)
@@ -298,20 +298,22 @@ function format_phone_number($tel)
     return $tel;
 }
 
-function format_display_number($tel, &$error)
+function format_display_number($tel, &$error, $format = array('format'=>'','phoneprf'=>''))
 {
     $error = false;
     $ret = '';
     $tel_length = strlen($tel);
-    $res = XDB::query("SELECT phoneprf, format
-                         FROM phone_formats
-                        WHERE phoneprf = {?} OR phoneprf = {?} OR phoneprf = {?}",
-                      substr($tel, 0, 1), substr($tel, 0, 2), substr($tel, 0, 3));
-    if ($res->numRows() == 0) {
-        $error = true;
-        return '*+' . $tel;
+    if((!isset($format['phoneprf'])) || ($format['phoneprf'] == '')) {
+        $res = XDB::query("SELECT phoneprf, format
+                             FROM phone_formats
+                            WHERE phoneprf = {?} OR phoneprf = {?} OR phoneprf = {?}",
+                          substr($tel, 0, 1), substr($tel, 0, 2), substr($tel, 0, 3));
+        if ($res->numRows() == 0) {
+            $error = true;
+            return '*+' . $tel;
+        }
+        $format = $res->fetchOneAssoc();
     }
-    $format = $res->fetchOneAssoc();
     if ($format['format'] == '') {
         $format['format'] = '+p';
     }
index 5061c2c..a62c930 100644 (file)
@@ -64,6 +64,7 @@ class ProfileModule extends PLModule
             'admin/trombino'   => $this->make_hook('admin_trombino', AUTH_MDP, 'admin'),
             'admin/ss_secteurs'  => $this->make_hook('admin_ss_secteurs', AUTH_MDP, 'admin'),
             'admin/fonctions'  => $this->make_hook('admin_fonctions', AUTH_MDP, 'admin'),
+            'admin/phones_format_display'  => $this->make_hook('admin_phones_format_display', AUTH_MDP, 'admin'),
 
         );
     }
@@ -828,6 +829,68 @@ class ProfileModule extends PLModule
         $table_editor->describe('filter', 'nom du filtre à appliquer', true);
         $table_editor->apply($page, $action, $id);
     }
+    function handler_admin_phones_format_display(&$page, $action = 'list', $id = null) {
+        $page->assign('xorg_title', 'Polytechnique.org - Administration - Format d\'affichage des numéros de téléphone ');
+        $page->assign('title', 'Gestion des formats d\'affichage des numéros de téléphone');
+        $table_editor = new PLTableEditor('admin/phones_format_display', 'phone_formats', 'phoneprf',true);
+        $table_editor->describe('format', 'format d\'Affichage (ex: (+p) ### ## ## ##)', true);
+        if ($action == 'update') {
+            if ((Post::has('phoneprf')) && (Post::v('phoneprf') == $id)) {
+                $res = XDB::query("SELECT format
+                                     FROM phone_formats
+                                    WHERE phoneprf = {?}",
+                                  $id);
+                $old_val = $res->fetchOneCell();
+                if (Post::has('format')) {
+                    $new_val = Post::v('format');
+                } else {
+                    $new_val = '';
+                }
+                if ($new_val != $old_val){
+                    require_once("profil.func.inc.php");
+                    XDB::execute("UPDATE  phone_formats
+                                     SET  format = {?}
+                                   WHERE  phoneprf = {?}",
+                                   $new_val, $id);
+                    $prefixe = $id . '%';
+                    $res = XDB::iterator("SELECT  uid, link_type, link_id, tel_id, tel_type, search_tel, pub
+                                            FROM  telephone
+                                           WHERE  search_tel LIKE {?}",
+                                           $prefixe);
+                    $req = '';
+                    $i = 0;
+                    while($phonenumber = $res->next()) {
+                        if ($req != '') {
+                            $req .= ",\n";
+                        }
+                        $req .= "('" . addslashes($phonenumber['uid']) . "', '" . addslashes($phonenumber['link_type']) . "', '" . addslashes($phonenumber['link_id'])
+                                . "', '" . addslashes($phonenumber['tel_id']) . "', '" . addslashes($phonenumber['tel_type'])
+                                . "', '" . addslashes($phonenumber['search_tel']) . "', '"
+                                . addslashes(format_display_number($phonenumber['search_tel'], &$erreur, array('format' => $new_val, 'phoneprf' => $id)))
+                                . "', '" . addslashes($phonenumber['pub']) . "')";
+                        $i++;
+                        if( $i == 1000) {
+                            XDB::execute("INSERT INTO  telephone(uid, link_type, link_id, tel_id ,tel_type,
+                                                                 search_tel, display_tel, pub)
+                                               VALUES  " . $req . "
+                              ON DUPLICATE KEY UPDATE  display_tel = VALUES(display_tel)");
+                            $req = '';
+                            $i = 0;
+                        }
+                    }
+                    if ($req != '') {
+                        XDB::execute("INSERT INTO  telephone(uid, link_type, link_id, tel_id ,tel_type,
+                                                             search_tel, display_tel, pub)
+                                           VALUES  " . $req . "
+                          ON DUPLICATE KEY UPDATE  display_tel = VALUES(display_tel)");
+                    }
+                }
+            }
+            $action = 'list';
+            $id = null;
+        }
+        $table_editor->apply($page, $action, $id);
+    }
     function handler_admin_medals(&$page, $action = 'list', $id = null) {
         $page->assign('xorg_title','Polytechnique.org - Administration - Distinctions');
         $page->assign('title', 'Gestion des Distinctions');
index ed31a60..64be0cb 100644 (file)
       <a href="admin/fonctions">Fonctions</a>
       &nbsp;&nbsp;|&nbsp;&nbsp;
       <a href="admin/networking">Networking</a>
+      &nbsp;&nbsp;|&nbsp;&nbsp;
+      <a href="admin/phones_format_display">Format d'affichage des numéros de téléphone</a>
     </td>
   </tr>
   <tr class="pair">