function forum_get_readable($maxlevel = 999999999, $parents = '|', $inherit = array(), $level = 1) { global $set, $db, $apx, $inheritfields; $forumlist = array(); $data = $db->fetch("SELECT forumid,inherit,moderator,right_read,forumid AS password_fromid,children FROM " . PRE . "_forums WHERE parents='" . addslashes($parents) . "' ORDER BY ord ASC"); if (!count($data)) { return array(); } //Für jedes Forum Unterforen auslesen foreach ($data as $res) { $res['level'] = $level; $res['moderator'] = dash_unserialize($res['moderator']); if ($res['inherit']) { $res = array_merge($res, $inherit); } //Rechte erben $foruminfo = $res; //Rechte prüfen if (!forum_access_read($res)) { $foruminfo['forumid'] = 0; } $forumlist[] = $foruminfo; //Vererbbare Rechte nach unten weitergeben $handdown['right_read'] = $res['right_read']; //Unterforen auslesen if ($level < $maxlevel && $res['children'] && $res['children'] != '|') { $forumlist = array_merge($forumlist, forum_get_readable($maxlevel, $parents . $res['forumid'] . '|', $handdown, $level + 1)); } } return $forumlist; }
if (is_array($icons)) { $icons = array_sort($icons, 'ord', 'ASC'); } if (count($icons)) { foreach ($icons as $key => $res) { ++$ii; $icondata[$ii]['ID'] = $key; $icondata[$ii]['IMAGE'] = $res['file']; } } //Foren auflisten $data = forum_readout(); foreach ($data as $res) { ++$i; //Nicht sichtbare Foren überspringen if (!forum_access_visible($res) || !forum_access_read($res)) { $jump = $res['level']; continue; } if ($jump && $res['level'] > $jump) { continue; } else { $jump = 0; } if (!$res['iscat']) { $forumdata[$i]['ID'] = $res['forumid']; } $forumdata[$i]['TITLE'] = replace($res['title']); $forumdata[$i]['LEVEL'] = $res['level']; $forumdata[$i]['ISCAT'] = $res['iscat']; $forumdata[$i]['SELECTED'] = iif($_POST['forum'] == $res['forumid'], 1, 0);
function propagateInfo(&$forumList) { //Felder, die für Lastpost kopiert werden müssen $lastpostcopy = array('lastposttime', 'lastpost', 'lastposter', 'lastposter_userid', 'lastposttime', 'lastthread', 'lastthread_title', 'lastthread_icon', 'lastthread_prefix'); $info = array(); foreach ($forumList as $key => $res) { $subinfo = array(); //Info von Subforen holen if (isset($res['subforums'])) { $subinfo = propagateInfo($res['subforums']); } //Info einfügen if (isset($subinfo['posts'])) { $res['posts'] += $subinfo['posts']; $forumList[$key]['posts'] += $subinfo['posts']; } if (isset($subinfo['threads'])) { $res['threads'] += $subinfo['threads']; $forumList[$key]['threads'] += $subinfo['threads']; } if (isset($subinfo['lastpost']) && $subinfo['lastpost']['lastposttime'] > $res['lastposttime']) { foreach ($subinfo['lastpost'] as $key2 => $value) { $res[$key2] = $value; $forumList[$key][$key2] = $value; } } //Forum darf gelesen werden => Informationen für übergeordnetes Forum relevant if (forum_access_read($res)) { //Posts und Threads summieren $info['posts'] += $res['posts']; $info['threads'] += $res['threads']; //Lastpost ermitteln if (!isset($info['lastposttime']) || $res['lastposttime'] > $info['lastposttime']) { foreach ($lastpostcopy as $lcopy) { $info['lastpost'][$lcopy] = $res[$lcopy]; $info['lastposttime'] = $res['lastposttime']; } } } } return $info; }
$apx->lang->drop('postform'); $apx->lang->drop('editor'); $_REQUEST['id'] = (int) $_REQUEST['id']; $_REQUEST['quote'] = (int) $_REQUEST['quote']; if (!$_REQUEST['id']) { die('missing thread-ID!'); } $threadinfo = thread_info($_REQUEST['id']); if (!$threadinfo['threadid'] || $threadinfo['del']) { message($apx->lang->get('MSG_THREADNOTEXIST')); } $foruminfo = forum_info($threadinfo['forumid']); if (!$foruminfo['forumid']) { message($apx->lang->get('MSG_FORUMNOTEXIST')); } if (!forum_access_read($foruminfo)) { tmessage('noright', array(), false, false); } if (!forum_access_post($foruminfo, $threadinfo)) { tmessage('noright', array(), false, false); } check_forum_password($foruminfo); ////////////////////////////////////////////////////////////////////////////////////////// POST ERSTELLEN //Vorschau generieren if ($_POST['preview']) { $preview = $_POST['text']; if ($_POST['transform_links']) { $preview = transform_urls($preview); } $preview = forum_replace($preview, $_POST['allowcodes'], $_POST['allowsmilies']); $apx->tmpl->assign('PREVIEW', $preview);
function subscr_validate() { static $done; if (isset($done)) { return; } global $set, $db, $apx; //Abonnements auslesen $data = $db->fetch("SELECT id,userid,type,source FROM " . PRE . "_forum_subscriptions"); $userinfo = subscr_userinfo(get_ids($data, 'userid')); if (!is_array($data)) { $data = array(); } //Foreninfo auslesen /*$foruminfo=array(); require_once(BASEDIR.'lib/class.recursivetree.php'); $tree = new RecursiveTree(PRE.'_forums', 'forumid'); $forum = $tree->getTree(array('*')); foreach ( $forum AS $res ) { $foruminfo[$res['forumid']]=$res; }*/ //Themen auslesen $threadtoforum = array(); $threadids = array(); foreach ($data as $res) { if ($res['type'] == 'thread') { $threadids[] = $res['source']; } } if (count($threadids)) { $tdata = $db->fetch("SELECT threadid,forumid FROM " . PRE . "_forum_threads WHERE threadid IN (" . implode(',', $threadids) . ")"); if (count($tdata)) { foreach ($tdata as $res) { $threadtoforum[$res['threadid']] = $res['forumid']; } } } //Alle Abonnements überprüfen $delete = array(); foreach ($data as $res) { if ($res['type'] == 'forum') { $forumid = $res['source']; $foruminfo = forumcron_get_forum_info($forumid); if (!isset($userinfo[$res['userid']]) || !isset($foruminfo) || !forum_access_read($foruminfo, $userinfo[$res['userid']])) { $delete[] = $res['id']; } } else { $forumid = $threadtoforum[$res['source']]; $foruminfo = forumcron_get_forum_info($forumid); if (!isset($userinfo[$res['userid']]) || !isset($foruminfo) || !forum_access_read($foruminfo, $userinfo[$res['userid']])) { $delete[] = $res['id']; } } } //Löschen if (count($delete)) { $db->query("DELETE FROM " . PRE . "_forum_subscriptions WHERE id IN (" . implode(',', $delete) . ")"); } $done = true; }
list($userCount, $guestCount, $activelist) = forum_get_activity('forum', $foruminfo['forumid'], $foruminfo['moderator']); $apx->tmpl->assign('ACTIVITY_USERS', $userCount); $apx->tmpl->assign('ACTIVITY_GUESTS', $userCount); $apx->tmpl->assign('ACTIVITY', $activelist); $apx->tmpl->parse('forum'); //////////////////////////////////////////////////////////////////////////////////////////////////////// $apx->tmpl->assign_static('STYLESHEET', compatible_hsc($foruminfo['stylesheet'])); $apx->tmpl->assign('PATH', forum_path($foruminfo)); $apx->tmpl->assign('PATHEND', replace($foruminfo['title'])); titlebar($foruminfo['title']); ///////////////////////////////////////////////////////////////////////////////////////////////// GELESEN-STATUS $isread = true; //Fieser Hack: Verwende die Daten, die forum_assign.php erzeugt hat, //denn da steht schon die lastposttime des Forums (inklusive Unterforen) drin. foreach ($forumRec as $forum) { if (forum_access_visible($forum) && forum_access_read($forum) && correct_forum_password($forum)) { $forumLastview = max(array($user->info['forum_lastonline'], forum_readtime($forum['forumid']))); if ($forumLastview < $forum['lastposttime']) { $isread = false; break; } } } //Themen brauchen wir nur anzuschauen, wenn die Unterforen alle gelesen sind if ($isread) { //Eine detaillierte Prüfung ist nur notwendig, wenn es in diesem Forum etwas neues gibt $forumLastview = max(array($user->info['forum_lastonline'], forum_readtime($foruminfo['forumid']))); if ($forumLastview < $foruminfo['lastposttime']) { //Alle ungelesenen Themen bestimmen und prüfen, ob bereits gelesen $data = $db->fetch("\n\t\t\tSELECT threadid, lastposttime\n\t\t\tFROM " . PRE . "_forum_threads\n\t\t\tWHERE forumid='" . $foruminfo['forumid'] . "' AND del=0 AND moved=0 AND lastposttime>'" . $forumLastview . "'\n\t\t\tORDER BY lastposttime DESC\n\t\t"); $readThreads = threads_get_read();
} //Prüfen, ob der Nutzer Zugang hat $data = $db->fetch("SELECT forumid FROM " . PRE . "_forum_anndisplay WHERE id='" . $_REQUEST['id'] . "'"); $forumids = get_ids($data, 'forumid'); //Keine Foren-Ids vorhanden if (!count($forumids)) { filenotfound(); } elseif (!in_array(0, $forumids)) { $access = false; foreach ($forumids as $fid) { $foruminfo = forum_info($fid); if (!$foruminfo['forumid']) { continue; } //Zugang erlaubt, alles ok if (forum_access_read($foruminfo) && correct_forum_password($foruminfo)) { $access = true; break; } } //Kein Zugang if (!$access) { tmessage('noright', array(), false, false); } } //Lastvisit für dieses Thema bestimmen $lastvisit = max(array($user->info['forum_lastonline'], announcement_readtime($anninfo['id']))); announcement_isread($anninfo['id']); ///////////////////////////////////////////////////////////////////////////////////////// BEITRAG //Userinfo auslesen if ($anninfo['userid']) {
if (!$_REQUEST['id']) { die('missing post-ID!'); } $postinfo = post_info($_REQUEST['id']); if (!$postinfo['postid'] || $postinfo['del']) { message($apx->lang->get('MSG_POSTNOTEXIST')); } $threadinfo = thread_info($postinfo['threadid']); if (!$threadinfo['threadid'] || $threadinfo['del']) { message($apx->lang->get('MSG_THREADNOTEXIST')); } $foruminfo = forum_info($threadinfo['forumid']); if (!$foruminfo['forumid']) { message($apx->lang->get('MSG_FORUMNOTEXIST')); } if (!forum_access_read($foruminfo) || !$user->info['userid']) { tmessage('noright', array(), false, false); } check_forum_password($foruminfo); ////////////////////////////////////////////////////////////////////////////////////////// REPORT if ($_POST['send']) { if (!$_POST['text']) { message('back'); } else { $moderators = ''; if (is_array($foruminfo['moderator']) && count($foruminfo['moderator'])) { $moderators = " OR userid IN (" . implode(',', $foruminfo['moderator']) . ") "; } //eMails auslesen $data = $db->fetch("SELECT DISTINCT email FROM " . PRE . "_user LEFT JOIN " . PRE . "_user_groups USING(groupid) WHERE gtype='admin' " . $moderators); $emails = get_ids($data, 'email');