$val) { $return[$key] = StripSlashesArray($val); } return ($return); } else { return (stripslashes($data)); } } // ############################# ADDSLASHES ARRAY ############################## // the subdreamer core will addslashes to all $_POST, $_GET, and $_COOKIE data // in the admin panel. This isn't done in the frontend becuase subdreamer converts // quotes to their html entities. function AddSlashesArray($data) { if(is_array($data)) { foreach($data as $key => $val) { $return[$key] = AddSlashesArray($val); } return ($return); } else { return (addslashes($data)); } } // ############################ UNHTMLSPECIALCHARS ############################# // this is exactly like PHP's html_entity_decode // however html_entity_decode only works on PHP > 4.3.0 or 5 function unhtmlspecialchars($string) { // special character handling // utf8_decode and reconvert HTML entities (e.g. ü ==> ü) $trans = get_html_translation_table(HTML_ENTITIES); // some versions of PHP match single quotes to ' $trans["'"] = '''; // there are some forums like vBulletin that do not store entities, but // instead they store the special chars themselves. So when adding articles // to the forum we need to use unhtmlspecialchars (tinymce automatically converts & for good reasons // like not breaking the texarea), however this proves to be a problem because there // are certain characters that do not go through unhtmlspecialchars. So, // lets try and list the most popular ones here: $trans["“"] = '“'; $trans["”"] = '”'; $trans["‘"] = '‘'; $trans["’"] = '’'; $trans["«"] = '«'; $trans["»"] = '»'; $trans["©"] = '©'; $trans["®"] = '®'; $trans["™"] = '™'; $trans = array_flip ($trans); return strtr($string, $trans); } // ############################### GET USER INFO ############################### function GetUserInfo($user) { global $DB, $usersystem; // load guest usergroup at the end of this function unless this var turns true $userinfocreated = false; // usergroupids that were filled in the usersystem file, needs to be an array $usergroupids = is_array($user['usergroupids']) ? $user['usergroupids'] : array($user['usergroupids']); // if integrating with a forum, then the usergroupids in $user are from a forum database and not subdreamer $usergroupidcolumn = $usersystem['name'] == 'Subdreamer' ? 'usergroupid' : 'forumusergroupid'; // start building empty array $userinfo = array(); $userinfo['usergroupids'] = array(); $userinfo['userid'] = $user['userid']; $userinfo['username'] = $user['username']; $userinfo['email'] = $user['email']; $userinfo['loggedin'] = $user['loggedin']; $userinfo['sessionurl'] = $user['sessionurl']; $userinfo['adminaccess'] = 0; $userinfo['commentaccess'] = 0; $userinfo['offlinecategoryaccess'] = 0; $userinfo['categoryviewids'] = array(); $userinfo['categorymenuids'] = array(); $userinfo['pluginviewids'] = array(); $userinfo['pluginsubmitids'] = array(); $userinfo['plugindownloadids'] = array(); $userinfo['plugincommentids'] = array(); $userinfo['pluginadminids'] = array(); $userinfo['custompluginviewids'] = array(); $userinfo['custompluginadminids'] = array(); for($i = 0; $i < count($usergroupids); $i++) { if($usergroupids[$i] != 0 AND $usergroup = $DB->query_first("SELECT * FROM " . TABLE_PREFIX . "usergroups WHERE " . $usergroupidcolumn . " = " . $usergroupids[$i])) { $userinfocreated = true; $userinfo['usergroupids'][] = $usergroup['usergroupid']; // overide only if new setting is 1, otherwise revert back to previous loop value or default setting of 0 $userinfo['adminaccess'] = $usergroup['adminaccess'] ? $usergroup['adminaccess'] : $userinfo['adminaccess']; $userinfo['commentaccess'] = $usergroup['commentaccess'] ? $usergroup['commentaccess'] : $userinfo['commentaccess']; $userinfo['offlinecategoryaccess'] = $usergroup['offlinecategoryaccess'] ? $usergroup['offlinecategoryaccess'] : $userinfo['offlinecategoryaccess']; // the following are arrays, so add arrays together for multiple usergroup support $userinfo['categoryviewids'] = $usergroup['categoryviewids'] ? array_unique(array_merge($userinfo['categoryviewids'], explode(',', $usergroup['categoryviewids']))) : $userinfo['categoryviewids']; $userinfo['categorymenuids'] = $usergroup['categorymenuids'] ? array_unique(array_merge($userinfo['categorymenuids'], explode(',', $usergroup['categorymenuids']))) : $userinfo['categorymenuids']; $userinfo['pluginviewids'] = $usergroup['pluginviewids'] ? array_unique(array_merge($userinfo['pluginviewids'], explode(',', $usergroup['pluginviewids']))) : $userinfo['pluginviewids']; $userinfo['pluginsubmitids'] = $usergroup['pluginsubmitids'] ? array_unique(array_merge($userinfo['pluginsubmitids'], explode(',', $usergroup['pluginsubmitids']))) : $userinfo['pluginsubmitids']; $userinfo['plugindownloadids'] = $usergroup['plugindownloadids'] ? array_unique(array_merge($userinfo['plugindownloadids'], explode(',', $usergroup['plugindownloadids']))) : $userinfo['plugindownloadids']; $userinfo['plugincommentids'] = $usergroup['plugincommentids'] ? array_unique(array_merge($userinfo['plugincommentids'], explode(',', $usergroup['plugincommentids']))) : $userinfo['plugincommentids']; $userinfo['pluginadminids'] = $usergroup['pluginadminids'] ? array_unique(array_merge($userinfo['pluginadminids'], explode(',', $usergroup['pluginadminids']))) : $userinfo['pluginadminids']; $userinfo['custompluginviewids'] = $usergroup['custompluginviewids'] ? array_unique(array_merge($userinfo['custompluginviewids'], explode(',', $usergroup['custompluginviewids']))) : $userinfo['custompluginviewids']; $userinfo['custompluginadminids'] = $usergroup['custompluginadminids'] ? array_unique(array_merge($userinfo['custompluginadminids'], explode(',', $usergroup['custompluginadminids']))) : $userinfo['custompluginadminids']; } } // if a usergroup hasn't been created (most likely because an admin hasn't associated a forum usergroup to the subdreamer usergroup), then load a guest usergroup: if(!$userinfocreated) { $usergroup = $DB->query_first("SELECT * FROM " . TABLE_PREFIX . "usergroups WHERE usergroupid = 4"); $userinfo['usergroupids'][] = $usergroup['usergroupid']; // overide only if new setting is 1, otherwise revert back to previous loop value or default setting of 0 $userinfo['adminaccess'] = $usergroup['adminaccess'] ? $usergroup['adminaccess'] : $userinfo['adminaccess']; $userinfo['commentaccess'] = $usergroup['commentaccess'] ? $usergroup['commentaccess'] : $userinfo['commentaccess']; $userinfo['offlinecategoryaccess'] = $usergroup['offlinecategoryaccess'] ? $usergroup['offlinecategoryaccess'] : $userinfo['offlinecategoryaccess']; // the following are arrays, so add arrays together for multiple usergroup support $userinfo['categoryviewids'] = $usergroup['categoryviewids'] ? array_unique(array_merge($userinfo['categoryviewids'], explode(',', $usergroup['categoryviewids']))) : $userinfo['categoryviewids']; $userinfo['categorymenuids'] = $usergroup['categorymenuids'] ? array_unique(array_merge($userinfo['categorymenuids'], explode(',', $usergroup['categorymenuids']))) : $userinfo['categorymenuids']; $userinfo['pluginviewids'] = $usergroup['pluginviewids'] ? array_unique(array_merge($userinfo['pluginviewids'], explode(',', $usergroup['pluginviewids']))) : $userinfo['pluginviewids']; $userinfo['pluginsubmitids'] = $usergroup['pluginsubmitids'] ? array_unique(array_merge($userinfo['pluginsubmitids'], explode(',', $usergroup['pluginsubmitids']))) : $userinfo['pluginsubmitids']; $userinfo['plugindownloadids'] = $usergroup['plugindownloadids'] ? array_unique(array_merge($userinfo['plugindownloadids'], explode(',', $usergroup['plugindownloadids']))) : $userinfo['plugindownloadids']; $userinfo['plugincommentids'] = $usergroup['plugincommentids'] ? array_unique(array_merge($userinfo['plugincommentids'], explode(',', $usergroup['plugincommentids']))) : $userinfo['plugincommentids']; $userinfo['pluginadminids'] = $usergroup['pluginadminids'] ? array_unique(array_merge($userinfo['pluginadminids'], explode(',', $usergroup['pluginadminids']))) : $userinfo['pluginadminids']; $userinfo['custompluginviewids'] = $usergroup['custompluginviewids'] ? array_unique(array_merge($userinfo['custompluginviewids'], explode(',', $usergroup['custompluginviewids']))) : $userinfo['custompluginviewids']; $userinfo['custompluginadminids'] = $usergroup['custompluginadminids'] ? array_unique(array_merge($userinfo['custompluginadminids'], explode(',', $usergroup['custompluginadminids']))) : $userinfo['custompluginadminids']; } return $userinfo; } // ############################### DISPLAY DATE ################################ function DisplayDate($gmepoch, $dateformat = '') { global $sdlanguage; // check if user has format, timezone, and dst set // if not then use the settings from the subdreamer admin panel // for now subdreamer doesn't check user info, so lets just grab the admin settings if(defined('IN_ADMIN')) { global $DB; if(!strlen($dateformat)) { $getdateformat = $DB->query_first("SELECT value FROM " . TABLE_PREFIX . "mainsettings WHERE varname = 'dateformat'"); $dateformat = $getdateformat['value']; } $gettimezoneoffset = $DB->query_first("SELECT value FROM " . TABLE_PREFIX . "mainsettings WHERE varname = 'timezoneoffset'"); $getdaylightsavings = $DB->query_first("SELECT value FROM " . TABLE_PREFIX . "mainsettings WHERE varname = 'daylightsavings'"); $timezoneoffset = $gettimezoneoffset['value']; $daylightsavings = $getdaylightsavings['value']; } else { global $mainsettings; if(!strlen($dateformat)) { $dateformat = $mainsettings['dateformat']; } $timezoneoffset = $mainsettings['timezoneoffset']; $daylightsavings = $mainsettings['daylightsavings']; } // automatic detection (not yet built in) // $dst = date('I', $gmepoch) * 3600; if($daylightsavings == 1) { $dst = $daylightsavings == 1 ? 3600 : 0; } // return a date if a date exists return $gmepoch ? strtr(@gmdate($dateformat, $gmepoch + (3600 * $timezoneoffset + $dst)), $sdlanguage) : ''; } // ########################## DISPLAY READABLE FILESIZE ############################ function DisplayReadableFilesize($filesize) { global $language; $kb = 1024; // Kilobyte $mb = 1048576; // Megabyte if($filesize < $kb) { $size = $filesize . ' B'; } else if($filesize < $mb) { $size = round($filesize/$kb,2) . ' KB'; } else { $size = round($filesize/$mb,2) . ' MB'; } return (isset($size) AND $size != ' B') ? $size : ''; } // #################################### IIF #################################### function iif($expression, $returntrue, $returnfalse = '') { if($expression == 0) { return $returnfalse; } else { return $returntrue; } } // ############################### GET LANGUAGE ################################ function GetLanguage($pluginid) { global $DB; $getlanguage = $DB->query("SELECT * FROM " . TABLE_PREFIX . "phrases WHERE pluginid = '$pluginid'"); while($languagearray = $DB->fetch_array($getlanguage)) { // start building the font tags $fontstart = ''; // don't add a style if there isn't any // this is to prevent conflict with existing css if($fontstart == '') { $fontstart = ''; $fontend = ''; } if($languagearray['customphrase']) $language[$languagearray['varname']] = $fontstart . $languagearray['customphrase'] . $fontend; else $language[$languagearray['varname']] = $fontstart . $languagearray['defaultphrase'] . $fontend; } return $language; } // ################################ ADD SMILIES ################################ function AddSmilies($phrase) { global $smilieimagetexts, $smilieimagepaths; return $newphrase = @preg_replace($smilieimagetexts, $smilieimagepaths, $phrase); } // ############################### LOAD SMILIES ################################ function LoadSmilies($usersystem) { global $DB, $sdurl, $dbname, $smilieimagetexts, $smilieimagepaths; // select smilie system $smiliesystem = $DB->query_first("SELECT value FROM " . TABLE_PREFIX . "mainsettings WHERE varname = 'smiliesystem'"); if($smiliesystem['value'] == 'Subdreamer') { $getsmilies = $DB->query("SELECT * FROM " . TABLE_PREFIX . "smilies"); $smiliepath = 'images/smilies/'; } else { // using forum smilies if($dbname != $usersystem['dbname']) { $DB->select_db($usersystem['dbname']); } if($usersystem['name'] == 'vBulletin 2') { $getsmilies = $DB->query("SELECT smilietext AS text, smiliepath AS image FROM " . $usersystem['tblprefix'] . "smilie"); $smiliepath = $usersystem['folderpath']; } else if($usersystem['name'] == 'vBulletin 3') { $getsmilies = $DB->query("SELECT smilietext AS text, smiliepath AS image FROM " . $usersystem['tblprefix'] . "smilie"); $smiliepath = $usersystem['folderpath']; } else if($usersystem['name'] == 'phpBB2') { $getsmilies = $DB->query("SELECT code AS text, smile_url AS image FROM " . $usersystem['tblprefix'] . "smilies"); $smiliepath = $usersystem['folderpath'] . 'images/smiles/'; } else if($usersystem['name'] == 'Invision Power Board 2') { $getsmilies = $DB->query("SELECT typed AS text, image FROM " . $usersystem['tblprefix'] . "emoticons"); $smiliepath = $usersystem['folderpath'] . 'style_emoticons/default/'; } else if($usersystem['name'] == 'Simple Machines Forum 1') { $getsmilies = $DB->query("SELECT code AS text, filename AS image FROM " . $usersystem['tblprefix'] . "smileys"); $smiliepath = $usersystem['folderpath'] . 'Smileys/default/'; } // switch back to subdreamer database if($dbname != $usersystem['dbname']) { $DB->select_db($dbname); } } while($smilie = $DB->fetch_array($getsmilies)) { $smilieimagetexts[] = '/' . preg_quote($smilie['text']) . '/'; $smilieimagepaths[] = ''; } } /** * @return array if errors * @param $imagefile Path to the image file, ex: ./images/test.jpg * @param $thumbnailfile Path where to save the thumbnail, ex: .images/test_thumbnail.jpg * @desc Takes an image and makes a thumbnail thats scaled down proportionally. */ function CreateThumbnail($imagefile, $thumbnailfile, $maxwidth, $maxheight, $squareoff) { // check if gd is installed if(!function_exists('imagetypes')) { $errormsg = 'The GD image library needs to be installed to create thumbnails, please contact your server administrator.'; } else { // gd is installed, get image information $imageinfo = getImageSize($imagefile) ; $imagewidth = $imageinfo[0]; $imageheight = $imageinfo[1]; switch($imageinfo['mime']) { case 'image/gif': if(imagetypes() & IMG_GIF) { $source_handle = imageCreateFromGIF($imagefile); $function_to_write = 'ImageGif'; } else $errormsg = 'GIF images are not supported
'; break; case 'image/jpeg': if(imagetypes() & IMG_JPG) { $source_handle = imageCreateFromJPEG($imagefile); $function_to_write = 'ImageJpeg'; } else $errormsg = 'JPEG images are not supported
'; break; case 'image/png': if(imagetypes() & IMG_PNG) { $source_handle = imageCreateFromPNG($imagefile); $function_to_write = 'ImagePng'; } else $errormsg = 'PNG images are not supported
'; break; case 'image/wbmp': if(imagetypes() & IMG_WBMP) { $source_handle = imageCreateFromWBMP($imagefile) ; $function_to_write = 'ImageWbmp'; } else $errormsg = 'WBMP images are not supported
'; break; default: $errormsg = $image_info['mime'].' images are not supported
'; break; } if(!isset($errormsg)) { if(!is_numeric($maxwidth)) $maxwidth = 100; if(!is_numeric($maxheight)) $maxheight = 100; // If the size suggested is larger than the current image // make the new size the same as the current one if($maxwidth > $imagewidth) { $maxwidth = $imagewidth; } if($maxheight > $imageheight) { $maxheight = $imageheight; } if($squareoff) { // Figure out which is the shorter side and resize the thumbs to that size if($imagewidth > $imageheight) { $thumbnail_width = $thumbnail_height = $maxwidth; } else { $thumbnail_width = $thumbnail_height = $maxheight; } } else { if($imagewidth > $imageheight) { $thumbnail_width = $maxwidth; $thumbnail_height = (int)($maxwidth * $imageheight / $imagewidth); } else { $thumbnail_height = $maxheight; $thumbnail_width = (int)($maxheight * $imagewidth / $imageheight); } } // Build Thumbnail with GD2 if(function_exists('ImageCreateTrueColor')) { // create a blank image for the thumbnail $destination_handle = ImageCreateTrueColor($thumbnail_width, $thumbnail_height); // resize it ImageCopyResampled($destination_handle, $source_handle, 0, 0, 0, 0, $thumbnail_width, $thumbnail_height, $imagewidth, $imageheight); } else if(function_exists('imagecreate')) { // Build Thumbnail with GD1 // create a blank image for the thumbnail $destination_handle = ImageCreate($thumbnail_width, $thumbnail_height ); // resize it ImageCopyResized($destination_handle, $source_handle, 0, 0, 0, 0, $thumbnail_width, $thumbnail_height, $imagewidth, $imageheight); } else { $errormsg = 'The GD image library needs to be installed to create thumbnails, please contact your server administrator.'; } if(!isset($errormsg)) { // Let's save the thumbnail $function_to_write($destination_handle, $thumbnailfile); ImageDestroy($destination_handle); } } } return isset($errormsg) ? $errormsg : NULL; } // ########################## CREATE A GUID ############################# function CreateGuid() { if (function_exists('com_create_guid')) { $uuid = com_create_guid(); $uuid = str_replace('{', '', $uuid); $uuid = str_replace('}', '', $uuid); return $uuid; } else { mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up. $charid = strtoupper(md5(uniqid(rand(), true))); $hyphen = chr(45);// "-" $uuid = substr($charid, 0, 8).$hyphen .substr($charid, 8, 4).$hyphen .substr($charid,12, 4).$hyphen .substr($charid,16, 4).$hyphen .substr($charid,20,12); return $uuid; } } // ############################# CALCULATE THE EXECUTION TIME ############################## function ExecutionTime() { global $time_start; $time_end = microtime(true); return round(($time_end - $time_start), 3); } ?>