if still not working, tell me your XOOPS version, how you installed/upgraded, what modules you have.
<?php
// $Id: functions.php,v 1.3 2005/10/19 17:20:33 phppp Exp $
// ------------------------------------------------------------------------ //
// XOOPS - PHP Content Management System //
// Copyright (c) 2000 XOOPS.org //
// <https://xoops.org/> //
// ------------------------------------------------------------------------ //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// You may not change or alter any portion of this comment or credits //
// of supporting developers from this source code or any supporting //
// source code which is considered copyrighted (c) material of the //
// original comment or credit authors. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program; if not, write to the Free Software //
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //
// ------------------------------------------------------------------------ //
// Author: Kazumi Ono (AKA onokazu) //
// URL: http://www.myweb.ne.jp/, https://xoops.org/, http://www.xoopscube.jp/ //
// Project: The XOOPS Project //
// ------------------------------------------------------------------------- //
if(!defined("NEWBB_FUNCTIONS")):
define("NEWBB_FUNCTIONS", true);
function newbb_message( $message )
{
global $xoopsModuleConfig;
if(!empty($xoopsModuleConfig["do_debug"])){
if(is_array($message) || is_object($message)){
echo "<div><pre>";print_r($message);echo "</pre></div>";
}else{
echo "<div>$message</div>";
}
}
return;
}
// Backword compatible
function newbb_load_lang_file( $filename, $module = '', $default = 'english' )
{
if(function_exists("xoops_load_lang_file")){
return xoops_load_lang_file($filename, $module, $default);
}
$lang = $GLOBALS['xoopsConfig']['language'];
$path = XOOPS_ROOT_PATH . ( empty($module) ? '/' : "/modules/$module/" ) . 'language';
if ( !( $ret = @include_once( "$path/$lang/$filename.php" ) ) ) {
$ret = @include_once( "$path/$default/$filename.php" );
}
return $ret;
}
// Adapted from PMA_getIp() [phpmyadmin project]
function newbb_getIP($asString = false)
{
// Gets the proxy ip sent by the user
$proxy_ip = '';
if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$proxy_ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else if (!empty($_SERVER["HTTP_X_FORWARDED"])) {
$proxy_ip = $_SERVER["HTTP_X_FORWARDED"];
} else if (!empty($_SERVER["HTTP_FORWARDED_FOR"])) {
$proxy_ip = $_SERVER["HTTP_FORWARDED_FOR"];
} else if (!empty($_SERVER["HTTP_FORWARDED"])) {
$proxy_ip = $_SERVER["HTTP_FORWARDED"];
} else if (!empty($_SERVER["HTTP_VIA"])) {
$proxy_ip = $_SERVER["HTTP_VIA"];
} else if (!empty($_SERVER["HTTP_X_COMING_FROM"])) {
$proxy_ip = $_SERVER["HTTP_X_COMING_FROM"];
} else if (!empty($_SERVER["HTTP_COMING_FROM"])) {
$proxy_ip = $_SERVER["HTTP_COMING_FROM"];
}
if (!empty($proxy_ip) &&
$is_ip = ereg('^([0-9]{1,3}.){3,3}[0-9]{1,3}', $proxy_ip, $regs) &&
count($regs) > 0
) {
$the_IP = $regs[0];
}else{
$the_IP = $_SERVER['REMOTE_ADDR'];
}
$the_IP = ($asString)?$the_IP:ip2long($the_IP);
return $the_IP;
}
function &newbb_getUnameFromIds( $userid, $usereal = 0, $linked = false )
{
$myts = &MyTextSanitizer::getInstance();
if(!is_array($userid)) $userid = array($userid);
$userid = array_map("intval", $userid);
if(count($userid)>0){
$member_handler =& xoops_gethandler("member");
$user_criteria = new CriteriaCompo(new Criteria("level", 0, ">"));
$user_criteria->add(new Criteria("uid", "(".implode(",",$userid).")", "IN"));
$users_obj = $member_handler->getUsers( $user_criteria, true );
foreach($users_obj as $uid=>$user){
if (is_object($user)) {
if ( $usereal && $user->getVar("name") ) {
$users[$uid] = $myts->htmlSpecialChars($user->getVar("name"));
} else {
$users[$uid] = $myts->htmlSpecialChars($user->getVar("uname"));
}
if($linked){
$users[$uid] = '<a href="' . XOOPS_URL . '/userinfo.php?uid='.$uid.'">'.$users[$uid].'</a>';
}
}
}
$users[0] = $myts->htmlSpecialChars($GLOBALS["xoopsConfig"]["anonymous"]);
unset($users_obj);
}else{
$users = array();
}
return $users;
}
function newbb_getUnameFromId( $userid, $usereal = 0 )
{
$userid = intval($userid);
$usereal = intval($usereal);
if ($userid > 0) {
$member_handler =& xoops_gethandler('member');
$user =& $member_handler->getUser($userid);
if (is_object($user)) {
$ts =& MyTextSanitizer::getInstance();
if ( $usereal && $user->getVar('name') ) {
return $ts->htmlSpecialChars($user->getVar('name'));
} else {
return $ts->htmlSpecialChars($user->getVar('uname'));
}
}
}
return $GLOBALS['xoopsConfig']['anonymous'];
}
function newbb_attachmentImage($source)
{
global $xoopsModuleConfig;
$img_path = XOOPS_ROOT_PATH.'/'.$xoopsModuleConfig['dir_attachments'];
$img_url = XOOPS_URL.'/'.$xoopsModuleConfig['dir_attachments'];
$thumb_path = $img_path.'/thumbs';
$thumb_url = $img_url.'/thumbs';
$thumb = $thumb_path.'/'.$source;
$image = $img_path.'/'.$source;
$thumb_url = $thumb_url.'/'.$source;
$image_url = $img_url.'/'.$source;
$imginfo = @getimagesize($image);
$img_info = ( count($imginfo)>0 )?$imginfo[0]."X".$imginfo[1].' px':"";
if($xoopsModuleConfig['max_img_width']>0){
if(
( $xoopsModuleConfig['max_image_width']>0 && $imginfo[0]>$xoopsModuleConfig['max_image_width'] )
||
( $xoopsModuleConfig['max_image_height']>0 && $imginfo[1]>$xoopsModuleConfig['max_image_height'])
){
if($imginfo[0]>$xoopsModuleConfig['max_img_width']){
$pseudo_width = $xoopsModuleConfig['max_img_width'];
$pseudo_height = $xoopsModuleConfig['max_img_width']*($imginfo[1]/$imginfo[0]);
$pseudo_size = "width='".$pseudo_width."px' height='".$pseudo_height."px'";
}
if($xoopsModuleConfig['max_image_height']>0 && $pseudo_height>$xoopsModuleConfig['max_image_height']){
$pseudo_height = $xoopsModuleConfig['max_image_height'];
$pseudo_width = $xoopsModuleConfig['max_image_height']*($imginfo[0]/$imginfo[1]);
$pseudo_size = "width='".$pseudo_width."px' height='".$pseudo_height."px'";
}
}else
if(!file_exists($thumb_path.'/'.$source) && $imginfo[0]>$xoopsModuleConfig['max_img_width']){
newbb_createThumbnail($source, $xoopsModuleConfig['max_img_width']);
}
}
if(file_exists($thumb)){
$attachmentImage = '<a href="'.$image_url.'" title="'.$source.' '.$img_info.'" target="newbb_image">';
$attachmentImage .= '<img src="'.$thumb_url.'" alt="'.$source.' '.$img_info.'" />';
$attachmentImage .= '</a>';
}elseif(!empty($pseudo_size)){
$attachmentImage = '<a href="'.$image_url.'" title="'.$source.' '.$img_info.'" target="newbb_image">';
$attachmentImage .= '<img src="'.$image_url.'" '.$pseudo_size.' alt="'.$source.' '.$img_info.'" />';
$attachmentImage .= '</a>';
}elseif(file_exists($image)){
$attachmentImage = '<img src="'.$image_url.'" alt="'.$source.' '.$img_info.'" />';
}else $attachmentImage = '';
return $attachmentImage;
}
function newbb_createThumbnail($source, $thumb_width)
{
global $xoopsModuleConfig;
$img_path = XOOPS_ROOT_PATH.'/'.$xoopsModuleConfig['dir_attachments'];
$thumb_path = $img_path.'/thumbs';
$src_file = $img_path.'/'.$source;
$new_file = $thumb_path.'/'.$source;
$imageLibs = newbb_getImageLibs();
if (!filesize($src_file) || !is_readable($src_file)) {
return false;
}
if (!is_dir($thumb_path) || !is_writable($thumb_path)) {
return false;
}
$imginfo = @getimagesize($src_file);
if ( NULL == $imginfo ) {
return false;
}
if($imginfo[0] < $thumb_width) {
return false;
}
$newWidth = (int)(min($imginfo[0],$thumb_width));
$newHeight = (int)($imginfo[1] * $newWidth / $imginfo[0]);
if ($xoopsModuleConfig['image_lib'] == 1 or $xoopsModuleConfig['image_lib'] == 0 )
{
if (preg_match("#[A-Z]:|\\#Ai",__FILE__)){
$cur_dir = dirname(__FILE__);
$src_file_im = '"'.$cur_dir.'\'.strtr($src_file, '/', '\').'"';
$new_file_im = '"'.$cur_dir.'\'.strtr($new_file, '/', '\').'"';
} else {
$src_file_im = @escapeshellarg($src_file);
$new_file_im = @escapeshellarg($new_file);
}
$path = empty($xoopsModuleConfig['path_magick'])?"":$xoopsModuleConfig['path_magick']."/";
$magick_command = $path . 'convert -quality 85 -antialias -sample ' . $newWidth . 'x' . $newHeight . ' ' . $src_file_im . ' +profile "*" ' . str_replace('\', '/', $new_file_im) . '';
@passthru($magick_command);
if (file_exists($new_file)){
return true;
}
}
if ($xoopsModuleConfig['image_lib'] == 2 or $xoopsModuleConfig['image_lib'] == 0 )
{
$path = empty($xoopsModuleConfig['path_netpbm'])?"":$xoopsModuleConfig['path_netpbm']."/";
if (eregi(".png", $source)){
$cmd = $path . "pngtopnm $src_file | ".$path . "pnmscale -xysize $newWidth $newHeight | ".$path . "pnmtopng > $new_file" ;
}
else if (eregi(".(jpg|jpeg)", $source)){
$cmd = $path . "jpegtopnm $src_file | ".$path . "pnmscale -xysize $newWidth $newHeight | ".$path . "ppmtojpeg -quality=90 > $new_file" ;
}
else if (eregi(".gif", $source)){
$cmd = $path . "giftopnm $src_file | ".$path . "pnmscale -xysize $newWidth $newHeight | ppmquant 256 | ".$path . "ppmtogif > $new_file" ;
}
@exec($cmd, $output, $retval);
if (file_exists($new_file)){
return true;
}
}
$type = $imginfo[2];
$supported_types = array();
if (!extension_loaded('gd')) return false;
if (function_exists('imagegif')) $supported_types[] = 1;
if (function_exists('imagejpeg'))$supported_types[] = 2;
if (function_exists('imagepng')) $supported_types[] = 3;
$imageCreateFunction = (function_exists('imagecreatetruecolor'))? "imagecreatetruecolor" : "imagecreate";
if (in_array($type, $supported_types) )
{
switch ($type)
{
case 1 :
if (!function_exists('imagecreatefromgif')) return false;
$im = imagecreatefromgif($src_file);
$new_im = imagecreate($newWidth, $newHeight);
imagecopyresized($new_im, $im, 0, 0, 0, 0, $newWidth, $newHeight, $imginfo[0], $imginfo[1]);
imagegif($new_im, $new_file);
imagedestroy($im);
imagedestroy($new_im);
break;
case 2 :
$im = imagecreatefromjpeg($src_file);
$new_im = $imageCreateFunction($newWidth, $newHeight);
imagecopyresized($new_im, $im, 0, 0, 0, 0, $newWidth, $newHeight, $imginfo[0], $imginfo[1]);
imagejpeg($new_im, $new_file, 90);
imagedestroy($im);
imagedestroy($new_im);
break;
case 3 :
$im = imagecreatefrompng($src_file);
$new_im = $imageCreateFunction($newWidth, $newHeight);
imagecopyresized($new_im, $im, 0, 0, 0, 0, $newWidth, $newHeight, $imginfo[0], $imginfo[1]);
imagepng($new_im, $new_file);
imagedestroy($im);
imagedestroy($new_im);
break;
}
}
if (file_exists($new_file)) return true;
else return false;
}
function newbb_is_dir($dir){
$openBasedir = ini_get('open_basedir');
if (empty($openBasedir)) {
return @is_dir($dir);
}
return in_array($dir, explode(':', $openBasedir));
}
/*
* Sorry, we have to use the stupid solution unless there is an option in MyTextSanitizer:: htmlspecialchars();
*/
function newbb_htmlSpecialChars($text)
{
return preg_replace(array("/&/i", "/ /i"), array('&', ' '), htmlspecialchars($text));
}
function &newbb_displayTarea(&$text, $html = 0, $smiley = 1, $xcode = 1, $image = 1, $br = 1)
{
global $myts;
if ($html != 1) {
// html not allowed
$text = newbb_htmlSpecialChars($text);
}
$text = $myts->codePreConv($text, $xcode); // Ryuji_edit(2003-11-18)
$text = $myts->makeClickable($text);
if ($smiley != 0) {
// process smiley
$text = $myts->smiley($text);
}
if ($xcode != 0) {
// decode xcode
if ($image != 0) {
// image allowed
$text = $myts->xoopsCodeDecode($text);
} else {
// image not allowed
$text = $myts->xoopsCodeDecode($text, 0);
}
}
if ($br != 0) {
$text = $myts->nl2Br($text);
}
$text = $myts->codeConv($text, $xcode, $image); // Ryuji_edit(2003-11-18)
return $text;
}
/*
* Filter out possible malicious text
* kses project at SF could be a good solution to check
*
* package: Article
*
* @param string $text text to filter
* @param bool $force flag indicating to force filtering
* @return string filtered text
*/
function &newbb_textFilter($text, $force = false)
{
global $xoopsUser, $xoopsConfig;
if(empty($force) && is_object($xoopsUser) && $xoopsUser->isAdmin()){
return $text;
}
// For future applications
$tags=empty($xoopsConfig["filter_tags"])?array():explode(",", $xoopsConfig["filter_tags"]);
$tags = array_map("trim", $tags);
// Set embedded tags
$tags[] = "SCRIPT";
$tags[] = "VBSCRIPT";
$tags[] = "JAVASCRIPT";
foreach($tags as $tag){
$search[] = "/<".$tag."[^>]*?>.*?</".$tag.">/si";
$replace[] = " [!".strtoupper($tag)." FILTERED!] ";
}
// Set iframe tag
$search[]= "/<IFRAME[^>/]*SRC=(['"])?([^>/]*)(\1)[^>/]*?/>/si";
$replace[]=" [!IFRAME FILTERED!] \2 ";
$search[]= "/<IFRAME[^>]*?>([^<]*)</IFRAME>/si";
$replace[]=" [!IFRAME FILTERED!] \1 ";
// action
$text = preg_replace($search, $replace, $text);
return $text;
}
function newbb_html2text($document)
{
// PHP Manual:: function preg_replace
// $document should contain an HTML document.
// This will remove HTML tags, javascript sections
// and white space. It will also convert some
// common HTML entities to their text equivalent.
$search = array ("'<script[^>]*?>.*?</script>'si", // Strip out javascript
"'<[/!]*?[^<>]*?>'si", // Strip out HTML tags
"'([rn])[s]+'", // Strip out white space
"'&(quot|#34);'i", // Replace HTML entities
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i",
"'&(nbsp|#160);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i",
"'&#(d+);'e"); // evaluate as php
$replace = array ("",
"",
"\1",
""",
"&",
"<",
">",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
"chr(\1)");
$text = preg_replace($search, $replace, $document);
return $text;
}
/*
* Currently the newbb session/cookie handlers are limited to:
* -- one dimension
* -- "," and "|" are preserved
*
*/
function newbb_setsession($name, $string = '')
{
if(is_array($string)) {
$value = array();
foreach ($string as $key => $val){
$value[]=$key."|".$val;
}
$string = implode(",", $value);
}
$_SESSION['newbb_'.$name] = $string;
}
function newbb_getsession($name, $isArray = false)
{
$value = !empty($_SESSION['newbb_'.$name]) ? $_SESSION['newbb_'.$name] : false;
if($isArray) {
$_value = ($value)?explode(",", $value):array();
$value = array();
if(count($_value)>0) foreach($_value as $string){
$key = substr($string, 0, strpos($string,"|"));
$val = substr($string, (strpos($string,"|")+1));
$value[$key] = $val;
}
unset($_value);
}
return $value;
}
function newbb_setcookie($name, $string = '', $expire = 0)
{
global $forumCookie;
if(is_array($string)) {
$value = array();
foreach ($string as $key => $val){
$value[]=$key."|".$val;
}
$string = implode(",", $value);
}
setcookie($forumCookie['prefix'].$name, $string, intval($expire), $forumCookie['path'], $forumCookie['domain'], $forumCookie['secure']);
}
function newbb_getcookie($name, $isArray = false)
{
global $forumCookie;
$value = !empty($_COOKIE[$forumCookie['prefix'].$name]) ? $_COOKIE[$forumCookie['prefix'].$name] : null;
if($isArray) {
$_value = ($value)?explode(",", $value):array();
$value = array();
if(count($_value)>0) foreach($_value as $string){
$sep = strpos($string,"|");
if($sep===false){
$value[]=$string;
}else{
$key = substr($string, 0, $sep);
$val = substr($string, ($sep+1));
$value[$key] = $val;
}
//newbb_message($name.": ".$string."; sep:". $sep."; key:". $key."; val:". $val);
}
unset($_value);
}
return $value;
}
function newbb_checkTimelimit($action_last, $action_tag, $inMinute = true)
{
global $xoopsModuleConfig;
if(!isset($xoopsModuleConfig[$action_tag]) or $xoopsModuleConfig[$action_tag]==0) return true;
$timelimit = ($inMinute)?$xoopsModuleConfig[$action_tag]*60:$xoopsModuleConfig[$action_tag];
return ($action_last > time()-$timelimit)?true:false;
}
function &getModuleAdministrators($mid=0)
{
static $module_administrators=array();
if(isset($module_administrators[$mid])) return $module_administrators[$mid];
$moduleperm_handler =& xoops_gethandler('groupperm');
$groupsIds = $moduleperm_handler->getGroupIds('module_admin', $mid);
$administrators = array();
$member_handler =& xoops_gethandler('member');
foreach($groupsIds as $groupid){
$userIds = $member_handler->getUsersByGroup($groupid);
foreach($userIds as $userid){
$administrators[$userid] = 1;
}
}
$module_administrators[$mid] =array_keys($administrators);
unset($administrators);
return $module_administrators[$mid];
}
function newbb_isAdministrator($user=-1, $mid=0)
{
global $xoopsUser, $xoopsModule;
static $administrators, $newBB_mid;
if(is_numeric($user) && $user == -1) $user = &$xoopsUser;
if(!is_object($user) && intval($user)<1) return false;
$uid = (is_object($user))?$user->getVar('uid'):intval($user);
if(!$mid){
if (!isset($newBB_mid)) {
if(is_object($xoopsModule)&& 'newbb' == $xoopsModule->dirname()){
$newBB_mid = $xoopsModule->getVar('mid');
}else{
$modhandler = &xoops_gethandler('module');
$newBB = &$modhandler->getByDirname('newbb');
$newBB_mid = $newBB->getVar('mid');
unset($newBB);
}
}
$mid = $newBB_mid;
}
if(!isset($administrators)) {
$administrators =& getModuleAdministrators($mid);
}
return in_array($uid,$administrators);
}
function newbb_isAdmin($forum = 0, $user=-1)
{
global $xoopsUser;
static $_cachedModerators;
if(is_numeric($user) && $user == -1) $user = &$xoopsUser;
if(!is_object($user) && intval($user)<1) return false;
$uid = (is_object($user))?$user->getVar('uid'):intval($user);
if(newbb_isAdministrator($uid)) return true;
$cache_id = (is_object($forum))?$forum->getVar('forum_id'):intval($forum);
if(!isset($_cachedModerators[$cache_id])){
$forum_handler =& xoops_getmodulehandler('forum', 'newbb');
if(!is_object($forum)) $forum = $forum_handler->get(intval($forum));
$_cachedModerators[$cache_id] = $forum_handler->getModerators($forum);
}
return in_array($uid,$_cachedModerators[$cache_id]);
}
function newbb_isModerator($forum = 0, $user=-1)
{
global $xoopsUser;
static $_cachedModerators;
if(is_numeric($user) && $user == -1) $user =& $xoopsUser;
if(!is_object($user) && intval($user)<1) {
return false;
}
$uid = (is_object($user))?$user->getVar('uid'):intval($user);
$cache_id = (is_object($forum))?$forum->getVar('forum_id'):intval($forum);
if(!isset($_cachedModerators[$cache_id])){
$forum_handler =& xoops_getmodulehandler('forum', 'newbb');
if(!is_object($forum)) $forum = $forum_handler->get(intval($forum));
$_cachedModerators[$cache_id] = $forum_handler->getModerators($forum);
}
return in_array($uid,$_cachedModerators[$cache_id]);
}
function newbb_checkSubjectPrefixPermission($forum = 0, $user=-1)
{
global $xoopsUser, $xoopsModuleConfig;
if($xoopsModuleConfig['subject_prefix_level']<1){
return false;
}
if($xoopsModuleConfig['subject_prefix_level']==1){
return true;
}
if(is_numeric($user) && $user == -1) $user = &$xoopsUser;
if(!is_object($user) && intval($user)<1) return false;
$uid = (is_object($user))?$user->getVar('uid'):intval($user);
if($xoopsModuleConfig['subject_prefix_level']==2){
return true;
}
if($xoopsModuleConfig['subject_prefix_level']==3){
if(newbb_isAdmin($forum, $user)) return true;
else return false;
}
if($xoopsModuleConfig['subject_prefix_level']==4){
if(newbb_isAdministrator($user)) return true;
}
return false;
}
/*
* Gets the total number of topics in a form
*/
function get_total_topics($forum_id="")
{
global $xoopsDB;
if ( $forum_id ) {
$sql = "SELECT COUNT(*) AS total FROM ".$xoopsDB->prefix("bb_topics")." WHERE forum_id = $forum_id";
} else {
$sql = "SELECT COUNT(*) AS total FROM ".$xoopsDB->prefix("bb_topics");
}
if ( !$result = $xoopsDB->query($sql) ) {
return _MD_ERROR;
}
if ( !$myrow = $xoopsDB->fetchArray($result) ) {
return _MD_ERROR;
}
return $myrow['total'];
}
/*
* Returns the total number of posts in the whole system, a forum, or a topic
* Also can return the number of users on the system.
*/
function get_total_posts($id, $type)
{
global $xoopsDB;
switch ( $type ) {
case 'users':
$sql = "SELECT COUNT(*) AS total FROM ".$xoopsDB->prefix("users")." WHERE (uid > 0) AND ( level >0 )";
break;
case 'all':
$sql = "SELECT COUNT(*) AS total FROM ".$xoopsDB->prefix("bb_posts");
break;
case 'forum':
$sql = "SELECT COUNT(*) AS total FROM ".$xoopsDB->prefix("bb_posts")." WHERE forum_id = $id";
break;
case 'topic':
$sql = "SELECT COUNT(*) AS total FROM ".$xoopsDB->prefix("bb_posts")." WHERE topic_id = $id";
break;
// Old, we should never get this.
case 'user':
exit("Should be using the users.user_posts column for this.");
}
if ( !$result = $xoopsDB->query($sql) ) {
echo "<br />get_total_posts::error :$sql";
return false;
}
if ( !$myrow = $xoopsDB->fetchArray($result) ) {
return 0;
}
return $myrow['total'];
}
function get_total_views()
{
global $xoopsDB;
$total="";
$sql = "SELECT sum(topic_views) FROM ".$xoopsDB->prefix("bb_topics")."";
if ( !$result = $xoopsDB->query($sql) ) {
return _MD_ERROR;
}
list ($total) = $xoopsDB->fetchRow($result);
return $total;
}
function newbb_make_jumpbox()
{
$box = '<form name="forum_jumpbox" method="get" action="viewforum.php" onsubmit="javascript: if(document.forum_jumpbox.forum.value < 1){return false;}">';
$box .= '<select class="select" name="forum" onchange="javascript: if(this.options[this.selectedIndex].value >0 ){ document.forms.forum_jumpbox.submit();}">';
$box .='<option value="-1">-- '._MD_SELFORUM.' --</option>';
$category_handler =& xoops_getmodulehandler('category', 'newbb');
$categories = $category_handler->getAllCats('access', true);
$forums = $category_handler->getForums(0, 'access', false);
if(count($categories)>0 && count($forums)>0){
foreach(array_keys($forums) as $key){
$box .= "
<option value='-1'> </option>
<option value='-1'>".$categories[$key]->getVar('cat_title')."</option>";
foreach ($forums[$key] as $f=>$forum) {
$box .= "<option value='".$f."'>-- ".$forum['title']."</option>";
if( !isset($forum["sub"]) || count($forum["sub"]) ==0 ) continue;
foreach (array_keys($forum["sub"]) as $s) {
$box .= "<option value='".$s."'>---- ".$forum["sub"][$s]['title']."</option>";
}
}
}
} else {
$box .= "<option value='-1'>"._MD_NOFORUMINDB."</option>";
}
$box .= "</select> <input type='submit' class='button' value='"._GO."' /></form>";
unset($forums, $categories);
return $box;
}
/* TODO: implemented in corresponding class: forum, topic */
function sync($id=0, $type='all forums')
{
global $xoopsDB;
$id = intval($id);
switch ( $type ) {
case 'forum':
if(empty($id)){
return sync(0, 'all forums');
}
$sql = "SELECT MAX(post_id) AS last_post FROM " . $xoopsDB->prefix("bb_posts") . " AS p LEFT JOIN " . $xoopsDB->prefix("bb_topics") . " AS t ON p.topic_id=t.topic_id WHERE p.approved=1 AND t.approved=1 AND p.forum_id = $id";
if ( !$result = $xoopsDB->query($sql) ) {
exit("Could not get post ID");
}
if ( $row = $xoopsDB->fetchArray($result) ) {
$last_post = $row['last_post'];
}
$sql = "SELECT COUNT(*) AS total FROM " . $xoopsDB->prefix("bb_posts") . " AS p LEFT JOIN " . $xoopsDB->prefix("bb_topics") . " AS t ON p.topic_id=t.topic_id WHERE p.approved=1 AND t.approved=1 AND p.forum_id = $id";
if ( !$result = $xoopsDB->query($sql) ) {
newbb_message("Could not get post count");
return false;
}
if ( $row = $xoopsDB->fetchArray($result) ) {
$total_posts = $row['total'];
}
$sql = "SELECT COUNT(*) AS total FROM ".$xoopsDB->prefix("bb_topics")." WHERE approved=1 AND forum_id = $id";
if ( !$result = $xoopsDB->query($sql) ) {
newbb_message("Could not get topic count");
return false;
}
if ( $row = $xoopsDB->fetchArray($result) ) {
$total_topics = $row['total'];
}
$sql = sprintf("UPDATE %s SET forum_last_post_id = %u, forum_posts = %u, forum_topics = %u WHERE forum_id = %u", $xoopsDB->prefix("bb_forums"), $last_post, $total_posts, $total_topics, $id);
if ( !$result = $xoopsDB->queryF($sql) ) {
newbb_message("Could not update forum $id");
return false;
}
break;
case 'topic':
if(empty($id)){
return sync(0, 'all topics');
}
$sql = "SELECT max(post_id) AS last_post FROM ".$xoopsDB->prefix("bb_posts")." WHERE approved=1 AND topic_id = $id";
if ( !$result = $xoopsDB->query($sql) ) {
newbb_message("Could not get post ID");
return false;
}
if ( $row = $xoopsDB->fetchArray($result) ) {
$last_post = $row['last_post'];
}
if ( $last_post > 0 ) {
$sql = "SELECT COUNT(*) AS total FROM ".$xoopsDB->prefix("bb_posts")." WHERE approved=1 AND topic_id = $id";
if ( !$result = $xoopsDB->query($sql) ) {
newbb_message("Could not get post count");
return false;
}
if ( $row = $xoopsDB->fetchArray($result) ) {
$total_posts = $row['total'];
}
$total_posts -= 1;
$sql = sprintf("UPDATE %s SET topic_replies = %u, topic_last_post_id = %u WHERE topic_id = %u", $xoopsDB->prefix("bb_topics"), $total_posts, $last_post, $id);
if ( !$result = $xoopsDB->queryF($sql) ) {
newbb_message("Could not update topic $id");
return false;
}
}
$sql = "SELECT MIN(post_id) AS top_post, COUNT(*) AS count FROM ".$xoopsDB->prefix("bb_posts")." WHERE topic_id = $id AND pid = 0";
if ( $result = $xoopsDB->query($sql) ) {
list($top_post, $top_count) = $xoopsDB->fetchRow($result);
if($top_count <= 1) break;
$sql = "UPDATE ".$xoopsDB->prefix("bb_posts").
" SET pid = ".$top_post.
" WHERE".
" topic_id = ".$id.
" AND post_id <> ".$top_post.
" AND pid = 0";
if ( !$result = $xoopsDB->queryF($sql) ) {
newbb_message("Could not correct duplicated top posts for topic $id: ".$top_count);
return false;
}
}
break;
case 'all forums':
$sql = "SELECT forum_id FROM ".$xoopsDB->prefix("bb_forums");
if ( !$result = $xoopsDB->query($sql) ) {
exit("Could not get forum IDs");
}
while ( $row = $xoopsDB->fetchArray($result) ) {
$id = $row['forum_id'];
sync($id, "forum");
}
break;
case 'all topics':
$sql = "SELECT topic_id FROM ".$xoopsDB->prefix("bb_topics")." WHERE approved=1";
if ( !$result = $xoopsDB->query($sql) ) {
exit("Could not get topic ID's");
}
while ( $row = $xoopsDB->fetchArray($result) ) {
$id = $row['topic_id'];
sync($id, "topic");
}
break;
}
return true;
}
function getLinkUsernameFromUid($userid = 0, $name= 0)
{
if (!is_numeric($userid)) {
return $userid;
}
$userid = intval($userid);
if ($userid > 0) {
$member_handler =& xoops_gethandler('member');
$user =& $member_handler->getUser($userid);
if (is_object($user)) {
$ts =& MyTextSanitizer::getInstance();
$username = $user->getVar('uname');
$usernameu = $user->getVar('name');
if ( ($name) && !empty($usernameu)) {
$username = $user->getVar('name');
}
if ( !empty($usernameu)) {
$linkeduser = "<a href='".XOOPS_URL."/userinfo.php?uid=".$userid."'>". $ts->htmlSpecialChars($username) ."</a>";
}
else {
$linkeduser = "<a href='".XOOPS_URL."/userinfo.php?uid=".$userid."'>". ucwords($ts->htmlSpecialChars($username)) ."</a>";
}
return $linkeduser;
}
}
return $GLOBALS['xoopsConfig']['anonymous'];
}
function get_user_level($user)
{
$RPG = $user->getVar('posts');
$RPGDIFF = $user->getVar('user_regdate');
$today = time();
$diff = $today - $RPGDIFF;
$exp = round($diff / 86400,0);
if ($exp<=0) { $exp = 1; }
$ppd= round($RPG / $exp, 0);
$level = pow (log10 ($RPG), 3);
$ep = floor (100 * ($level - floor ($level)));
$showlevel = floor ($level + 1);
$hpmulti =round ($ppd / 6, 1);
if ($hpmulti > 1.5) { $hpmulti = 1.5; }
if ($hpmulti < 1) { $hpmulti = 1; }
$maxhp = $level * 25 * $hpmulti;
$hp= $ppd / 5;
if ($hp >= 1) {
$hp= $maxhp;
} else {
$hp= floor ($hp * $maxhp);
}
$hp= floor ($hp);
$maxhp= floor ($maxhp);
if ($maxhp <= 0) {
$zhp = 1;
} else {
$zhp = $maxhp;
}
$hpf= floor (100 * ($hp / $zhp)) - 1;
$maxmp= ($exp * $level) / 5;
$mp= $RPG / 3;
if ($mp >= $maxmp) { $mp = $maxmp; }
$maxmp = floor ($maxmp);
$mp = floor ($mp);
if ($maxmp <= 0) {
$zmp = 1;
} else {
$zmp = $maxmp;
}
$mpf= floor (100 * ($mp / $zmp)) - 1;
if ( $hpf >= 98 ) { $hpf = $hpf - 2; }
if ( $ep >= 98 ) { $ep = $ep - 2; }
if ( $mpf >= 98 ) { $mpf = $mpf - 2; }
$level = array();
$level['level'] = $showlevel ;
$level['exp'] = $ep;
$level['exp_width'] = $ep.'%';
$level['hp'] = $hp;
$level['hp_max'] = $maxhp;
$level['hp_width'] = $hpf.'%';
$level['mp'] = $mp;
$level['mp_max'] = $maxmp;
$level['mp_width'] = $mpf.'%';
return $level;
}
function &newbb_admin_getPathStatus($path)
{
if(empty($path)) return false;
if(@is_writable($path)){
$path_status = _AM_NEWBB_AVAILABLE;
}elseif(!@is_dir($path)){
$path_status = _AM_NEWBB_NOTAVAILABLE." <a href=index.php?op=createdir&path=$path>"._AM_NEWBB_CREATETHEDIR.'</a>';
}else{
$path_status = _AM_NEWBB_NOTWRITABLE." <a href=index.php?op=setperm&path=$path>"._AM_NEWBB_SETMPERM.'</a>';
}
return $path_status;
}
function newbb_admin_mkdir($target, $mode=0777)
{
// http://www.php.net/manual/en/function.mkdir.php
return is_dir($target) or ( newbb_admin_mkdir(dirname($target), $mode) and mkdir($target, $mode) );
/*
// saint at corenova.com
// bart at cdasites dot com
if (is_dir($target)||empty($target)) return true; // best case check first
if (file_exists($target) && !is_dir($target)) return false;
if (newbb_admin_mkdir(substr($target,0,strrpos($target,'/')), $mode)){
if (!file_exists($target)) return mkdir($target, $mode); // crawl back up & create dir tree
}
return false;
*/
}
function newbb_admin_chmod($target, $mode = 0777)
{
return @chmod($target, $mode);
}
function pollview($poll_id)
{
global $xoopsTpl;
$poll = new XoopsPoll($poll_id);
$renderer = new XoopsPollRenderer($poll);
$renderer->assignForm($xoopsTpl);
$xoopsTpl->assign('lang_vote' , _PL_VOTE);
$xoopsTpl->assign('lang_results' , _PL_RESULTS);
}
function pollresults($poll_id)
{
global $xoopsTpl;
$poll = new XoopsPoll($poll_id);
$renderer = new XoopsPollRenderer($poll);
$renderer->assignResults($xoopsTpl);
}
function newbb_isIE5()
{
static $user_agent_is_IE5;
if(isset($user_agent_is_IE5)) return $user_agent_is_IE5;;
$msie='/msies(5.[5-9]|[6-9].[0-9]*).*(win)/i';
if( !isset($_SERVER['HTTP_USER_AGENT']) ||
!preg_match($msie,$_SERVER['HTTP_USER_AGENT']) ||
preg_match('/opera/i',$_SERVER['HTTP_USER_AGENT'])){
$user_agent_is_IE5 = false;
}else{
$user_agent_is_IE5 = true;
}
return $user_agent_is_IE5;
}
function newbb_displayImage($image, $alt = "", $width = 0, $height =0, $style ="margin: 0px;", $sizeMeth='scale')
{
global $xoopsModuleConfig, $forumImage;
static $image_type;
$user_agent_is_IE5 = newbb_isIE5();
if(!isset($image_type)) $image_type = ($xoopsModuleConfig['image_type'] == 'auto')?(($user_agent_is_IE5)?'gif':'png'):$xoopsModuleConfig['image_type'];
$image .= '.'.$image_type;
$imageuri=preg_replace("/^".preg_quote(XOOPS_URL,"/")."/",XOOPS_ROOT_PATH,$image);
if(!preg_match("/^".preg_quote(XOOPS_ROOT_PATH,"/")."/",$imageuri)){
$imageuri = XOOPS_ROOT_PATH."/".$image;
}
if(file_exists($imageuri)){
$size=@getimagesize($imageuri);
if(is_array($size)){
$width=$size[0];
$height=$size[1];
}
}else{
$image=$forumImage['blank'].'.gif';
}
$width .='px';
$height .='px';
$img_style = "width: $width; height:$height; $style";
$image_url = "<img src="".$image."" style="".$img_style."" alt="".$alt."" align="middle" />";
return $image_url;
}
/**
* newbb_updaterating()
*
* @param $sel_id
* @return updates rating data in itemtable for a given item
**/
function newbb_updaterating($sel_id)
{
global $xoopsDB;
$query = "select rating FROM " . $xoopsDB -> prefix('bb_votedata') . " WHERE topic_id = " . $sel_id . "";
$voteresult = $xoopsDB -> query($query);
$votesDB = $xoopsDB -> getRowsNum($voteresult);
$totalrating = 0;
while (list($rating) = $xoopsDB -> fetchRow($voteresult))
{
$totalrating += $rating;
}
$finalrating = $totalrating / $votesDB;
$finalrating = number_format($finalrating, 4);
$sql = sprintf("UPDATE %s SET rating = %u, votes = %u WHERE topic_id = %u", $xoopsDB -> prefix('bb_topics'), $finalrating, $votesDB, $sel_id);
$xoopsDB -> queryF($sql);
}
function newbb_getImageLibs()
{
global $xoopsModuleConfig;
$imageLibs= array();
unset($output, $status);
if ( $xoopsModuleConfig['image_lib'] == 1 or $xoopsModuleConfig['image_lib'] == 0 ){
$path = empty($xoopsModuleConfig['path_magick'])?"":$xoopsModuleConfig['path_magick']."/";
@exec($path.'convert -version', $output, $status);
if(empty($status)&&!empty($output)){
if(preg_match("/imagemagick[ t]+([0-9.]+)/i",$output[0],$matches))
$imageLibs['imagemagick'] = $matches[0];
}
unset($output, $status);
}
if ( $xoopsModuleConfig['image_lib'] == 2 or $xoopsModuleConfig['image_lib'] == 0 ){
$path = empty($xoopsModuleConfig['path_netpbm'])?"":$xoopsModuleConfig['path_netpbm']."/";
@exec($path.'jpegtopnm -version 2>&1', $output, $status);
if(empty($status)&&!empty($output)){
if(preg_match("/netpbm[ t]+([0-9.]+)/i",$output[0],$matches))
$imageLibs['netpbm'] = $matches[0];
}
unset($output, $status);
}
$GDfuncList = get_extension_funcs('gd');
ob_start();
@phpinfo(INFO_MODULES);
$output=ob_get_contents();
ob_end_clean();
$matches[1]='';
if(preg_match("/GD Version[ t]*(<[^>]+>[ t]*)+([^<>]+)/s",$output,$matches)){
$gdversion = $matches[2];
}
if( $GDfuncList ){
if( in_array('imagegd2',$GDfuncList) )
$imageLibs['gd2'] = $gdversion;
else
$imageLibs['gd1'] = $gdversion;
}
return $imageLibs;
}
function newbb_sinceSelectBox($selected = 100)
{
global $xoopsModuleConfig;
$select_array = explode(',',$xoopsModuleConfig['since_options']);
$select_array = array_map('trim',$select_array);
$forum_selection_since = '<select name="since">';
foreach ($select_array as $since) {
$forum_selection_since .= '<option value="'.$since.'"'.(($selected == $since) ? ' selected="selected"' : '').'>';
if($since>0){
$forum_selection_since .= sprintf(_MD_FROMLASTDAYS, $since);
}else{
$forum_selection_since .= sprintf(_MD_FROMLASTHOURS, abs($since));
}
$forum_selection_since .= '</option>';
}
$forum_selection_since .= '<option value="365"'.(($selected == 365) ? ' selected="selected"' : '').'>'._MD_THELASTYEAR.'</option>';
$forum_selection_since .= '<option value="0"'.(($selected == 0) ? ' selected="selected"' : '').'>'._MD_BEGINNING.'</option>';
$forum_selection_since .= '</select>';
return $forum_selection_since;
}
function newbb_getSinceTime($since = 100)
{
if($since==1000) return 0;
if($since>0) return intval($since) * 24 * 3600;
else return intval(abs($since)) * 3600;
}
function newbb_welcome( $user = -1 )
{
global $xoopsModule, $xoopsModuleConfig, $xoopsUser, $xoopsConfig, $myts;
if(empty($xoopsModuleConfig["welcome_forum"])) return null;
if(is_numeric($user) && $user == -1) $user = &$xoopsUser;
if(!is_object($user)
|| $user->getVar('posts')
) return null;
$forum_handler =& xoops_getmodulehandler('forum', 'newbb');
$forum =& $forum_handler->get($xoopsModuleConfig["welcome_forum"]);
if (!$forum_handler->getPermission($forum)){
unset($forum);
return null;
}
unset($forum);
$post_handler =& xoops_getmodulehandler('post', 'newbb');
$forumpost =& $post_handler->create();
$forumpost->setVar('poster_ip', newbb_getIP());
$forumpost->setVar('uid', $user->getVar("uid"));
$forumpost->setVar('approved', 1);
$forumpost->setVar('forum_id', $xoopsModuleConfig["welcome_forum"]);
$subject = sprintf(_MD_WELCOME_SUBJECT, $user->getVar('uname'));
$forumpost->setVar('subject', $subject);
$forumpost->setVar('dohtml', 1);
$forumpost->setVar('dosmiley', 1);
$forumpost->setVar('doxcode', 0);
$forumpost->setVar('dobr', 1);
$forumpost->setVar('icon', "");
$forumpost->setVar('attachsig', 1);
$gperm_handler = & xoops_gethandler( 'groupperm' );
$groups = array(XOOPS_GROUP_ANONYMOUS, XOOPS_GROUP_USERS);
$module_handler = &xoops_gethandler('module');
$mod = $module_handler->getByDirname('profile');
if(!defined("_PROFILE_MA_ALLABOUT")) {
$mod->loadLanguage();
}
$groupperm_handler =& xoops_gethandler('groupperm');
$show_ids =& $groupperm_handler->getItemIds('profile_show', $groups, $mod->getVar('mid'));
$visible_ids =& $groupperm_handler->getItemIds('profile_visible', $groups, $mod->getVar('mid'));
unset($mod);
$fieldids = array_intersect($show_ids, $visible_ids);
$profile_handler =& xoops_gethandler('profile');
$fields =& $profile_handler->loadFields();
$cat_handler =& xoops_getmodulehandler('category', 'profile');
$categories =& $cat_handler->getObjects(null, true, false);
$fieldcat_handler =& xoops_getmodulehandler('fieldcategory', 'profile');
$fieldcats =& $fieldcat_handler->getObjects(null, true, false);
// Add core fields
$categories[0]['cat_title'] = sprintf(_PROFILE_MA_ALLABOUT, $user->getVar('uname'));
$avatar = trim($user->getVar('user_avatar'));
if(!empty($avatar) && $avatar !="blank.gif"){
$categories[0]['fields'][] = array('title' => _PROFILE_MA_AVATAR, 'value' => "<img src='".XOOPS_UPLOAD_URL."/".$user->getVar('user_avatar')."' alt='".$user->getVar('uname')."' />");
$weights[0][] = 0;
}
if ($user->getVar('user_viewemail') == 1) {
$email = $user->getVar('email', 'E');
$categories[0]['fields'][] = array('title' => _PROFILE_MA_EMAIL, 'value' => $email);
$weights[0][] = 0;
}
// Add dynamic fields
foreach (array_keys($fields) as $i) {
if (in_array($fields[$i]->getVar('fieldid'), $fieldids)) {
$catid = isset($fieldcats[$fields[$i]->getVar('fieldid')]) ? $fieldcats[$fields[$i]->getVar('fieldid')]['catid'] : 0;
$value = $fields[$i]->getOutputValue($user);
if (is_array($value)) {
$value = implode('<br />', array_values($value));
}
if(empty($value)) continue;
$categories[$catid]['fields'][] = array('title' => $fields[$i]->getVar('field_title'), 'value' => $value);
$weights[$catid][] = isset($fieldcats[$fields[$i]->getVar('fieldid')]) ? intval($fieldcats[$fields[$i]->getVar('fieldid')]['field_weight']) : 1;
}
}
foreach (array_keys($categories) as $i) {
if (isset($categories[$i]['fields'])) {
array_multisort($weights[$i], SORT_ASC, array_keys($categories[$i]['fields']), SORT_ASC, $categories[$i]['fields']);
}
}
ksort($categories);
$message = sprintf(_MD_WELCOME_MESSAGE, $user->getVar('uname'))."nn";
$message .= _PROFILE.": <a href='".XOOPS_URL . "/userinfo.php?uid=" . $user->getVar('uid')."'><strong>".$user->getVar('uname')."</strong></a> ";
$message .= " | <a href='".XOOPS_URL . "/pmlite.php?send2=1&to_userid=" . $user->getVar('uid')."'>"._MD_PM."</a>n";
foreach($categories as $category){
if(isset($category["fields"])){
$message .= "nn".$category["cat_title"].":nn";
foreach($category["fields"] as $field){
if(empty($field["value"])) continue;
$message .=$field["title"].": ".$field["value"]."n";
}
}
}
$forumpost->setVar('post_text', $message);
$postid = $post_handler->insert($forumpost);
if(!empty($xoopsModuleConfig['notification_enabled'])){
$tags = array();
$tags['THREAD_NAME'] = $subject;
$tags['THREAD_URL'] = XOOPS_URL . '/modules/' . $xoopsModule->dirname() . '/viewtopic.php?post_id='.$postid.'&topic_id=' . $forumpost->getVar('topic_id').'&forum=' . $xoopsModuleConfig["welcome_forum"];
$tags['POST_URL'] = $tags['THREAD_URL'] . '#forumpost' . $postid;
include_once 'include/notification.inc.php';
$forum_info = newbb_notify_iteminfo ('forum', $xoopsModuleConfig["welcome_forum"]);
$tags['FORUM_NAME'] = $forum_info['name'];
$tags['FORUM_URL'] = $forum_info['url'];
$notification_handler =& xoops_gethandler('notification');
$notification_handler->triggerEvent('forum', $xoopsModuleConfig["welcome_forum"], 'new_thread', $tags);
$notification_handler->triggerEvent('global', 0, 'new_post', $tags);
$notification_handler->triggerEvent('forum', $xoopsModuleConfig["welcome_forum"], 'new_post', $tags);
$tags['POST_CONTENT'] = $myts->stripSlashesGPC($message);
$tags['POST_NAME'] = $myts->stripSlashesGPC($subject);
$notification_handler->triggerEvent('global', 0, 'new_fullpost', $tags);
}
return $postid;
}
function newbb_formatTimestamp($time, $format="", $timeoffset="")
{
$format = strtolower($format);
if($format=="reg"||$format=="") {
$format = "c";
}
if($format=="rss"){
$format = "D, j M Y H:i:s O";
}
return formatTimestamp($time, $format, $timeoffset);
global $xoopsConfig;
$format = strtolower($format);
$newbb_formats = array("rss", "reg");
if(!defined("_MD_MONTHDAY")) include_once(XOOPS_ROOT_PATH."/modules/newbb/language/".$xoopsConfig["language"]."/main.php");
if(!empty($format) && !in_array($format,$newbb_formats)) return formatTimestamp($time, $format, $timeoffset);
$usertimestamp = xoops_getUserTimestamp($time);
$usernow = xoops_getUserTimestamp(time(), $timeoffset);
$today= mktime(0,0,0,date("m", $usernow),date("d", $usernow),date("Y", $usernow));
$thisyear= mktime(0,0,0,1,1,date("Y", $usernow));
$time_diff = ($today - $usertimestamp)/(24*60*60); // days
if($time_diff<0){
$time_string = formatTimestamp($time, _MD_TODAY);
}elseif($time_diff<1){
$time_string = formatTimestamp($time, _MD_YESTERDAY);
}elseif($usertimestamp>$thisyear){
$time_string = formatTimestamp($time, _MD_MONTHDAY);
}else{
$time_string = formatTimestamp($time, _MD_YEARMONTHDAY);
}
return $time_string;
}
endif;
?>