root/trunk/modules/publisher/classes/ArticleViewMgr.php

Revision 2490, 9.0 kB (checked in by demian, 4 months ago)

Integrated captcha with comments

Line 
1 <?php
2 /* Reminder: always indent with 4 spaces (no tabs). */
3 // +---------------------------------------------------------------------------+
4 // | Copyright (c) 2006, Demian Turner                                         |
5 // | All rights reserved.                                                      |
6 // |                                                                           |
7 // | Redistribution and use in source and binary forms, with or without        |
8 // | modification, are permitted provided that the following conditions        |
9 // | are met:                                                                  |
10 // |                                                                           |
11 // | o Redistributions of source code must retain the above copyright          |
12 // |   notice, this list of conditions and the following disclaimer.           |
13 // | o Redistributions in binary form must reproduce the above copyright       |
14 // |   notice, this list of conditions and the following disclaimer in the     |
15 // |   documentation and/or other materials provided with the distribution.    |
16 // | o The names of the authors may not be used to endorse or promote          |
17 // |   products derived from this software without specific prior written      |
18 // |   permission.                                                             |
19 // |                                                                           |
20 // | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS       |
21 // | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT         |
22 // | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR     |
23 // | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT      |
24 // | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,     |
25 // | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT          |
26 // | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,     |
27 // | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY     |
28 // | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT       |
29 // | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE     |
30 // | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.      |
31 // |                                                                           |
32 // +---------------------------------------------------------------------------+
33 // | Seagull 0.6                                                               |
34 // +---------------------------------------------------------------------------+
35 // | ArticleViewMgr.php                                                        |
36 // +---------------------------------------------------------------------------+
37 // | Author: Demian Turner <demian@phpkitchen.com>                             |
38 // +---------------------------------------------------------------------------+
39 // $Id: ArticleViewMgr.php,v 1.31 2005/06/13 21:34:17 demian Exp $
40
41 require_once SGL_MOD_DIR . '/publisher/classes/PublisherBase.php';
42 require_once SGL_CORE_DIR . '/Item.php';
43 require_once SGL_CORE_DIR . '/Category.php';
44
45 /**
46  * Class for browsing articles.
47  *
48  * @package publisher
49  * @author  Demian Turner <demian@phpkitchen.com>
50  * @version $Revision: 1.31 $
51  * @since   PHP 4.1
52  */
53 class ArticleViewMgr extends SGL_Manager
54 {
55     var $mostRecentArticleID = 0;
56
57     function ArticleViewMgr()
58     {
59         SGL::logMessage(null, PEAR_LOG_DEBUG);
60         parent::SGL_Manager();
61
62         $this->pageTitle    = 'Article Browser';
63         $this->template     = 'articleBrowser.html';
64         $this->_aActionsMapping =  array(
65             'view'   => array('view'),
66             'summary'   => array('summary'),
67         );
68         //  enable comments if configured
69         if (SGL::moduleIsEnabled('comment')) {
70             require_once SGL_MOD_DIR  . '/comment/classes/CommentDAO.php';
71             require_once SGL_CORE_DIR . '/Delegator.php';
72             $dao = &CommentDAO::singleton();
73             $this->da  = new SGL_Delegator();
74             $this->da->add($dao);
75         }
76     }
77
78     function validate($req, &$input)
79     {
80         SGL::logMessage(null, PEAR_LOG_DEBUG);
81         $input->error           = array();
82         $this->validated        = true;
83         $input->pageTitle       = $this->pageTitle;
84         $input->masterTemplate  = $this->masterTemplate;
85         $input->template        = $this->template;
86
87         //  form vars
88         $input->action          = ($req->get('action')) ? $req->get('action') : 'view';
89         $input->articleID       = ($req->get('frmArticleID'))
90                                     ? (int)$req->get('frmArticleID')
91                                     : (int)SGL_Session::get('articleID');
92         $input->catID           = (int)$req->get('frmCatID');
93         $input->from            = ($req->get('frmFrom')) ? (int)$req->get('frmFrom'):0;
94         $input->dataTypeID      = ($req->get('frmDataTypeID'))
95                                       ? $req->get('frmDataTypeID')
96                                       : $this->conf['site']['defaultArticleViewType'];
97         $input->articleLang     = str_replace('-', '_', $req->get('frmArticleLang'));
98
99         //  if article id passed from 'Articles in this Category' list
100         //  make it available for lead story
101         if ($input->articleID) {
102             $this->mostRecentArticleID = $input->articleID;
103         }
104         PublisherBase::maintainState($input);
105     }
106
107     function display(&$output)
108     {
109         SGL::logMessage(null, PEAR_LOG_DEBUG);
110         //  get category info
111         $cat = & new SGL_Category();
112         $output->path = $cat->getBreadCrumbs($output->catID, true, 'linkCrumbsAlt1');
113         $output->currentCat = $cat->getLabel($output->catID);
114     }
115
116     /**
117      * The view 'action' method returns details for requested article ID.
118      *
119      * @return void
120      */
121     function _cmd_view(&$input, &$output)
122     {
123         SGL::logMessage(null, PEAR_LOG_DEBUG);
124
125         $output->template = 'articleView.html';
126         $ret = SGL_Item::getItemDetail($input->articleID, null, $input->articleLang);
127         //  Encode current url for redirecting purposes
128         $url = $input->getCurrentUrl();
129         $output->redir = urlencode(urlencode($url->toString()));
130
131         if (PEAR::isError($ret) || !$ret) {
132             return false;
133         }
134
135         // Set current category id to the category id for this article
136         $input->catID = $ret['category_id'];
137         $output->leadArticle = $ret;
138
139         if ($output->leadArticle['type'] != 'Static Html Article') {
140
141             // Retrieving a list of related articles for $input->catID
142             $output->articleList = SGL_Item::getItemListByCatID(
143                 $input->catID, $input->dataTypeID, $this->mostRecentArticleID);
144
145             // and related documents
146             $output->documentList = PublisherBase::getDocumentListByCatID($input->catID);
147         } else {
148             $output->staticArticle = true;
149         }
150         //  display comments?
151         if (SGL::moduleIsEnabled('comment') &&  !empty($this->conf['ArticleViewMgr']['commentsEnabled'])) {
152             $output->aComments = $this->da->getCommentsByEntityId('articleview',
153                 $input->articleID);
154
155             //  with captcha?
156             if ($this->conf['ArticleViewMgr']['useCaptcha']) {
157                 require_once SGL_CORE_DIR . '/Captcha.php';
158                 $captcha = new SGL_Captcha();
159                 $output->captcha = $captcha->generateCaptcha();
160                 $output->useCaptcha = true;
161             }
162         }
163     }
164
165     function _cmd_summary(&$input, &$output)
166     {
167         SGL::logMessage(null, PEAR_LOG_DEBUG);
168
169         $aResult = SGL_Item::retrievePaginated(
170             $input->catID,
171             $bPublish = true,
172             $input->dataTypeID,
173             '',
174             $input->from,
175             'start_date');
176
177         if (is_array($aResult['data']) && count($aResult['data'])) {
178             $limit = $_SESSION['aPrefs']['resPerPage'];
179             $output->pager = ($aResult['totalItems'] <= $limit) ? false : true;
180         }
181         $output->aPagedData = $aResult;
182
183         foreach ($aResult['data'] as $key => $aValues) {
184             $output->articleList[$key] = array_merge(
185                 SGL_Item::getItemDetail($aValues['item_id'], null, $input->articleLang),
186                     $aResult['data'][$key]);
187
188             // summarises article content
189             foreach ($output->articleList[$key] as $k => $cValues) {
190                 switch ($k) {
191
192                 case 'bodyHtml':
193                     $content = $output->articleList[$key]['bodyHtml'];
194                     $output->articleList[$key]['bodyHtml'] =
195                         SGL_String::summariseHtml($content);
196                     break;
197
198                 case 'newsHtml':
199                     $content = $output->articleList[$key]['newsHtml'];
200                     $output->articleList[$key]['newsHtml'] =
201                         SGL_String::summariseHtml($content);
202                     break;
203                 }
204             }
205         }
206     }
207 }
208 ?>
209
Note: See TracBrowser for help on using the browser.