<?php /* + ----------------------------------------------------------------------------+ | e107 website system | | ©Steve Dunstan 2001-2002 | http://e107.org | jalist@e107.org | | Released under the terms and conditions of the | GNU General Public License (http://gnu.org). | | $Source: /cvs_backup/e107_0.8/page.php,v $ | $Revision: 1.9 $ | $Date: 2007-01-20 14:52:41 $ | $Author: mrpete $ | +----------------------------------------------------------------------------+ */ require_once("class2.php"); $page = new pageClass(); if(isset($_POST['enterpw'])) { $page -> setPageCookie(); } if(!e_QUERY) { require_once(HEADERF); $tmp = $page -> listPages(); if(is_array($tmp)) { $ns -> tablerender($tmp['title'], $tmp['text']); require_once(FOOTERF); exit; } } else { $cacheString = 'page_'.$page->pageID; $cachePageTitle = 'page-t_'.$page->pageID; if($cacheData = $e107cache->retrieve($cacheString)) { list($pagetitle,$comment_flag) = explode("^",$e107cache->retrieve($cachePageTitle)); define("e_PAGETITLE", $pagetitle); require_once(HEADERF); echo $cacheData; } else { $tmp = $page -> showPage(); define("e_PAGETITLE", $tmp['title']); require_once(HEADERF); if ($tmp['err']) // Need to display error block after header defined { $ns -> tablerender($tmp['title'], $tmp['text']); require_once(FOOTERF); exit; } if ($tmp['cachecontrol'] == TRUE) { ob_start(); $ns -> tablerender($tmp['title'], $tmp['text']); $cache_data = ob_get_flush(); $e107cache->set($cacheString, $cache_data); $e107cache->set($cachePageTitle, $tmp['title']."^".$tmp['comment_flag']); $comment_flag = $tmp['comment_flag']; } else { $ns -> tablerender($tmp['title'], $tmp['text']); $comment_flag = $tmp['comment_flag']; } } if($com = $page -> pageComment($comment_flag)) { echo $com['comment'].$com['comment_form']; } } require_once(FOOTERF); /* EOF */ class pageClass { var $bullet; /* bullet image */ var $pageText; /* main text of selected page, not parsed */ var $multipageFlag; /* flag - true if multiple page page, false if not */ var $pageTitles; /* array containing page titles */ var $pageID; /* id number of page to be displayed */ var $pageSelected; /* selected page of multiple page page */ var $pageToRender; /* parsed page to be sent to screen */ var $debug; /* temp debug flag */ var $title; /* title of page, it if has one (as defined in [newpage=title] tag */ function pageClass($debug=FALSE) { /* constructor */ $tmp = explode(".", e_QUERY); $this -> pageID = intval($tmp[0]); $this -> pageSelected = (isset($tmp[1]) ? intval($tmp[1]) : 0); $this -> pageTitles = array(); if(defined("BULLET")) { $this -> bullet = "<img src='".THEME."images/".BULLET."' alt='' style='vertical-align: middle;' />"; } elseif(file_exists(THEME."images/bullet2.gif")) { $this -> bullet = "<img src='".THEME."images/bullet2.gif' alt='bullet' style='vertical-align: middle;' />"; } else { $this -> bullet = ""; } $this -> debug = $debug; if($this -> debug) { $this -> debug = "<b>PageID</b> ".$this -> pageID." <br />"; $this -> debug .= "<b>pageSelected</b> ".$this -> pageSelected." <br />"; } } function listPages() { global $pref, $sql, $ns; if(!isset($pref['listPages']) || !$pref['listPages']) { message_handler("MESSAGE", LAN_PAGE_1); } else { if(!$sql -> db_Select("page", "*", "page_theme='' AND page_class IN (".USERCLASS_LIST.") ")) { $text = LAN_PAGE_2; } else { $pageArray = $sql -> db_getList(); foreach($pageArray as $page) { extract($page); $text .= $this -> bullet." <a href='".e_BASE."page.php?".$page_id."'>".$page_title."</a><br />"; } $ns -> tablerender(LAN_PAGE_11, $text,"cpage_list"); } } } function showPage() { global $sql, $ns; $query = "SELECT p.*, u.user_id, u.user_name FROM #page AS p LEFT JOIN #user AS u ON p.page_author = u.user_id WHERE p.page_id='".intval($this -> pageID)."' AND p.page_class IN (".USERCLASS_LIST.") "; if(!$sql -> db_Select_gen($query) && !$_GET['elan']) { $ret['title'] = LAN_PAGE_12; // ***** CHANGED $ret['text'] = LAN_PAGE_3; $ret['comment_flag'] = ''; $ret['err'] = TRUE; return $ret; } extract($sql -> db_Fetch()); $this -> pageText = $page_text; $this -> pageCheckPerms($page_class, $page_password, $page_title); if($this -> debug) { echo "<b>pageText</b> ".$this -> pageText." <br />"; } $this -> parsePage(); $gen = new convert; $text = ''; // Notice removal if($page_author) { $text .= "<div class='smalltext' style='text-align:right'>".$user_name.", ".$gen->convert_date($page_datestamp, "long")."</div><br />"; } if($this -> title) { $text .= "<b>".$this -> title."</b><br /><br />"; } $text .= $this -> pageToRender; $text .= $this -> pageIndex(); $text .= $this -> pageRating($page_rating_flag); $ret['title'] = $page_title; $ret['text'] = $text; $ret['comment_flag'] = $page_comment_flag; $ret['err'] = FALSE; $ret['cachecontrol'] = (isset($page_password) && !$page_password); // Don't cache password protected pages return $ret; } function parsePage() { global $tp; $this -> pageTitles = array(); // Notice removal if(preg_match_all("/\[newpage.*?\]/si", $this -> pageText, $pt)) { $pages = preg_split("/\[newpage.*?\]/si", $this -> pageText, -1, PREG_SPLIT_NO_EMPTY); $this -> multipageFlag = TRUE; } else { $this -> pageToRender = $tp -> toHTML($this -> pageText, TRUE, 'BODY'); return; } foreach($pt[0] as $title) { $this -> pageTitles[] = $title; } if(!trim($pages[0])) { $count = 0; foreach($pages as $page) { $pages[$count] = $pages[($count+1)]; $count++; } unset($pages[(count($pages)-1)]); } $pageCount = count($pages); $titleCount = count($this -> pageTitles); /* if the vars above don't match, page 1 has no [newpage] tag, so we need to create one ... */ if($pageCount != $titleCount) { array_unshift($this -> pageTitles, "[newpage]"); } /* ok, titles now match pages, rename the titles if needed ... */ $count =0; foreach($this -> pageTitles as $title) { $titlep = preg_replace("/\[newpage=(.*?)\]/", "\\1", $title); $this -> pageTitles[$count] = ($titlep == "[newpage]" ? LAN_PAGE_13." ".($count+1)." " : $tp -> toHTML($titlep, TRUE, 'TITLE')); $count++; } $this -> pageToRender = $tp -> toHTML($pages[$this -> pageSelected], TRUE, 'BODY'); $this -> title = (substr($this -> pageTitles[$this -> pageSelected], -1) == ";" ? "" : $this -> pageTitles[$this -> pageSelected]); if($this -> debug) { echo "<b>multipageFlag</b> ".$this -> multipageFlag." <br />"; if($this -> multipageFlag) { echo "<pre>"; print_r($pages); echo "</pre>"; echo "<b>pageCount</b> ".$pageCount." <br />"; echo "<b>titleCount</b> ".$titleCount." <br />"; echo "<pre>"; print_r($this -> pageTitles); echo "</pre>"; } } } function pageIndex() { $count = 0; foreach($this -> pageTitles as $title) { if (!$count) { $itext = "<br /><br />"; } $itext .= $this -> bullet." ".($count == $this -> pageSelected ? $title : "<a href='".e_SELF."?".$this -> pageID.".".$count."'>".$title."</a>")."<br />\n"; $count++; } return $itext; } function pageRating($page_rating_flag) { $rate_text = ''; // Notice removal if($page_rating_flag) { require_once(e_HANDLER."rate_class.php"); $rater = new rater; $rate_text = "<br /><table style='width:100%'><tr><td style='width:50%'>"; if ($ratearray = $rater->getrating("page", $this -> pageID)) { if ($ratearray[2] == "") { $ratearray[2] = 0; } $rate_text .= "<img src='".e_IMAGE."rate/box/box".$ratearray[1].".png' alt='' style='vertical-align:middle;' />\n"; $rate_text .= " ".$ratearray[1].".".$ratearray[2]." - ".$ratearray[0]." "; $rate_text .= ($ratearray[0] == 1 ? "vote" : "votes"); } else { $rating .= LAN_PAGE_dl_13; } $rate_text .= "</td><td style='width:50%; text-align:right'>"; if (!$rater->checkrated("page", $this -> pageID) && USER) { $rate_text .= $rater->rateselect(" <b>".LAN_PAGE_4."</b>", "page", $this -> pageID); } else if(!USER) { $rate_text .= " "; } else { $rate_text .= LAN_PAGE_5; } $rate_text .= "</td></tr></table>"; } return $rate_text; } function pageComment($page_comment_flag) { global $sql, $ns, $e107cache, $tp, $comment_shortcodes,$cacheString; if($page_comment_flag) { require_once(e_HANDLER."comment_class.php"); $cobj = new comment; if (isset($_POST['commentsubmit'])) { $cobj->enter_comment($_POST['author_name'], $_POST['comment'], "page", $this -> pageID, $pid, $_POST['subject']); $e107cache->clear("comment.page.".$this -> pageID); $e107cache->clear($cacheString); } return $cobj->compose_comment("page", "comment", $this -> pageID, $width="", $subject="", $showrate=FALSE, $return=TRUE); } } function pageCheckPerms($page_class, $page_password, $page_title=" ") { global $ns, $tp, $HEADER, $FOOTER, $sql; // $tp added if (!check_class($page_class)) { define("e_PAGETITLE", $page_title); // HEADERF requires that $tp is defined - hence declared as global above. require_once(HEADERF); // Do header now in case wrong password was entered message_handler("MESSAGE", LAN_PAGE_6); require_once(FOOTERF); exit; } if (!$page_password) { return TRUE; } if(isset($_POST['submit_page_pw'])) { if($_POST['page_pw'] == $page_password) { $this -> setPageCookie(); } } else { $cookiename = "e107page_".$this -> pageID; if(isset($_COOKIE[$cookiename]) && ($_COOKIE[$cookiename] == md5($page_password.USERID))) { return TRUE; } // Invalid/empty password here } define("e_PAGETITLE", $page_title); // HEADERF requires that $tp is defined - hence declared as global above. require_once(HEADERF); // Do header now in case wrong password was entered // Need to prompt for password here if (isset($_POST['submit_page_pw'])) { message_handler("MESSAGE", LAN_PAGE_7); // Invalid password } $pw_entry_text = " <div style='text-align:center; margin-left:auto; margin-right: auto;'> <form method='post' action='".e_SELF."?".e_QUERY."' id='pwform'> <table style='width:100%;' class='fborder'> <tr> <td class='forumheader' colspan='3' style='text-align:center; white-space:nowrap'>".LAN_PAGE_8."</td> </tr> <tr> <td class='forumheader3' style='width:20%;'>".LAN_PAGE_9.":</td> <td class='forumheader3' style='width: 60%;'><input type='password' id='page_pw' name='page_pw' style='width: 90%;'/></td> <td class='forumheader3' style='width:20%; vertical-align:middle; margin-left:auto; margin-right:auto; text-align:center;'><img src='".e_IMAGE."generic/".IMODE."/password.png' alt='' /></td> </tr> <tr> <td class='forumheader' colspan='3' style='text-align:center;'><input class='button' type='submit' name='submit_page_pw' value='".LAN_PAGE_10."' /></td> </tr> </table> </form> </div> "; // Mustn't return to higher level code here $ns->tablerender($page_title, $pw_entry_text); // HEADERF also clears $text - hence different variable require_once(FOOTERF); exit; } function setPageCookie() { global $pref; $pref['pageCookieExpire'] = max($pref['pageCookieExpire'], 120); $hash = md5($_POST['page_pw'].USERID); cookie("e107page_".e_QUERY, $hash, (time() + $pref['pageCookieExpire'])); header("location:".e_SELF."?".e_QUERY); exit; } } ?>