Édition d'un SMS
Code
Créez le fichier filtersms.php dans le dossier library avec le contenu suivant :
- function filtersms($s) {
- $charset7bit = "@£\$¥èéùìòÇ\nØø\rÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ !\"#¤%&'()*+,-./0123456789:;<=>?¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà";
- $charset7bitext = "\f^{}\\[~]|€";
- $s = preg_replace('/\R/', "\r\n", trimsms($s));
- if (preg_match('/[^' . preg_quote($charset7bit . $charset7bitext, '/') . ']/', $s)) {
- $coding='16bit';
- $maxlen=70;
- $extlen=67;
- }
- else {
- $coding='7bit';
- $maxlen=160;
- $extlen=153;
- $s = preg_replace('/([' . preg_quote($charset7bitext, '/') . '])/u', "\e\\1", $s);
- }
- $msglen = mb_strlen($s, 'UTF-8');
- if ($msglen > $maxlen) {
- $count = 1 + floor($msglen / $extlen);
- $len = $count * $extlen;
- }
- else {
- $count = 1;
- $len = $maxlen;
- }
- return array($s, $coding, $msglen, $count, $len);
- }
- function trimsms($s) {
- return preg_replace('/ *(\R)+/', '\1', preg_replace('/^ /m', '', preg_replace('/[ \t]+/', ' ', trim($s))));
- }
Éditez le fichier views/nodecontent.phtml :
- case 'sms':
- $text = $c['text'];
- if ($text) {
- require_once 'filtersms.php';
- list(, $coding, $msglen, $count, $len)=filtersms($text);
- echo '<div class="sms">', PHP_EOL;
- echo '<p id="sms_params">', PHP_EOL;
- echo "$msglen / $len -  $count SMS $coding", PHP_EOL;
- echo '</p>', PHP_EOL;
- echo '<p>', nl2br(htmlspecialchars($text, ENT_COMPAT, 'UTF-8')), '</p>', PHP_EOL;
- echo '</div>', PHP_EOL;
- }
- break;
Modifiez la vue smseditor
en français et en anglais dans les fichiers views/fr/smseditor.phtml et views/en/smseditor.phtml :
- <textarea id="sms_text" name="sms_text" cols="80" rows="5" title="SMS" placeholder="" onkeyup="return filtersms()"><?php echo htmlspecialchars($sms_text, ENT_COMPAT, 'UTF-8'); ?></textarea>
- <p id="sms_params">
- <span id="sms_msglen"><?php echo $sms_msglen; ?></span>
- /
- <span id="sms_len"><?php echo $sms_len; ?></span>
- -
- <span id="sms_count"><?php echo $sms_count; ?></span>
- SMS
- <span id="sms_coding"><?php echo $sms_coding; ?></span>
- </p>
- function filtersms() {
- var charset7bit = "@£\$¥èéùìòÇ\nØø\rÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ !\"#¤%&'()*+,-./0123456789:;<=>?¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà";
- var charset7bitext = "\f^{}\\[~]|€";
- input = document.getElementById('sms_text');
- if (input == null)
- return;
- s = input.value.trim();
- s = s.replace(/[ \t]+/gm, ' ').replace(/^ /gm, '').replace(/ *\n+/gm, "\r\n");
- msglen = s.length;
- if (s.match(new RegExp('[^' + preg_quote(charset7bit + charset7bitext, '/') + ']'))) {
- coding='16bit';
- maxlen=70;
- extlen=67;
- }
- else {
- coding='7bit';
- maxlen=160;
- extlen=153;
- if (r = s.match(new RegExp('[' + preg_quote(charset7bitext, '/') + ']', 'g'))) {
- msglen += r.length;
- }
- }
- if (msglen > maxlen) {
- count = 1 + Math.floor(msglen / extlen);
- len = count * extlen;
- }
- else {
- count = 1;
- len = maxlen;
- }
- document.getElementById('sms_msglen').innerHTML=msglen;
- document.getElementById('sms_len').innerHTML=len;
- document.getElementById('sms_count').innerHTML=count;
- document.getElementById('sms_coding').innerHTML=coding;
- }
- function preg_quote (s, delim) {
- return s.replace(new RegExp('[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\' + delim + '-]', 'g'), '\\$&');
- }
La version en anglais est pratiquement identique sauf pour le label et le titre de la zone texte. Le code en JavaScript est le même :
Éditez le fichier blocks/smseditor.php :
- require_once 'filtersms.php';
- if (isset($_POST['sms_text'])) {
- $sms_text=trimsms(readarg($_POST['sms_text'], false, false)); // don't trim and DON'T strip!
- }
- list(, $sms_coding, $sms_msglen, $sms_count, $sms_len)=filtersms($sms_text);
- $output = view('smseditor', $lang, compact('clang', 'inlanguages', 'sms_modified', 'sms_title', 'sms_cloud', 'sms_subject', 'sms_text', 'sms_msg', 'sms_coding', 'sms_msglen', 'sms_count', 'sms_len', 'errors'));
Ajoutez le CSS pour l'affichage des propriétés d'un SMS à la fin du fichier css/theme.css :
Test
Connectez-vous avec l'identifiant barfoo
.
Affichez la campagne Le moteur web
.
Message
98 / 160 - 1 SMS 7bit
Créez votre site multimédias en quelques minutes avec iZend - Le moteur web : http://www.izend.org
Éditez la campagne.
Message :
98 / 160 - 1 SMS 7bit
Cliquez dans la zone de saisie du SMS à la fin de la ligne. Le compteur est à 98. Appuyez deux fois sur Entrée pour ajouter une ligne vide. Le compteur ne change pas.
Tapez Gagnez des
.
Dès que vous avez tapé le G, le compteur est passé à 101, 98 + 2 x les 2 caractères CR (CARRIAGE RETURN) et LF (LINEFEED) pour les deux fins de ligne + 1 pour le G. Le compteur est à 110.
Entrez un espace. Le compteur ne change pas.
Entrez un $ (DOLLAR). Le compteur passe à 112, 1 pour l'espace + 1 pour le $.
Remplacez le $ par un € (EURO). Le compteur passe à 113. 1 € prend 2 caractères.
Ajoutez des espaces entre des mots, en début ou en fin de ligne. Le compteur ne change pas.
Ajoutez la ligne русский язык.
Le SMS passe en encodage 16bit
. L'envoi du message prendra 2 SMS de 67 caractères maximum chacun.
Appuyez sur Configurer pour vérifier que le code en PHP fait les mêmes calculs.
Affichez la campagne.
Git
- /izendsms.com
- blocks
- smseditor.php
- css
- theme.css
- library
- filtersms.php
- views
- nodecontent.phtml
- en
- smseditor.phtml
- fr
- smseditor.phtml
- blocks
Commettez cette version :
$ git status
$ git add blocks/smseditor.php css/theme.css library/filtersms.php views/en/smseditor.phtml views/fr/smseditor.phtml views/nodecontent.phtml
$ git commit -m'Shows message properties when editing or displaying a SMS'
IMPORTANT : Éditez le connecteur à la BD défini dans le fichier includes/db.inc.
Commentaires