Пример #1
0
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;
}
Пример #2
0
 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);
Пример #3
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;
 }
Пример #4
0
$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);
Пример #5
0
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;
}
Пример #6
0
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();
Пример #7
0
}
//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']) {
Пример #8
0
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');