Dotclear

source: plugins/pages/_public.php @ 3043:c330218710bf

Revision 3043:c330218710bf, 8.5 KB checked in by franck <carnet.franck.paul@…>, 10 years ago (diff)

Remove unecessary declaration

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
6# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
7# Licensed under the GPL version 2.0 license.
8# See LICENSE file or
9# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
10#
11# -- END LICENSE BLOCK -----------------------------------------
12if (!defined('DC_RC_PATH')) { return; }
13
14$core->addBehavior('coreBlogBeforeGetPosts',array('publicPages','coreBlogBeforeGetPosts'));
15
16# Localized string we find in template
17__('Published on');
18__('This page\'s comments feed');
19
20require dirname(__FILE__).'/_widgets.php';
21
22class publicPages
23{
24     public static function coreBlogBeforeGetPosts($params)
25     {
26          global $core;
27
28          if ($core->url->type == 'search') {
29               // Add page post type for searching
30               if (isset($params['post_type'])) {
31                    if (!is_array($params['post_type'])) {
32                         // Convert it in array
33                         $params['post_type'] = array($params['post_type']);
34                    }
35                    if (!in_array('page', $params['post_type'])) {
36                         // Add page post type
37                         $params['post_type'][] = 'page';
38                    }
39               } else {
40                    // Dont miss default post type (aka post)
41                    $params['post_type'] = array('post','page');
42               }
43          }
44     }
45}
46
47class urlPages extends dcUrlHandlers
48{
49     public static function pages($args)
50     {
51          if ($args == '') {
52               # No page was specified.
53               self::p404();
54          }
55          else
56          {
57               $_ctx =& $GLOBALS['_ctx'];
58               $core =& $GLOBALS['core'];
59
60               $core->blog->withoutPassword(false);
61
62               $params = new ArrayObject(array(
63                    'post_type' => 'page',
64                    'post_url' => $args));
65
66               $core->callBehavior('publicPagesBeforeGetPosts',$params,$args);
67
68               $_ctx->posts = $core->blog->getPosts($params);
69
70               $_ctx->comment_preview = new ArrayObject();
71               $_ctx->comment_preview['content'] = '';
72               $_ctx->comment_preview['rawcontent'] = '';
73               $_ctx->comment_preview['name'] = '';
74               $_ctx->comment_preview['mail'] = '';
75               $_ctx->comment_preview['site'] = '';
76               $_ctx->comment_preview['preview'] = false;
77               $_ctx->comment_preview['remember'] = false;
78
79               $core->blog->withoutPassword(true);
80
81
82               if ($_ctx->posts->isEmpty())
83               {
84                    # The specified page does not exist.
85                    self::p404();
86               }
87               else
88               {
89                    $post_id = $_ctx->posts->post_id;
90                    $post_password = $_ctx->posts->post_password;
91
92                    # Password protected entry
93                    if ($post_password != '' && !$_ctx->preview)
94                    {
95                         # Get passwords cookie
96                         if (isset($_COOKIE['dc_passwd'])) {
97                              $pwd_cookie = json_decode($_COOKIE['dc_passwd']);
98                              if ($pwd_cookie === NULL) {
99                                   $pwd_cookie = array();
100                              } else {
101                                   $pwd_cookie = (array) $pwd_cookie;
102                              }
103                         } else {
104                              $pwd_cookie = array();
105                         }
106
107                         # Check for match
108                         # Note: We must prefix post_id key with '#'' in pwd_cookie array in order to avoid integer conversion
109                         # because MyArray["12345"] is treated as MyArray[12345]
110                         if ((!empty($_POST['password']) && $_POST['password'] == $post_password)
111                         || (isset($pwd_cookie['#'.$post_id]) && $pwd_cookie['#'.$post_id] == $post_password))
112                         {
113                              $pwd_cookie['#'.$post_id] = $post_password;
114                              setcookie('dc_passwd',json_encode($pwd_cookie),0,'/');
115                         }
116                         else
117                         {
118                              self::serveDocument('password-form.html','text/html',false);
119                              return;
120                         }
121                    }
122
123                    $post_comment =
124                         isset($_POST['c_name']) && isset($_POST['c_mail']) &&
125                         isset($_POST['c_site']) && isset($_POST['c_content']) &&
126                         $_ctx->posts->commentsActive();
127
128                    # Posting a comment
129                    if ($post_comment)
130                    {
131                         # Spam trap
132                         if (!empty($_POST['f_mail'])) {
133                              http::head(412,'Precondition Failed');
134                              header('Content-Type: text/plain');
135                              echo "So Long, and Thanks For All the Fish";
136                              # Exits immediately the application to preserve the server.
137                              exit;
138                         }
139
140                         $name = $_POST['c_name'];
141                         $mail = $_POST['c_mail'];
142                         $site = $_POST['c_site'];
143                         $content = $_POST['c_content'];
144                         $preview = !empty($_POST['preview']);
145
146                         if ($content != '')
147                         {
148                              # --BEHAVIOR-- publicBeforeCommentTransform
149                              $buffer = $core->callBehavior('publicBeforeCommentTransform',$content);
150                              if ($buffer != '') {
151                                   $content = $buffer;
152                              } else {
153                                   if ($core->blog->settings->system->wiki_comments) {
154                                        $core->initWikiComment();
155                                   } else {
156                                        $core->initWikiSimpleComment();
157                                   }
158                                   $content = $core->wikiTransform($content);
159                              }
160                              $content = $core->HTMLfilter($content);
161                         }
162
163                         $_ctx->comment_preview['content'] = $content;
164                         $_ctx->comment_preview['rawcontent'] = $_POST['c_content'];
165                         $_ctx->comment_preview['name'] = $name;
166                         $_ctx->comment_preview['mail'] = $mail;
167                         $_ctx->comment_preview['site'] = $site;
168
169                         if ($preview)
170                         {
171                              # --BEHAVIOR-- publicBeforeCommentPreview
172                              $core->callBehavior('publicBeforeCommentPreview',$_ctx->comment_preview);
173
174                              $_ctx->comment_preview['preview'] = true;
175                         }
176                         else
177                         {
178                              # Post the comment
179                              $cur = $core->con->openCursor($core->prefix.'comment');
180                              $cur->comment_author = $name;
181                              $cur->comment_site = html::clean($site);
182                              $cur->comment_email = html::clean($mail);
183                              $cur->comment_content = $content;
184                              $cur->post_id = $_ctx->posts->post_id;
185                              $cur->comment_status = $core->blog->settings->system->comments_pub ? 1 : -1;
186                              $cur->comment_ip = http::realIP();
187
188                              $redir = $_ctx->posts->getURL();
189                              $redir .= $core->blog->settings->system->url_scan == 'query_string' ? '&' : '?';
190
191                              try
192                              {
193                                   if (!text::isEmail($cur->comment_email)) {
194                                        throw new Exception(__('You must provide a valid email address.'));
195                                   }
196
197                                   # --BEHAVIOR-- publicBeforeCommentCreate
198                                   $core->callBehavior('publicBeforeCommentCreate',$cur);
199                                   if ($cur->post_id) {
200                                        $comment_id = $core->blog->addComment($cur);
201
202                                        # --BEHAVIOR-- publicAfterCommentCreate
203                                        $core->callBehavior('publicAfterCommentCreate',$cur,$comment_id);
204                                   }
205
206                                   if ($cur->comment_status == 1) {
207                                        $redir_arg = 'pub=1';
208                                   } else {
209                                        $redir_arg = 'pub=0';
210                                   }
211
212                                   header('Location: '.$redir.$redir_arg);
213                              }
214                              catch (Exception $e)
215                              {
216                                   $_ctx->form_error = $e->getMessage();
217                                   $_ctx->form_error;
218                              }
219                         }
220                    }
221
222                    # The entry
223                    if ($_ctx->posts->trackbacksActive()) {
224                         header('X-Pingback: '.$core->blog->url.$core->url->getURLFor("xmlrpc",$core->blog->id));
225                    }
226
227                    $tplset = $core->themes->moduleInfo($core->blog->settings->system->theme,'tplset');
228                    if (!empty($tplset) && is_dir(dirname(__FILE__).'/default-templates/'.$tplset)) {
229                         $core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__).'/default-templates/'.$tplset);
230                    } else {
231                         $core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__).'/default-templates/'.DC_DEFAULT_TPLSET);
232                    }
233                    self::serveDocument('page.html');
234               }
235          }
236     }
237
238     public static function pagespreview($args)
239     {
240          $core = $GLOBALS['core'];
241          $_ctx = $GLOBALS['_ctx'];
242
243          if (!preg_match('#^(.+?)/([0-9a-z]{40})/(.+?)$#',$args,$m)) {
244               # The specified Preview URL is malformed.
245               self::p404();
246          }
247          else
248          {
249               $user_id = $m[1];
250               $user_key = $m[2];
251               $post_url = $m[3];
252               if (!$core->auth->checkUser($user_id,null,$user_key)) {
253                    # The user has no access to the entry.
254                    self::p404();
255               }
256               else
257               {
258                    $_ctx->preview = true;
259                    if (defined ("DC_ADMIN_URL")) {
260                         $_ctx->xframeoption=DC_ADMIN_URL;
261                    }
262
263                    self::pages($post_url);
264               }
265          }
266     }
267}
268
269class tplPages
270{
271     # Widget function
272     public static function pagesWidget($w)
273     {
274          global $core, $_ctx;
275
276          if ($w->offline)
277               return;
278
279          if (($w->homeonly == 1 && $core->url->type != 'default') ||
280               ($w->homeonly == 2 && $core->url->type == 'default')) {
281               return;
282          }
283
284          $params['post_type'] = 'page';
285          $params['limit'] = abs((integer) $w->limit);
286          $params['no_content'] = true;
287          $params['post_selected'] = false;
288
289          $sort = $w->sortby;
290          if (!in_array($sort,array('post_title','post_position','post_dt'))) {
291               $sort = 'post_title';
292          }
293
294          $order = $w->orderby;
295          if ($order != 'asc') {
296               $order = 'desc';
297          }
298          $params['order'] = $sort.' '.$order;
299
300          $rs = $core->blog->getPosts($params);
301
302          if ($rs->isEmpty()) {
303               return;
304          }
305
306          $res = ($w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '').'<ul>';
307
308          while ($rs->fetch()) {
309               $class = '';
310               if (($core->url->type == 'pages' && $_ctx->posts instanceof record && $_ctx->posts->post_id == $rs->post_id)) {
311                    $class = ' class="page-current"';
312               }
313               $res .= '<li'.$class.'><a href="'.$rs->getURL().'">'.
314               html::escapeHTML($rs->post_title).'</a></li>';
315          }
316
317          $res .= '</ul>';
318
319          return $w->renderDiv($w->content_only,'pages '.$w->class,'',$res);
320     }
321}
Note: See TracBrowser for help on using the repository browser.

Sites map