Ich glaub ich hab des Rätsels Problem gefunden. Nach einiger Suche und diversen Tauchgängen im SourceCode von Typo3 (PHP Kenntnissen und sauberer Programmierung sei Dank!).
Ich versuche das hier mal darzulegen und wünsche mir von euch ein bisschen Feedback, ob ich da nicht doch etwas falsch gemacht habe.
Für Benutzer ohne PHP Kenntnisse:
Zusätzlich zu der oben erwähnten nötigen Konfiguration des Forum-Plugins (FE_User-PageId) muss man sicherstellen, daß alle Benutzer des Forum-Plugins
auch die Zugriffsberechtigung auf die Typo3-Seite mit der ID 1 besitzen. Sollte man dies nicht sicherstellen können kommt man um die u.a. Lösung nicht herrum.
Für Benutzer die sich in Typo3 und Extension auskennen:
In der CHC-Forum Extension findet man folgende Klassenkonstruktor als Repräsentation eines Nutzers:
class.tx_chcforum_user.php
* @return void
*/
function tx_chcforum_user ($cObj) {
$this->cObj = $cObj;
$this->conf = $this->cObj->conf;
// added for nested frontend groups support
$this->groupData = $GLOBALS['TSFE']->fe_user->groupData;
// bring in the fconf.
$this->fconf = $this->cObj->fconf;
#if (intval(phpversion()) < 5) unset($this->cObj->fconf);
$this->internal['results_at_a_time'] = 1000;
$this->uid = $GLOBALS['TSFE']->fe_user->user['uid'];
$this->groups = $GLOBALS['TSFE']->fe_user->user['usergroup'];
if ($this->uid) {
$row_array = $this->pi_getRecord('fe_users', $this->uid, 1);
if(is_array($row_array)) {
foreach ($row_array as $attr => $value) {
$this->$attr = $value;
}
}
}
Hier wird in Zeile 19 alle Daten des Nutzers in die CHC-Nutzerklasse übertragen, dies wird mit der getRecord-Methode aus einer abgeleiteten Basisklasse erledigt.
Diese Methode ruft später in der class.t3lib_page.php die methode checkRecord auf, die ich im folgenden teilweise gepostet habe.
class.t3lib_page.php
/**
* Checks if a record exists and is accessible.
* The row is returned if everything's OK.
*
* @param string The table name to search
* @param integer The uid to look up in $table
* @param boolean If checkPage is set, it's also required that the page on which the record resides is accessible
* @return mixed Returns array (the record) if OK, otherwise blank/0 (zero)
*/
function checkRecord($table,$uid,$checkPage=0) {
global $TCA;
$uid=intval($uid);
if (is_array($TCA[$table])) {
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', $table, 'uid='.intval($uid).$this->enableFields($table));
if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
$this->versionOL($table,$row);
$GLOBALS['TYPO3_DB']->sql_free_result($res);
if (is_array($row)) {
if ($checkPage) {
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('uid', 'pages', 'uid='.intval($row['pid']).$this->enableFields('pages'));
if ($GLOBALS['TYPO3_DB']->sql_num_rows($res)) {
return $row;
} else {
return 0;
}
} else {
return $row;
}
}
}
Der Kommentar der Methode sagt zum dritten (optionalen) Parameter, dass dieser eine Seiten-ID angibt und man somit nur ein Ergebniss bekommt, wenn die $uid auch Zugriff auf diese SeitenID besitzt. Ich habe nun in der CHC-Forum Erweiterung den Aufruf (im obigen Quellcodeauszug in Zeile 19):
$row_array = $this->pi_getRecord('fe_users', $this->uid, 1);
durch
$row_array = $this->pi_getRecord('fe_users', $this->uid, 0);
ersetzt und seitdem funktioniert das posten angemeldeter Nutzer genau, wie es sein soll.
Fazit
Ich bin der Meinung, dass dieser Umstand nicht gewollt und somit ein Bug im Plugin ist. Oder hab' ich irgendwo was übersehen ?