Dotclear

source: plugins/private/_public.php @ 863

Revision 863, 5.5 KB checked in by Osku, 15 years ago (diff)

Private Mode : almost 0.7 :

  • New way for managing sessions
  • New options for widget

i-Cette ligne, et les suivantes ci-dessous, seront ignorées--

M _define.php
D LICENSE
M _prepend.php
M _public.php
M _widgets.php
M _admin.php
M index.php

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ----------------------------------
3# This file is part of Private mode, a plugin for Dotclear.
4#
5# Copyright (c) 2008, 2009 Osku
6#
7# Licensed under the GPL version 2.0 license.
8# A copy of this license is available in LICENSE file or at
9# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
10# -- END LICENSE BLOCK ------------------------------------
11
12if (!defined('DC_RC_PATH')) { return; }
13
14$core->tpl->addValue('PrivatePageTitle',array('tplPrivate','PrivatePageTitle'));
15$core->tpl->addValue('PrivateMsg',array('tplPrivate','PrivateMsg'));
16$core->tpl->addValue('PrivateReqPage',array('tplPrivate','PrivateReqPage'));
17$core->tpl->addBlock('IfPrivateMsgError',array('tplPrivate','IfPrivateMsgError'));
18$core->tpl->addValue('PrivatePassRemember',array('tplPrivate','PrivatePassRemember'));
19$core->tpl->addValue('PrivateMsgError',array('tplPrivate','PrivateMsgError'));
20
21if ($core->blog->settings->private_flag)
22{
23     $core->addBehavior('publicBeforeDocument',array('urlPrivate','privacy'));
24}
25
26class urlPrivate extends dcUrlHandlers
27{
28     public static function privateFeed($args)
29     {
30          self::feed($args);
31     }
32
33     public static function callbackbidon($args)
34     {
35          return;
36     }
37
38     public static function privacy($args)
39     {
40          global $core,$_ctx;
41
42          $urlp = new urlHandler();
43          $urlp->mode = $core->url->mode;
44          $urlp->registerDefault(array('urlPrivate','callbackbidon'));
45
46          //$path = str_replace(http::getHost(),'',$core->blog->url);
47          //if ($core->blog->settings->url_scan == 'query_string')
48          //{
49          //   $path = str_replace(basename($core->blog->url),'',$path);
50          //}
51          if (!isset($session))
52          {
53               $session = new sessionDB(
54                       $core->con,
55                       $core->prefix.'session',
56                       'dc_privateblog_sess_'.$core->blog->id,
57                       '/'
58               );
59               $session->start();
60          }
61
62          foreach ($core->url->getTypes() as $k=>$v)
63          {
64               $urlp->register($k,$v['url'],$v['representation'],array('urlPrivate','callbackbidon'));
65          }
66
67          $urlp->getDocument();
68          $type = $urlp->type;
69          unset($urlp);
70
71          if ($type == 'feed' || $type == 'spamfeed' || $type == 'hamfeed' || $type == 'trackback') 
72          {
73               return;
74          }
75
76          else
77          {
78               // Add cookie test
79               $cookiepass="dc_privateblog_cookie_".$core->blog->id;
80               if (!empty($_COOKIE[$cookiepass])) {
81                    $cookiepassvalue=(($_COOKIE[$cookiepass]) ==
82                                      $core->blog->settings->blog_private_pwd);
83               } else {
84                    $cookiepassvalue=false;
85               }
86               if (!isset($_SESSION['sess_blog_private']) || $_SESSION['sess_blog_private'] == "")
87               {
88                    if ($cookiepassvalue != false) {
89                         $_SESSION['sess_blog_private'] = $_COOKIE[$cookiepass];
90                         //setcookie($cookiepass,$_COOKIE[$cookiepass],time()+31536000,'/');
91                         return;
92
93                    }
94                    if (!empty($_POST['private_pass'])) 
95                    {
96                         if (md5($_POST['private_pass']) == $core->blog->settings->blog_private_pwd)
97                              {
98                                   $_SESSION['sess_blog_private'] = md5($_POST['private_pass']);
99                                   if (!empty($_POST['pass_remember'])) 
100                                   {
101                                        setcookie($cookiepass,md5($_POST['private_pass']),time()+31536000,'/');
102                                   }
103                                   return;
104                              }
105                         $_ctx->blogpass_error = __('Wrong password');
106                    }
107                    $session->destroy();
108                    $core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__).'/default-templates');
109                    self::serveDocument('private.html','text/html',false);
110                    exit;
111               }
112               elseif ($_SESSION['sess_blog_private'] != $core->blog->settings->blog_private_pwd)
113               {
114                    $session->destroy();
115                    $_ctx->blogpass_error = __('Wrong password');
116                    $core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__).'/default-templates');
117                    self::serveDocument('private.html','text/html',false);
118                    exit;
119               }
120               elseif (isset($_POST['blogout']))
121               {
122                    $session->destroy();
123                    setcookie($cookiepass,md5($_POST['private_pass']),time()-86400,'/');
124                    $_ctx->blogpass_error = __('Disconnected');
125                    $core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__).'/default-templates');
126                    self::serveDocument('private.html','text/html',false);
127                    exit;
128               }
129               return;
130          }
131     }
132}
133
134class tplPrivate
135{
136     public static function PrivatePageTitle($attr)
137     {
138          $f = $GLOBALS['core']->tpl->getFilters($attr);
139          return '<?php echo '.sprintf($f,'$core->blog->settings->blog_private_title').'; ?>';
140     }
141
142     public static function PrivateMsg($attr)
143     {
144          return '<?php echo $core->blog->settings->blog_private_msg; ?>';
145     }
146
147     public static function PrivateReqPage($attr)
148     {
149          return '<?php echo(isset($_SERVER[\'REQUEST_URI\']) ? html::escapeHTML($_SERVER[\'REQUEST_URI\']) : $core->blog->url); ?>';
150     }
151
152     public static function IfPrivateMsgError($attr,$content)
153     {
154          return
155          '<?php if ($_ctx->blogpass_error !== null) : ?>'.
156          $content.
157          '<?php endif; ?>';
158     }
159
160     public static function PrivateMsgError($attr)
161     {
162          return '<?php if ($_ctx->blogpass_error !== null) { echo $_ctx->blogpass_error; } ?>';
163     }
164
165     public static function PrivatePassRemember($attr)
166     {
167          $res = '<p><label class="classic">'.
168               form::checkbox(array('pass_remember'),1,'','',2).' '.
169               __('Enable automatic connection').'</label></p>';
170          return $res;
171     }
172
173     public static function privateWidgets(&$w) 
174     {
175          global $core;
176          if ($w->homeonly && $core->url->type != 'default') {
177               return;
178          }
179
180          if ($core->blog->settings->private_flag)
181          {
182               $res = '<div class="blogout">'.
183                    ($w->title ? '<h2>'.html::escapeHTML($w->title).'</h2>' : '').
184                    ($w->text ? $w->text : '').
185                    '<form action="'.$core->blog->url.'" method="post">'.
186                    '<p class="buttons">'.
187                    '<input type="hidden" name="blogout" id="blogout" value="">'.
188                    '<input type="submit" value="'.html::escapeHTML($w->label).'" class="logout"></p>'.
189                    '</form></div>';
190               return $res;
191          }
192          else
193          {
194               return;
195          }
196     }
197}
198?>
Note: See TracBrowser for help on using the repository browser.

Sites map