From 68e6f28fe27a268d5a443b3d887d44caaf57c34c Mon Sep 17 00:00:00 2001 From: Guillaume Bandet Date: Mon, 16 Jun 2008 16:03:28 +0200 Subject: [PATCH] Adds administration interface for phone number display formats --- include/profil.func.inc.php | 20 +++++++------- modules/profile.php | 63 +++++++++++++++++++++++++++++++++++++++++++++ templates/admin/index.tpl | 2 ++ 3 files changed, 76 insertions(+), 9 deletions(-) diff --git a/include/profil.func.inc.php b/include/profil.func.inc.php index c8334b1..ac4bc39 100644 --- a/include/profil.func.inc.php +++ b/include/profil.func.inc.php @@ -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'; } diff --git a/modules/profile.php b/modules/profile.php index 5061c2c..a62c930 100644 --- a/modules/profile.php +++ b/modules/profile.php @@ -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'); diff --git a/templates/admin/index.tpl b/templates/admin/index.tpl index ed31a60..64be0cb 100644 --- a/templates/admin/index.tpl +++ b/templates/admin/index.tpl @@ -108,6 +108,8 @@ Fonctions   |   Networking +   |   + Format d'affichage des numéros de téléphone -- 2.1.4