Dotclear

source: plugins/newsletter/trunk/_public.php @ 2685

Revision 2685, 23.6 KB checked in by kwon, 13 years ago (diff)

Newsletter:

' closes #562
' delete really the mail from the database when clic on delete

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ----------------------------------
3# This file is part of Newsletter, a plugin for Dotclear.
4#
5# Copyright (c) 2009-2010 Benoit de Marne.
6# benoit.de.marne@gmail.com
7# Many thanks to Association Dotclear and special thanks to Olivier Le Bris
8#
9# Licensed under the GPL version 2.0 license.
10# A copy of this license is available in LICENSE file or at
11# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
12# -- END LICENSE BLOCK ------------------------------------
13
14require dirname(__FILE__).'/_widgets.php';
15
16// loading librairies
17require_once dirname(__FILE__).'/inc/class.captcha.php';
18require_once dirname(__FILE__).'/inc/class.newsletter.settings.php';
19require_once dirname(__FILE__).'/inc/class.newsletter.tools.php';
20require_once dirname(__FILE__).'/inc/class.newsletter.plugin.php';
21require_once dirname(__FILE__).'/inc/class.newsletter.core.php';
22require_once dirname(__FILE__).'/inc/class.newsletter.letter.php';
23
24// adding templates
25$core->tpl->addValue('Newsletter', array('tplNewsletter', 'Newsletter'));
26$core->tpl->addValue('NewsletterPageTitle', array('tplNewsletter', 'NewsletterPageTitle'));
27$core->tpl->addValue('NewsletterTemplateNotSet', array('tplNewsletter', 'NewsletterTemplateNotSet'));
28$core->tpl->addBlock('NewsletterBlock', array('tplNewsletter', 'NewsletterBlock'));
29$core->tpl->addBlock('NewsletterMessageBlock', array('tplNewsletter', 'NewsletterMessageBlock'));
30$core->tpl->addBlock('NewsletterFormBlock', array('tplNewsletter', 'NewsletterFormBlock'));
31$core->tpl->addValue('NewsletterFormSubmit', array('tplNewsletter', 'NewsletterFormSubmit'));
32$core->tpl->addValue('NewsletterFormRandom', array('tplNewsletter', 'NewsletterFormRandom'));
33$core->tpl->addValue('NewsletterFormCaptchaImg', array('tplNewsletter', 'NewsletterFormCaptchaImg'));
34$core->tpl->addValue('NewsletterFormCaptchaInput', array('tplNewsletter', 'NewsletterFormCaptchaInput'));
35$core->tpl->addValue('NewsletterFormLabel', array('tplNewsletter', 'NewsletterFormLabel'));
36$core->tpl->addValue('NewsletterMsgPresentationForm', array('tplNewsletter', 'NewsletterMsgPresentationForm'));
37$core->tpl->addBlock('NewsletterIfUseDefaultFormat',array('tplNewsletter','NewsletterIfUseDefaultFormat'));
38$core->tpl->addValue('NewsletterFormFormatSelect', array('tplNewsletter', 'NewsletterFormFormatSelect'));
39$core->tpl->addValue('NewsletterFormActionSelect', array('tplNewsletter', 'NewsletterFormActionSelect'));
40$core->tpl->addBlock('NewsletterIfUseCaptcha',array('tplNewsletter','NewsletterIfUseCaptcha'));
41
42// adding behaviors
43$core->addBehavior('publicBeforeContentFilter', array('dcBehaviorsNewsletterPublic', 'translateKeywords'));
44$core->addBehavior('publicHeadContent', array('dcBehaviorsNewsletterPublic', 'publicHeadContent'));
45
46$core->addBehavior('publicAfterUserCreate', array('dcBehaviorsNewsletterPublic', 'newsletterUserCreate'));
47
48class tplNewsletter
49{
50     /**
51      * Select the newsletter to send
52      *
53      * @return:    string    msg
54      */
55     public static function Newsletter()
56     {
57          global $core;
58         
59          if (isset($GLOBALS['newsletter']['cmd'])) 
60               $cmd = (string) html::clean($GLOBALS['newsletter']['cmd']);
61          else 
62               $cmd = 'about';
63     
64          if (isset($GLOBALS['newsletter']['email'])) 
65               $email = (string) html::clean($GLOBALS['newsletter']['email']);
66          else 
67               $email = null;
68     
69          if (isset($GLOBALS['newsletter']['code'])) 
70               $code = (string) html::clean($GLOBALS['newsletter']['code']);
71          else 
72               $code = null;
73
74          if (isset($GLOBALS['newsletter']['modesend'])) 
75               $modesend = (string) html::clean($GLOBALS['newsletter']['modesend']);
76          else 
77               $modesend = null;
78
79          switch ($cmd) {
80               case 'test':
81                    $msg = __('Test display template');
82                    break;
83
84               case 'about':
85                    $msg = '<ul><strong>'.__('About Newsletter ...').'</strong>';
86                    $msg .= '<li>'.__('Version').' : ' . newsletterPlugin::dcVersion().'</li>';
87                    $msg .= '<li>'.__('Author').' : ' . newsletterPlugin::dcAuthor().'</li>';
88                    $msg .= '<li>'.__('Description').' : ' . newsletterPlugin::dcDesc().'</li>';
89                    $msg .= '</ul>';
90                   
91                    $msg = html::escapeHTML($msg);
92                    break;
93
94               case 'confirm':
95                    if ($email == null || $code == null)
96                         $msg = __('Missing informations');
97                    else {
98                         $rs = newsletterCore::getemail($email);
99                         if ($rs == null || $rs->regcode != $code) 
100                              $msg = __('Your subscription code is invalid.');
101                         else if ($rs->state == 'enabled') 
102                              $msg = __('Account already confirmed.');
103                         else {
104                              newsletterCore::send($rs->subscriber_id,'enable');
105                              $msg = __('Your subscription is confirmed.').'<br />'.__('You will soon receive an email.');
106                         }
107                    }
108                    break;
109
110               case 'enable':
111                    if ($email == null)
112                         $msg = __('Missing informations');
113                    else {
114                         $rs = newsletterCore::getemail($email);
115                         if ($rs == null) 
116                              $msg = __('Unable to find your account informations.');
117                         else if ($rs->state == 'enabled') 
118                              $msg = __('Account already enabled.');
119                         else {
120                              newsletterCore::send($rs->subscriber_id,'enable');
121                              $msg = __('Your account is enabled.').'<br />'.__('You will soon receive an email.');
122                         }
123                    }
124                    break;
125
126               case 'disable':
127                    if ($email == null)
128                         $msg = __('Missing informations');
129                    else {
130                         $rs = newsletterCore::getemail($email);
131                         if ($rs == null) 
132                              $msg = __('Unable to find your account informations.');
133                         else if ($rs->state == 'disabled') 
134                              $msg = __('Account already disabled.');
135                         else {
136                              newsletterCore::send($rs->subscriber_id,'disable');
137                              $msg = __('Your account is disabled.').'<br />'.__('You will soon receive an email.');
138                         }
139                    }
140                    break;
141
142               case 'suspend':
143                    if ($email == null)
144                         $msg = __('Missing informations');
145                    else {
146                         $rs = newsletterCore::getemail($email);
147                         if ($rs == null) 
148                              $msg = __('Unable to find you account informations.');
149                         else if ($rs->state == 'suspended') 
150                              $msg = __('Account already suspended.');
151                         else {
152                              newsletterCore::send($rs->subscriber_id,'suspend');
153                              $msg = __('Your account is suspended.').'<br />'.__('You will soon receive an email.');
154                         }
155                    }
156                    break;
157
158               case 'changemode':
159                    if ($email == null)
160                         $msg = __('Missing informations');
161                    else {
162                         $rs = newsletterCore::getemail($email);
163                         if ($rs == null) 
164                              $msg = __('Unable to find you account informations.');
165                         else {
166                              newsletterCore::send($rs->subscriber_id,'changemode');
167                              $msg = __('Your sending format is').$modesend.'<br />'.__('You will soon receive an email.');
168                         }
169                    }
170                    break;
171
172               case 'submit':
173                    $email = (string)html::clean($_POST['nl_email']);
174                    $option = (string)html::clean($_POST['nl_option']);
175                    //$modesend = (string)html::clean($_POST['nl_modesend']);
176                    $check = true;
177                    $newsletter_settings = new newsletterSettings($core);
178                    if ($newsletter_settings->getCaptcha()) {
179                         $captcha = (string)html::clean($_POST['nl_captcha']);
180                         $read = Captcha::read();
181                         if ($read != $captcha) {
182                              $check = false;
183                              $ca = new Captcha(80, 30, 5);
184                              $ca->generate();
185                              $ca->file();
186                              $ca->write();
187                         }
188                    }
189
190                    if (!$check) {
191                         $msg = __('Bad captcha code');
192                    } else switch ($option) {
193                         case 'subscribe':
194                              $msg = newsletterCore::accountCreate($email,null,$modesend);
195                              break;
196                         
197                         case 'unsubscribe':
198                              $msg = newsletterCore::accountDelete($email);
199                              break;
200
201                         case 'suspend':
202                              $msg = newsletterCore::accountSuspend($email);
203                              break;
204
205                         case 'resume':
206                              $msg = newsletterCore::accountResume($email);
207                              break;
208
209                         case 'changemode':
210                              $msg = newsletterCore::accountChangeMode($email,$modesend);
211                              break;
212
213                         default:
214                              $msg = __('Error in formular.').' option = '.$option;
215                              //$msg = __('Error in formular.');
216                              break;
217                    }
218                    break;
219
220               default:
221                    $msg = '';
222                    break;
223          }
224
225          return $msg;
226     }
227
228     /**
229     * title page
230     */
231     public static function NewsletterPageTitle()
232     {
233          global $core;
234          $newsletter_settings = new newsletterSettings($core);
235          //return __('Newsletter');
236          return $newsletter_settings->getFormTitlePage();
237     }   
238
239     /**
240     * indication à l'utilisateur que la page newsletter n'a pas été initialisée
241     */
242     public static function NewsletterTemplateNotSet()
243     {
244          return '<?php echo newsletterCore::TemplateNotSet(); ?>';
245     }
246
247     public static function NewsletterBlock($attr, $content)
248     {
249          return $content;
250     }
251
252     public static function NewsletterMessageBlock($attr, $content)
253     {
254          $text = '<?php echo "'.
255               '<form action=\"'.newsletterCore::url('form').'\" method=\"post\" id=\"comment-form\" class=\"newsletter\">'.
256               '<fieldset>'.
257               '<p class=\"field\">'.
258               '" ?>'.
259               html::decodeEntities($content).
260               '<?php echo "'.
261               '</p>'.
262               '<p>'.
263               '<input type=\"submit\" name=\"nl_back\" id=\"nl_back\" value=\"'.__('Back').'\" class=\"submit\" />'.
264               '</p>'.
265               '</fieldset>'.
266               '</form>'.
267               '" ?>';
268
269          return '<?php if (!empty($GLOBALS[\'newsletter\'][\'msg\'])) { ?>'.$text.'<?php } ?>';
270     }
271
272     public static function NewsletterFormBlock($attr, $content)
273     {
274          return '<?php  if (!empty($GLOBALS[\'newsletter\'][\'form\'])) { ?>'.$content.'<?php } ?>';
275     }
276
277     public static function NewsletterFormSubmit()
278     {
279          return '<?php echo newsletterCore::url(\'submit\'); ?>';
280     }
281
282     public static function NewsletterFormRandom()
283     {
284          return '<?php  echo "'.newsletterTools::getRandom().'" ?>';
285     }
286
287     public static function NewsletterFormCaptchaImg()
288     {
289          return '<?php echo "<img src=\"'.Captcha::www().'/captcha.img.png\" style=\"vertical-align: middle;\" alt=\"'.__('Captcha').'\" />" ?>';
290     }
291
292     public static function NewsletterFormCaptchaInput()
293     {
294          return '<?php echo "<p><input type=\"text\" name=\"nl_captcha\" id=\"nl_captcha\" value=\"\" style=\"width:90px; vertical-align:top;\" /></p>" ?>';
295     }
296
297     public static function NewsletterFormLabel($attr, $content)
298     {
299          switch ($attr['id'])
300          {
301               case 'ok':
302                    return '<?php echo __(\'Send\') ?>';
303
304               case 'subscribe':
305                    return '<?php echo __(\'Subscribe\') ?>';
306
307               case 'unsubscribe':
308                    return '<?php echo __(\'Unsubscribe\') ?>';
309
310               case 'suspend':
311                    return '<?php echo __(\'Suspend\') ?>';
312                    // __('Suspend')
313
314               case 'resume':
315                    return '<?php echo __(\'Resume\') ?>';
316                    // __('Resume')
317
318               case 'nl_email':
319                    return '<?php echo __(\'Email\') ?>';
320
321               case 'nl_option':
322                    return '<?php echo __(\'Action\') ?>';
323
324               case 'nl_captcha':
325                    return '<?php echo  \'<label for="nl_captcha">\'. __(\'Captcha\') .\'</label>\' ?>';
326
327               case 'nl_submit':
328                    return '';
329
330               case 'html':
331                    return '<?php echo __(\'html\') ?>';
332
333               case 'text':
334                    return '<?php echo __(\'text\') ?>';
335                    // __('text')
336
337               case 'nl_modesend':
338                    return '<?php echo __(\'Format\') ?>';
339
340               case 'changemode':
341                    return '<?php echo __(\'Change format\') ?>';
342                    // __('Change format')
343
344               case 'back':
345                    return '<?php echo __(\'Back\') ?>';
346
347          }
348     }
349
350     public static function NewsletterMsgPresentationForm()
351     {
352          global $core;
353          $newsletter_settings = new newsletterSettings($core);
354          return $newsletter_settings->getMsgPresentationForm();
355     }
356
357     public static function NewsletterIfUseDefaultFormat($attr,$content)
358     {
359          global $core;
360          $newsletter_settings = new newsletterSettings($core);
361          return (!$newsletter_settings->getUseDefaultFormat()? $content : '');
362     }
363
364     public static function NewsletterFormFormatSelect($attr,$content)
365     {
366          $text = '<?php echo "'.
367               '<label for=\"nl_modesend\">'.__('Format').'&nbsp;:</label>'.
368               '<select style=\"border:1px inset silver; width:150px;\" name=\"nl_modesend\" id=\"nl_modesend\" size=\"1\">'.
369               '<option value=\"html\" selected=\"selected\">'.__('html').'</option>'.
370               '<option value=\"text\">'.__('text').'</option>'.
371               '</select>'.
372               '" ?>';
373
374          return $text;
375     }
376
377     public static function NewsletterFormActionSelect($attr,$content)
378     {
379          global $core;
380          $newsletter_settings = new newsletterSettings($core);
381         
382          $text = '<?php echo "'.
383          '<label for=\"nl_option\">'.__('Action').'&nbsp;:</label>'.
384          '<select style=\"border:1px inset silver; width:150px;\" name=\"nl_option\" id=\"nl_option\" size=\"1\">'.
385          '<option value=\"subscribe\" selected=\"selected\">'.__('Subscribe').'</option>';
386         
387          if(!$newsletter_settings->getUseDefaultFormat()) {
388               $text .= '<option value=\"changemode\">'.__('Change format').'</option>';
389          }
390         
391          if($newsletter_settings->getCheckUseSuspend()) {
392               $text .= '<option value=\"suspend\">'.__('Suspend').'</option>';
393          }
394         
395          $text .= '<option value=\"resume\">'.__('Resume').'</option>'.
396          '<option value=\"\">---</option>'.
397          '<option value=\"unsubscribe\">'.__('Unsubscribe').'</option>'.
398          '</select>'.
399          '" ?>';
400          return $text;
401     }   
402
403     public static function NewsletterIfUseCaptcha($attr,$content)
404     {
405          global $core;
406          $newsletter_settings = new newsletterSettings($core);
407          if (!empty($GLOBALS['newsletter']['form']) && $newsletter_settings->getCaptcha()) {
408               $ca = new Captcha(80, 30, 5);
409               $ca->generate();
410               $ca->file();
411               $ca->write();
412          }
413          return ($newsletter_settings->getCaptcha()? $content : '');     
414     }
415
416}
417
418class publicWidgetsNewsletter
419{
420     /**
421     * initialize widget
422     */
423     public static function initWidgets($w)
424     {
425          global $core;
426         
427          # Settings compatibility test
428          if (version_compare(DC_VERSION,'2.2-alpha','>=')) {
429               $blog_settings =& $core->blog->settings->newsletter;
430               $system_settings =& $core->blog->settings->system;
431          } else {
432               $blog_settings =& $core->blog->settings;
433               $system_settings =& $core->blog->settings;
434          }
435         
436          try {
437               $newsletter_flag = (boolean)$blog_settings->newsletter_flag;
438               
439               // prise en compte de l'état d'activation du plugin
440               if (!$newsletter_flag) 
441                    return;
442
443               // prise en compte paramètre: uniquement sur la page d'accueil
444               $url = &$core->url;
445               if ($w->homeonly && $url->type != 'default')  {
446                    return;
447               }
448
449               // paramétrage des variables
450               $plugin_name = __('Newsletter');
451               $title = ($w->title) ? html::escapeHTML($w->title) : $plugin_name;
452               $showTitle = ($w->showtitle) ? true : false;
453               $subscription_link = ($w->subscription_link) ? html::escapeHTML($w->subscription_link) : __('Subscription link');
454               
455               $text = '';
456
457               $newsletter_settings = new newsletterSettings($core);
458               
459               // mise en place du contenu du widget dans $text
460               if ($w->inwidget) {
461                    $link = newsletterCore::url('submit');
462                    $text .=
463                    '<form action="'.$link.'" method="post" id="nl_form">'."\n".
464                    "<p>\n".
465                    $core->formNonce().
466                    form::hidden(array('nl_random'),newsletterTools::getRandom()).
467                    "</p>\n".
468                    '<p>'.
469                    '<label for="nl_email">'.__('Email').'</label>&nbsp;:&nbsp;'.
470                    form::field(array('nl_email','nl_email'),15,255).
471                    '</p>';
472                   
473                    if(!$newsletter_settings->getUseDefaultFormat()) {
474                    $text .= '<p><label for="nl_modesend">'.__('Format').'</label>&nbsp;:&nbsp;'.
475                    '<select style="border:1px inset silver; width:140px;" name="nl_modesend" id="nl_modesend" size="1">'.
476                         '<option value="html" selected="selected">'.__('html').'</option>'.
477                         '<option value="text">'.__('text').'</option>'.
478                    '</select></p>';
479                    }
480
481                    $text .= '<p><label for="nl_submit">'.__('Actions').'</label>&nbsp;:&nbsp;'.
482                    '<select style="border:1px inset silver; width:140px;" name="nl_option" id="nl_option" size="1">'.
483                         '<option value="subscribe" selected="selected">'.__('Subscribe').'</option>';
484                         
485                    if(!$newsletter_settings->getUseDefaultFormat()) {
486                         $text .= '<option value="changemode">'.__('Change format').'</option>';
487                    }
488
489                    if($newsletter_settings->getCheckUseSuspend()) {
490                         $text .= '<option value=\"suspend\">'.__('Suspend').'</option>';
491                    }
492
493                    $text .= 
494                         '<option value="resume">'.__('Resume').'</option>'.
495                         '<option value="">---</option>'.
496                         '<option value="unsubscribe">'.__('Unsubscribe').'</option>'.
497                    '</select>'.
498                    /*
499                    '<li><label for="nl_submit">'.__('Actions').'</label>&nbsp;:<br />'.
500                    form::radio(array('nl_option'),'subscribe', true).__('Subscribe').'<br />'.
501                    form::radio(array('nl_option'),'unsubscribe').__('Unsubscribe').'<br />'.
502                    //*/
503                    '</p>';
504
505                    if ($newsletter_settings->getCaptcha()) {
506                         require_once dirname(__FILE__).'/inc/class.captcha.php';                                 
507                         $as = new Captcha(80, 30, 5);
508                         $as->generate();
509                         $as->file();
510                         $as->write();
511                             
512                         $text .=
513                         //'<p>'.
514                         '<p><label for="nl_captcha">'.__('Captcha').'</label>&nbsp;:<br />'.
515                         '<img src="'.Captcha::www().'/captcha.img.png" alt="'.__('Captcha').'" /><br />'.
516                         form::field(array('nl_captcha','nl_captcha'),9,30).
517                         '</p>';
518                         //'</p>'.
519                    }
520                   
521                    $text .=
522                    '<p><input class="submit" type="submit" name="nl_submit" id="nl_submit" value="'.__('Send').'" /></p>'.
523
524                    //'</ul>'.
525                    //'</fieldset>'.
526                    '</form>';
527                   
528               } else {
529                    $link = newsletterCore::url('form');
530                    if ($w->insublink) {
531                         $title = str_replace('%I', '<img src="?pf=newsletter/icon.png" alt="" width="16" height="16" style="margin: 0 3px; vertical-align: middle;" />', $title);
532                         $text = $w->text ? $w->text : '';
533
534                         $text .= '<ul><li><a href="'.$link.'">'.$subscription_link.'</a></li></ul>';
535                    } else {
536                         $title = '<a href="'.$link.'">'.$title.'</a>';
537                         $title = str_replace('%I', '</a><img src="?pf=newsletter/icon.png" alt="newsletter" width="16" height="16" style="margin:0 3px; vertical-align:middle;" /> <a href="'.$link.'">', $title);
538                    }
539               }
540
541               // renvoi du code à afficher pour le widget
542               if ($showTitle === true) 
543                    $title = '<h2>'.$title.'</h2>';
544               else 
545                    $title = '';
546               
547               return "\n".'<div class="'.newsletterPlugin::pname().'">'.$title.$text.'</div>'."\n";
548               //return "\n".'<div class="categories">'.$title.$text.'</div>'."\n";
549
550          } catch (Exception $e) { 
551               $core->error->add($e->getMessage()); 
552          }
553     }
554}
555
556// URL handler
557class urlNewsletter extends dcUrlHandlers
558{
559    public static function newsletter($args)
560    {
561          $core = $GLOBALS['core'];
562          $_ctx = $GLOBALS['_ctx'];
563
564          if($args == '') {
565               # The specified Preview URL is malformed.
566                    self::p404();
567         }
568
569          // initialisation des variables
570          $flag = 0;
571          $cmd = null;
572          $GLOBALS['newsletter']['cmd'] = null;
573          $GLOBALS['newsletter']['msg'] = false;
574          $GLOBALS['newsletter']['form'] = false;
575          $GLOBALS['newsletter']['email'] = null;
576          $GLOBALS['newsletter']['code'] = null;
577          $GLOBALS['newsletter']['modesend'] = null;
578
579          // décomposition des arguments et aiguillage
580          $params = explode('/', $args);
581          if (isset($params[0]) && !empty($params[0])) 
582               $cmd = (string)html::clean($params[0]);
583          else 
584               $cmd = null;
585                               
586          if (isset($params[1]) && !empty($params[1])) {
587               $email = newsletterTools::base64_url_decode((string)html::clean($params[1]));
588          } else
589          $email = null;
590           
591          if (isset($params[2]) && !empty($params[2])) 
592               $regcode = (string)html::clean($params[2]);
593          else 
594               $regcode = null;             
595
596          if (isset($params[3]) && !empty($params[3])) 
597               $modesend = newsletterTools::base64_url_decode((string)html::clean($params[3]));
598          else 
599               $modesend = null;             
600
601          switch ($cmd) {
602               case 'test':
603               case 'about':
604                    $GLOBALS['newsletter']['msg'] = true;
605               break;
606
607               case 'form':
608                    $GLOBALS['newsletter']['form'] = true;
609               break;
610               
611               case 'submit':
612                    $GLOBALS['newsletter']['msg'] = true;
613               break;
614                         
615               case 'confirm':
616               case 'enable':
617               case 'disable':
618               case 'suspend':
619               case 'changemode':
620               case 'resume':
621               {
622                    if ($email == null) {
623                         self::p404();
624                    }
625                    $GLOBALS['newsletter']['msg'] = true;
626                    break;
627               }
628                   
629               default:
630               {
631                    $flag = 1;
632                    self::letter($args);
633                    break;
634               }
635          }
636
637          if (!$flag) {
638
639               $GLOBALS['newsletter']['cmd'] = $cmd;
640               $GLOBALS['newsletter']['email'] = $email;
641               $GLOBALS['newsletter']['code'] = $regcode;
642               $GLOBALS['newsletter']['modesend'] = $modesend;
643     
644               // Affichage du formulaire
645               $core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__).'/default-templates');
646               $file = $core->tpl->getFilePath('subscribe.newsletter.html');
647               files::touch($file);
648               //self::serveDocument('subscribe.newsletter.html');
649               self::serveDocument('subscribe.newsletter.html','text/html',false,false);
650          }
651    }
652
653    public static function letterpreview($args)
654    {
655          $core = $GLOBALS['core'];
656          $_ctx = $GLOBALS['_ctx'];
657         
658          if (!preg_match('#^(.+?)/([0-9a-z]{40})/(.+?)$#',$args,$m)) {
659               # The specified Preview URL is malformed.
660               self::p404();
661          }
662          else
663          {
664               $user_id = $m[1];
665               $user_key = $m[2];
666               $post_url = $m[3];
667               if (!$core->auth->checkUser($user_id,null,$user_key)) {
668                    # The user has no access to the entry.
669                    self::p404();
670               }
671               else
672               {
673                    $_ctx->preview = true;
674                    self::letter($post_url);
675               }
676          }
677    }
678   
679     public static function letter($args)
680     {
681          if ($args == '') {
682               # No page was specified.
683               self::p404();
684          }
685          else
686          {
687               $_ctx =& $GLOBALS['_ctx'];
688               $core =& $GLOBALS['core'];
689               
690               $core->blog->withoutPassword(false);
691               
692               $params = new ArrayObject();
693               $params['post_type'] = 'newsletter';
694               $params['post_url'] = $args;
695               
696               $_ctx->posts = $core->blog->getPosts($params);
697               
698               $_ctx->comment_preview = new ArrayObject();
699               $_ctx->comment_preview['content'] = '';
700               $_ctx->comment_preview['rawcontent'] = '';
701               $_ctx->comment_preview['name'] = '';
702               $_ctx->comment_preview['mail'] = '';
703               $_ctx->comment_preview['site'] = '';
704               $_ctx->comment_preview['preview'] = false;
705               $_ctx->comment_preview['remember'] = false;
706               
707               $core->blog->withoutPassword(true);
708               
709               
710               if ($_ctx->posts->isEmpty())
711               {
712                    # The specified page does not exist.
713                    self::p404();
714               }
715               else
716               {
717                    $post_id = $_ctx->posts->post_id;
718                    $post_password = $_ctx->posts->post_password;
719                   
720                    # Password protected entry
721                    if ($post_password != '' && !$_ctx->preview)
722                    {
723                         # Get passwords cookie
724                         if (isset($_COOKIE['dc_passwd'])) {
725                              $pwd_cookie = unserialize($_COOKIE['dc_passwd']);
726                         } else {
727                              $pwd_cookie = array();
728                         }
729                         
730                         # Check for match
731                         if ((!empty($_POST['password']) && $_POST['password'] == $post_password)
732                         || (isset($pwd_cookie[$post_id]) && $pwd_cookie[$post_id] == $post_password))
733                         {
734                              $pwd_cookie[$post_id] = $post_password;
735                              setcookie('dc_passwd',serialize($pwd_cookie),0,'/');
736                         }
737                         else
738                         {
739                              self::serveDocument('password-form.html','text/html',false);
740                              return;
741                         }
742                    }
743                   
744                   
745                    # The entry
746                    $core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__).'/default-templates');
747                    //self::serveDocument('letter.html');
748                    self::serveDocument('letter.html');
749                    //self::serveDocument('subscribe.newsletter.html');
750               }
751          }
752     }   
753}
754
755// Define behaviors
756class dcBehaviorsNewsletterPublic
757{
758     public static function publicHeadContent(dcCore $core,$_ctx)
759     {
760          if($core->url->type == "newsletter") {
761               $letter_css = new newsletterCSS($core);
762               $css_style = '<style type="text/css" media="screen">';
763               $css_style .= $letter_css->getLetterCSS();
764               $css_style .= '</style>';
765               echo $css_style;
766          }
767     }
768
769     //public static function translateKeywords(dcCore $core, $tag, $args, $attr,$content)
770     public static function translateKeywords(dcCore $core, $tag, $args)
771     {
772          global $_ctx;
773          if($tag != 'EntryContent' //tpl value
774           || $args[0] == '' //content
775           || $args[2] // remove html
776           || $core->url->type != 'newsletter'
777          ) return;
778
779          $nltr = new newsletterLetter($core,(integer)$_ctx->posts->post_id);
780          $body = $args[0];
781         
782          $body = $nltr->rendering($body, $_ctx->posts->getURL());
783          $args[0] = $nltr->renderingSubscriber($body, '');
784
785          return;
786     }
787     
788     /**
789      * Add entry in newsletter when an user is added in the plugin "Agora"
790      * @param $cur
791      * @param $user_id
792      * @return unknown_type
793      */
794     public static function newsletterUserCreate($cur,$user_id)
795     {
796          global $core;
797          $newsletter_settings = new newsletterSettings($core);
798
799          if($newsletter_settings->getCheckAgoraLink()) {
800               $email = $cur->user_email;
801               try {
802                    if (!newsletterCore::accountCreate($email)) {
803                         throw new Exception(__('Error adding subscriber.').' '.$email);
804                    }
805               } catch (Exception $e) {
806                    throw new Exception('Plugin Newsletter : '.$e->getMessage());
807               }
808          }
809          return;
810     }   
811}
812
813?>
Note: See TracBrowser for help on using the repository browser.

Sites map