1
53

Édition d'un SMS

Code

Créez le fichier filtersms.php dans le dossier library avec le contenu suivant :

  1. function filtersms($s) {
  2.     $charset7bit = "@£\$¥èéùìòÇ\nØø\rÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ !\"#¤%&'()*+,-./0123456789:;<=>?¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà";
  3.     $charset7bitext = "\f^{}\\[~]|€";
  4.  
  5.     $s = preg_replace('/\R/', "\r\n", trimsms($s));
  6.  
  7.     if (preg_match('/[^' . preg_quote($charset7bit . $charset7bitext, '/') . ']/', $s)) {
  8.         $coding='16bit';
  9.         $maxlen=70;
  10.         $extlen=67;
  11.     }
  12.     else {
  13.         $coding='7bit';
  14.         $maxlen=160;
  15.         $extlen=153;
  16.  
  17.         $s = preg_replace('/([' . preg_quote($charset7bitext, '/') . '])/u', "\e\\1", $s);
  18.     }
  19.  
  20.     $msglen = mb_strlen($s, 'UTF-8');
  21.  
  22.     if ($msglen > $maxlen) {
  23.         $count = 1 + floor($msglen / $extlen);
  24.         $len = $count * $extlen;
  25.     }
  26.     else {
  27.         $count = 1;
  28.         $len = $maxlen;
  29.     }
  30.  
  31.     return array($s, $coding, $msglen, $count, $len);
  32. }
  33.  
  34. function trimsms($s) {
  35.     return preg_replace('/ *(\R)+/', '\1', preg_replace('/^ /m', '', preg_replace('/[ \t]+/', ' ', trim($s))));
  36. }

Éditez le fichier views/nodecontent.phtml :

  1.         case 'sms':
  2.             $text = $c['text'];
  3.             if ($text) {
  4.                 require_once 'filtersms.php';
  5.  
  6.                 list(, $coding, $msglen, $count, $len)=filtersms($text);
  7.  
  8.                 echo '<div class="sms">', PHP_EOL;
  9.                 echo '<p id="sms_params">', PHP_EOL;
  10.                 echo "$msglen / $len &nbsp;-&nbsp $count SMS $coding", PHP_EOL;
  11.                 echo '</p>', PHP_EOL;
  12.                 echo '<p>', nl2br(htmlspecialchars($text, ENT_COMPAT, 'UTF-8')), '</p>', PHP_EOL;
  13.                 echo '</div>', PHP_EOL;
  14.             }
  15.             break;

Modifiez la vue smseditor en français et en anglais dans les fichiers views/fr/smseditor.phtml et views/en/smseditor.phtml :

  1. <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>
  2. <p id="sms_params">
  3. <span id="sms_msglen"><?php echo $sms_msglen; ?></span>
  4. /
  5. <span id="sms_len"><?php echo $sms_len; ?></span>
  6. &nbsp;-&nbsp;
  7. <span id="sms_count"><?php echo $sms_count; ?></span>
  8. SMS
  9. <span id="sms_coding"><?php echo $sms_coding; ?></span>
  10. </p>
  1. function filtersms() {
  2.     var charset7bit = "@£\$¥èéùìòÇ\nØø\rÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ !\"#¤%&'()*+,-./0123456789:;<=>?¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà";
  3.     var charset7bitext = "\f^{}\\[~]|€";
  4.  
  5.     input = document.getElementById('sms_text');
  6.     if (input == null)
  7.         return;
  8.  
  9.     s = input.value.trim();
  10.  
  11.     s = s.replace(/[ \t]+/gm, ' ').replace(/^ /gm, '').replace(/ *\n+/gm, "\r\n");
  12.  
  13.     msglen = s.length;
  14.  
  15.     if (s.match(new RegExp('[^' + preg_quote(charset7bit + charset7bitext, '/') + ']'))) {
  16.         coding='16bit';
  17.         maxlen=70;
  18.         extlen=67;
  19.     }
  20.     else {
  21.         coding='7bit';
  22.         maxlen=160;
  23.         extlen=153;
  24.  
  25.         if (r = s.match(new RegExp('[' + preg_quote(charset7bitext, '/') + ']', 'g'))) {
  26.             msglen += r.length;
  27.         }
  28.     }
  29.  
  30.     if (msglen > maxlen) {
  31.         count = 1 + Math.floor(msglen / extlen);
  32.         len = count * extlen;
  33.     }
  34.     else {
  35.         count = 1;
  36.         len = maxlen;
  37.     }
  38.  
  39.     document.getElementById('sms_msglen').innerHTML=msglen;
  40.     document.getElementById('sms_len').innerHTML=len;
  41.     document.getElementById('sms_count').innerHTML=count;
  42.     document.getElementById('sms_coding').innerHTML=coding;
  43. }
  44.  
  45. function preg_quote (s, delim) {
  46.     return s.replace(new RegExp('[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\' + delim + '-]', 'g'), '\\$&');
  47. }

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 :

  1. require_once 'filtersms.php';
  1.             if (isset($_POST['sms_text'])) {
  2.                 $sms_text=trimsms(readarg($_POST['sms_text'], false, false));   // don't trim and DON'T strip!
  3.             }
  1.     list(, $sms_coding, $sms_msglen, $sms_count, $sms_len)=filtersms($sms_text);
  1.     $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
  1. /izendsms.com
    1. blocks
      1. smseditor.php
    2. css
      1. theme.css
    3. library
      1. filtersms.php
    4. views
      1. nodecontent.phtml
      2. en
        1. smseditor.phtml
      3. fr
        1. smseditor.phtml

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

Votre commentaire :
[p] [b] [i] [u] [s] [quote] [pre] [br] [code] [url] [email] strip aide 2000

Entrez un maximum de 2000 caractères.
Améliorez la présentation de votre texte avec les balises de formatage suivantes :
[p]paragraphe[/p], [b]gras[/b], [i]italique[/i], [u]souligné[/u], [s]barré[/s], [quote]citation[/quote], [pre]tel quel[/pre], [br]à la ligne,
[url]http://www.izend.org[/url], [url=http://www.izend.org]site[/url], [email]izend@izend.org[/email], [email=izend@izend.org]izend[/email],
[code]commande[/code], [code=langage]code source en c, java, php, html, javascript, xml, css, sql, bash, dos, make, etc.[/code].