Dotclear

source: plugins/newsletter/trunk/inc/class.template.php @ 1038

Revision 1038, 5.0 KB checked in by kwon, 14 years ago (diff)

Newsletter 3.5.7rc2
closes #139
optimisation des traitements lors de l'envoi des mails du plugin

  • Property svn:executable set to *
Line 
1<?php
2# -- BEGIN LICENSE BLOCK ----------------------------------
3# This file is part of Newsletter, a plugin for Dotclear.
4#
5# Copyright (c) 2009 Benoit de Marne
6# benoit.de.marne@gmail.com
7#
8# Licensed under the GPL version 2.0 license.
9# A copy of this license is available in LICENSE file or at
10# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
11# -- END LICENSE BLOCK ------------------------------------
12
13// chargement des librairies
14require dirname(__FILE__).'/class.html2text.php';
15
16class nlTemplate
17{
18     // variables
19     protected static $metas = null;
20
21     /**
22     * répertoire des templates
23     */
24     public static function folder() { 
25          return newsletterPlugin::folder().'../default-templates/'; 
26     }
27
28     /**
29     * renvoi une liste de fichiers de templates
30     */
31     public static function templates()
32     {
33          return array(
34               'newsletter' => array('text' => 'newsletter.txt', 'html' => 'newsletter.html'),
35               'confirm' => array('text' => 'confirm.txt', 'html' => 'confirm.html'),
36               'suspend' => array('text' => 'suspend.txt', 'html' => 'suspend.html'),
37               'enable' => array('text' => 'enable.txt', 'html' => 'enable.html'),
38               'disable' => array('text' => 'disable.txt', 'html' => 'disable.html'),
39               'changemode' => array('text' => 'changemode.txt', 'html' => 'changemode.html'),
40               'resume' => array('text' => 'resume.txt', 'html' => 'resume.html')
41          );
42     }
43     
44     /**
45     * vide le tableau de champs
46     */
47     public static function clear() 
48     { 
49          self::$metas = array(); 
50     }
51     
52     /**
53     * affectation d'une valeur à un méta champs
54     */
55     public static function assign($name, $value) 
56     { 
57          if (isset($name) && !empty($name)) 
58               self::$metas[$name] = $value; 
59     }
60     
61     /**
62     * génère la transformation et le rendu du template
63     */
64     public static function render($template, $mode = 'text')
65     {
66          global $core;
67         
68          // test de la variable mode de rendu
69          switch ($mode)
70          {
71               case 'text':
72               case 'html':
73                    break;
74               
75               default: 
76                    return false;
77          }
78     
79          // test de la variable de nom de template
80          switch ($template)
81          {
82               case 'newsletter':
83               case 'confirm':
84               case 'suspend':
85               case 'enable':
86               case 'disable':
87               case 'changemode':
88               case 'resume':
89                    break;
90               
91               default: 
92                    return false;
93          }
94         
95          try {
96               $blog = &$core->blog;
97               $settings = &$blog->settings;
98               $templates = self::templates();
99               $filename = self::folder().$templates[$template][$mode];
100               
101               // test d'existence du fichier de droits en lecture
102               if (!is_file($filename) || !file_exists($filename) || !is_readable($filename)) 
103                    return null;
104               
105               // lecture du fichier et test d'erreur
106               $content = @file_get_contents($filename);
107               if ($content === FALSE) 
108                    return null;
109               
110               // détection d'une boucle de traitement
111               $tagStart = "{loop:";
112               $tagEnd = "{/loop}";
113               $_p1 = stripos($content, "{loop:");
114               if ($_p1 !== FALSE) {
115                    // détermination des différentes valeurs de position dans le contenu
116                    $p1 = (integer)$_p1;
117                    $p2 = $p1 + strlen("{loop:");
118                    $p3 = (integer)stripos($content, "}", $p1);
119                    $p4 = $p3 +1;
120                    $p5 = (integer)stripos($content, "{/loop}", $p4);
121                    $p6 = $p5 + strlen("{/loop}");
122
123                    // identification du nom du meta champ et du meta contenu
124                    $pTag = trim(substr($content, $p2, $p3 - $p2));
125                    $pContent = trim(substr($content, $p4, $p5 - $p4));
126
127                    // on remplace le meta contenu par un tag simple
128                    $zContent = substr($content, $p1, $p6 - $p1);
129                    $content = str_replace($zContent, "{*}", $content);
130
131                    // si on a bien le meta champ et le meta contenu, alors on boucle le remplacement
132                    if (!empty($pTag) && !empty($pContent)) {
133                         // contenu final de la boucle
134                         $bContent = '';
135
136                         // contenu à boucler
137                         $aContent = (array)self::$metas[$pTag];
138                         foreach ($aContent as $index => $elem)
139                         {
140                              // contenu du tour de boucle
141                              $_content = $pContent;
142
143                              // traite chaque élement
144                              foreach ($elem as $tagKey => $tagValue)
145                              {
146                                   $tag = $pTag.'.'.$tagKey;
147                                   $_content = str_replace($tag, $tagValue, $_content);
148                              }
149
150                              // ajoute le contenu du tour de boucle à la boucle
151                              $bContent .= $_content;
152                         }
153
154                         $p7 = strripos($bContent, "{nl}");
155                         $bContent = substr($bContent, 0, $p7);
156
157                         $content = str_replace("{*}", $bContent, $content);
158
159                         if ($mode == 'text') 
160                              $content = str_replace("{nl}", "<br />", $content);
161                              //$content = str_replace("{nl}", "\n", $content);
162                         else if ($mode == 'html') 
163                              $content = str_replace("{nl}", "<br />", $content);             
164                         
165                    }
166               }
167               
168               // boucle sur la liste des méta champs pour en remplacer les valeurs
169               foreach (self::$metas as $k => $v)
170               {
171                    if (!is_array($v)) {
172                         $tag = '{$'.$k.'}';
173                         $content = str_replace($tag, $v, $content);
174                         
175                         if ($mode == 'text') 
176                              $content = str_replace("{nl}", "<br />", $content);
177                              //$content = str_replace("{nl}", "\n", $content);
178                         else if ($mode == 'html') 
179                              $content = str_replace("{nl}", "<br />", $content);                             
180                         
181                    }
182               }
183               
184               // renvoi le contenu transformé
185               return $content;
186         
187          } catch (Exception $e) { 
188               $core->error->add($e->getMessage()); 
189          }
190     }
191}
192
193?>
Note: See TracBrowser for help on using the repository browser.

Sites map