WebsiteBaker Logo
  • *
  • Templates
  • Help
  • Add-ons
  • Download
  • Home
*
Welcome, Guest. Please login or register.

Login with username, password and session length
 

News


WebsiteBaker 2.13.9 R25 is now available!


R.I.P Dietmar (luisehahne) and thank you for all your valuable work for WB
https://forum.websitebaker.org/index.php/topic,32355.0.html


* Support WebsiteBaker

Your donations will help to:

  • Pay for our dedicated server
  • Pay for domain registration
  • and much more!

You can donate by clicking on the button below.


  • Home
  • Help
  • Search
  • Login
  • Register

  • WebsiteBaker Community Forum »
  • WebsiteBaker Support (2.13.x) »
  • General Help & Support »
  • Fehler in der Dokumentation
  • Print
Pages: [1]   Go Down

Author Topic: Fehler in der Dokumentation  (Read 227 times)

Offline kuerbis42

  • Posts: 10
Fehler in der Dokumentation
« on: January 05, 2026, 06:31:37 PM »
HeyHo, mann bin ich wieder aktiv... :-D

Unter: https://help.WebsiteBaker.org/en/developer-guide/variables-and-constants.php
hat sich (mindestens hier):
Code: [Select]
Session variables (class.wb.php) Description:
$_SESSION['USER_ID'] ID of the user loged in
$_SESSION['GROUP_ID'] group ID of the user loged in
$_SESSION['GROUP_NAME'] group name of the user loged in
$_SESSION['USERNAME'] user name of the user loged in
$_SESSION['DISPLAY_NAME'] display name of the user loged in
$_SESSION['EMAIL'] Email
$_SESSION['HOME_FOLDER'] home folder in /media of user loged in
$_SESSION['TIMEZONE'] timezone of user loged in
ein Fehler eingeschlichen.
Die $_SESSION-Variable heißt nicht GROUP_ID sond GROUPS_ID.
Also: $_SESSION['GROUPS_ID']    group ID of the user loged in


Greets
Logged

Offline sternchen8875

  • Global Moderator
  • *****
  • Posts: 697
Re: Fehler in der Dokumentation group_id vs groups_id
« Reply #1 on: January 05, 2026, 11:26:55 PM »
nicht unbedingt falsch  :wink:

beide Session-Variablen existieren, aber ich schreib es dazu

Ein kurzer Blick in die Geschichte von WB: group_id stammt aus früheren Zeiten von WB und erlaubte nur eine einzige ID. Wenn ich richtig "geforscht" habe, wurde es um WB 2.7.1 ergänzt mit der groups_id. Dieser Wert ist ein Array und ermöglicht es, User mehrere Gruppen zuzuweisen.

Weil die Entwickler meinten, group_id wäre nun überflüssig, stand es viele Jahre auf deprecated. Hat aber nie jemand entfernt und irgendwann flog der Kommentar auch raus. Es hat heute nach wie vor seine Gültigkeit und kann auch verwendet werden. Allerdings muß man dann auch wissen, wie es funktioniert.

Wir nehmen an, es existieren mindestens 3 Usergruppen. Es können auch nur 2 oder 30 sein, aber 3 erklärt sich leichter ;-)
Usergruppe 1 ist immer die Administratorengrup pe, Gruppe 2 nenn ich Fußball, hier arbeiten Redakteure im Fußballbereich, Usergruppe 3 das Gleiche für Handball

Ich möchte einen neuen Fußball-Redakteur anlegen, wähle also Gruppe 2, group_id wäre dann die 2, groups_id ebenso
Lege ich nun einen User an, der beide Bereiche abdecken soll, bekäme auch der die group_id == 2 und im Feld groups_id steht dann 2,3

group_id ordnet zuerst die Gruppen, die in der Gruppenauswahl genannt wurden, der Reihe nach, beginnend mit der obersten Priorität Administratorengrup pe 1, dann aufwärts, darum ist diese group_id also die 2, die SESSION['groups_id'] dann aber 2,3

Das grundsätzlich nicht empfohlen wird, direkt mit Session-Variablen zu arbeiten, wirst du sicher wissen. Alles Weitere wäre dann abhängig von dem, was da erforderlich ist. Da diese Session-Variablen einen erfolgreichen Login erfordern, kannst du auch die wb-internen Funktionen nutzen, die z.b. in der class.wb.php vorliegen, einfach mal durchscrollen und im Zweifel einfach fragen






Logged

Offline kuerbis42

  • Posts: 10
Re: Fehler in der Dokumentation
« Reply #2 on: January 06, 2026, 07:29:42 AM »
danke für die ausführliche Antwort  und ich will auch gar nicht widersprechen :-o

....aber wenn ich ein print_r($_SESSION) mache, dann erhalte ich (gekürzt) folgendes:
Code: [Select]
Array (
[session_started] => 1767633378
[TOKENS] => .....}
[SYSTEM_PERMISSIONS] => Array ( [0] => access [1] => ....] => users_delete [52] => users_modify )
[MODULE_PERMISSIONS] => Array ( [0] => )
[TEMPLATE_PERMISSIONS] => Array ( [0] => )
[USER_ID] => 1
[GROUPS_ID] => 1
[USERNAME] => Cheffe
[DISPLAY_NAME] => Administrator
[EMAIL] => someone@world.com
[HOME_FOLDER] =>
[LANGUAGE] => DE
[TIMEZONE] => 0
[DATE_FORMAT] => d-m-Y
[TIME_FORMAT] => H:i
[GROUP_NAME] => Array ( [1] => Administrators )
[PAGE_ID] => 8
[HTTP_REFERER] => https://..../pages/sessions.php )

GROUP_ID ist nicht dabei.
Sinn und Zweck für mich:
je nach Gruppe sollen auf der Seite zusätzliche Felder angezeigt werden: Admins haben "immer alles" und "BackOffice" darf ein wenig mehr als "sterbliche Normalos" :-)

Deswegen wollte ich mit $_SESSION['GROUP_NAME'][$_SESSION['GROUP_ID']] auf die Gruppe prüfen und bin dann über das "S" gestolpert, weil nichts zurück kam.
(Dazu möchte ich dann noch ergänzen: lt. Dokumentation steht in $_SESSION['GROUP_NAME'] schon der Name der Gruppe drin, was aber ja so nicht stimmt, denn es ist ein Array, mein erster Ansatz:
Code: [Select]
if($_SESSION['GROUP_NAME']==="DeineGruppe") schlug fehl, deshalb musste ich tiefer gehen)
« Last Edit: January 06, 2026, 07:35:11 AM by kuerbis42 »
Logged

Offline sternchen8875

  • Global Moderator
  • *****
  • Posts: 697
Re: Fehler in der Dokumentation
« Reply #3 on: January 06, 2026, 01:21:53 PM »
Quote
und ich will auch gar nicht widersprechen
nur keine Angst ;-)
Wenn falsch, dann falsch und das darf man auch sagen

zur GROUP_ID
Ja, da muß ich mich wohl korrigieren, was die Session-Variablen betrifft

GROUP_ID wurde gestrichen aus den Session-Variablen ab Version WB 2.13.4. Habe die Hilfe-Seite einen entsprechenden Hinweis verpasst. Analog dem Hinweis zur Variable GROUP_NAME, der, wie richtig bemerkt, einen Array enthält mit den Gruppennamen zu den in GROUPS_ID genannten Gruppen.

zu deinem Vorhaben... Sieh es nicht als Vorgabe, sondern eher als Tip. Du wirst mit etwas Praxis schnell merken, das es so auch viel leichter ist, vorallem aber sicherer.  :wink:

Bin ich, als Frontend-User, erstmal auf der Ebene, das ich Zugriff auf die Session-Variablen habe, was über Cross-Site-Scripting ja kein großes Problem wäre, dann kann ich diese Variablen nicht nur lesen und nutzen, sondern eben auch verändern. Und weil ich an dieser Stelle ja schon eingeloggt sein muß (sonst funktionieren die Session-Variablen ja nicht), kann ich mich dann auch leicht zum Admin machen

mal ein grundsätzlicher Ablauf
1. zuerst prüfen, ob der User auch tatsächlich angemeldet ist mit is_authenticated(), wenn nicht: exit()
2. Wenn angemeldet, hätte er Zugriffsrechte mit get_permission(), wenn nicht: exit()
3. ami_group_member() prüft, ob der User Mitglied der genannte(n) Gruppe(n) ist, damit lassen sich dann Inhalte schalten oder Menüpunkte

andere interessante Funktionen wären z.b.
get_page_permission() - hat der angemeldete User Rechte zum Besuch dieser Seite?
getGroupId() - die aktuelle Gruppen-ID des Users
Logged

Offline kuerbis42

  • Posts: 10
Re: Fehler in der Dokumentation
« Reply #4 on: January 06, 2026, 07:05:50 PM »
das werde ich gerne beherzigen  :-)
Muss mich erst wieder eingrooven. Hat sich viel getan in den letzten 5 Jahren  :|

Besten Dank
Logged

Offline kuerbis42

  • Posts: 10
Re: Fehler in der Dokumentation
« Reply #5 on: January 10, 2026, 12:57:57 PM »
so, nun groove ich mich ja wirklich mal ein...

Auf der Seite https://help.WebsiteBaker.org/en/developer-guide/classes-and-functions.php
stehen ja einige Funktionen, die ich nutzen könnte...
Interessant sind natürlich:
directory_list(): returns a array with all subdirectories based on a starting directory
file_list(): returns a array with all files and subdirectories based on a starting directory (possible to exclude files from beeing listed)
get_home_folders(): returns array with all home folders below /media

Leider bekomme ich aber immer nur "nichts" zurück.

Test-Source:
Code: [Select]
header('Content-Type: application/json'); /* damit es besser lesbar ist....*/
require_once(WB_PATH."/framework/functions.php");

$base = realpath(WB_PATH."/media");

function read_all_files($root = '.'){ /* von https://www.php.net/manual/de/function.readdir.php */
  $files  = array('files'=>array(), 'dirs'=>array());
  $directories  = array();
  $last_letter  = $root[strlen($root)-1];
  $root  = ($last_letter == '\\' || $last_letter == '/') ? $root : $root.DIRECTORY_SEPARATOR;
 
  $directories[]  = $root;
 
  while (sizeof($directories)) {
    $dir  = array_pop($directories);
    if ($handle = opendir($dir)) {
      while (false !== ($file = readdir($handle))) {
        if ($file == '.' || $file == '..') {
          continue;
        }
        $file  = $dir.$file;
        if (is_dir($file)) {
          $directory_path = $file.DIRECTORY_SEPARATOR;
          array_push($directories, $directory_path);
          $files['dirs'][]  = $directory_path;
        } elseif (is_file($file)) {
          $files['files'][]  = $file;
        }
      }
      closedir($handle);
    }
  } 
  return $files;
}
echo $base." \n";

// WB interne Funkltion:
$all_files = file_list($base);
print_r($all_files);

echo "##########################################\n";
echo "Ersatzfunktion:\n"
$all_files = read_all_files($base); // liefert array aller Dateien & Unterordner
print_r( $all_files);
die();


Und hier die Ausgabe (function list_files() gibt ein leeres Array zurück, read_all_files() enthält das, was ich brauche:
Code: [Select]
/www/wwwroot/6.....de/media
Array
(
)
##########################################
Ersatzfunktion:
Array
(
    [files] => Array
        (
            [0] => /www/wwwroot/6.....de/media/acp_daten/location_images/Gebaude15.jpg
            [1] => /www/wwwroot/6.....de/media/acp_daten/location_images/Gebaude2.jpg
            [2] => /www/wwwroot/6.....de/media/acp_daten/location_images/Gebaude1.jpg
            [3] => /www/wwwroot/6.....de/media/acp_daten/location_images/Gebaude14.jpg
            [4] => /www/wwwroot/6.....de/media/acp_daten/location_images/Gebaude17.jpg
            [5] => /www/wwwroot/6.....de/media/acp_daten/location_images/Gebaude1dsds.jpg
            [6] => /www/wwwroot/6.....de/media/acp_daten/location_images/sueden/Gebaude17.jpg
            [7] => /www/wwwroot/6.....de/media/acp_daten/location_images/sueden/Gebaude1dsds.jpg
            [8] => /www/wwwroot/6.....de/media/acp_daten/dj_images/DJ_1-dj_695bbba3e56087.90944195.jpg
            [9] => /www/wwwroot/6.....de/media/acp_daten/dj_images/DJ_3-dj_695d5a28b9ecd2.32009774.jpg
        )

    [dirs] => Array
        (
            [0] => /www/wwwroot/6.....de/media/calendar/
            [1] => /www/wwwroot/6.....de/media/acp_daten/
            [2] => /www/wwwroot/6.....de/media/acp_daten/dj_images/
            [3] => /www/wwwroot/6.....de/media/acp_daten/location_images/
            [4] => /www/wwwroot/6.....de/media/acp_daten/location_images/sueden/
        )

)

Was mache ich falsch???
Logged

Offline sternchen8875

  • Global Moderator
  • *****
  • Posts: 697
Re: Fehler in der Dokumentation
« Reply #6 on: January 10, 2026, 04:57:06 PM »
Kann es sein, das du WB_PATH nicht zur Verfügung hast? 

Quote
<?php
require('config.php');

//header('Content-Type: application/json'); /* damit es besser lesbar ist....*/
require_once(WB_PATH."/framework/functions.php");

$base = realpath(WB_PATH."/media");

$aFileList = file_list($base);
echo "<pre class='debug-dump'>DEBUG in " . basename(__FILE__) . " on line " . __LINE__ . ":<br>";
print_r($aFileList);
echo "</pre>";

$aDirList = directory_list($base);
echo "<pre class='debug-dump'>DEBUG in " . basename(__FILE__) . " on line " . __LINE__ . ":<br>";
print_r($aDirList);
echo "</pre>";

ergibt
File-List
DEBUG in newEmptyPHP.php on line 10:
Array
(
   
  • => F:\cms1\wb_test_1622\media/1015-800x500-grayscale.jpg
  • [1] => F:\cms1\wb_test_1622\media/1015-800x500.jpg
        [2] => F:\cms1\wb_test_1622\media/1765895479_image1a.jpg
        [3] => F:\cms1\wb_test_1622\media/1765895479_image1b.jpg
        [4] => F:\cms1\wb_test_1622\media/IMG_0196.jpg
        [5] => F:\cms1\wb_test_1622\media/IMG_0196_800.jpg
        [6] => F:\cms1\wb_test_1622\media/lens.html
    )


    Folderlist
    DEBUG in newEmptyPHP.php on line 15:
    Array
    (
       
  • => F:\cms1\wb_test_1622\media/faqbaker
  • [1] => F:\cms1\wb_test_1622\media/kuerbistest
        [2] => F:\cms1\wb_test_1622\media/mod_image_comparison
    )

    JSON hab ich mal deaktiviert zum Test, damit kommst du dann ja klar, wenn es erstmal läuft, oder?


    zur get_home_folders(): Ergebnis wäre der Ordner des angemeldeten Users, der in der Tabelle
users im Feld home_folder steht

es gab in WB mal eine Funktion, die jedem registrierten User ein eigenes Unterverzeichnis in /media zugewiesen hat mit dem Zweck, das jeder User nur aus diesem Bereich Material in den Sectionen verwenden darf. Hat sich aber in der Praxis nicht bewährt, weil es eben die Möglichkeit nahm, auch in anderen media-Ordner zu arbeiten. Hier bedarf es einfach besserer Settings, die einem Admin erlauben, einem User oder Usergruppe auch Zugriff auch andere Ordner zu gewähren.
Diese ganze Schaltung zieht sich durch den kompletten Core und damit dies bei Rektivierung nicht wieder neu programmiert werden muß, blieb der Rest drin. Nur das Anlegen eines solchen Ordner mit entsprechendem Eintrag in der User-Tabelle wurde deaktiviert, weshalb du dort kein Ergebnis bekommst.

Für die neue WB-Version hab ich das nun wieder aktiviert und regle die Zulassung über Gruppenrechte. Ist aber noch nicht spruchreif und eigentlich auch zu starr. Vielleicht fällt mir noch etwas anderes ein
 
Logged

Offline kuerbis42

  • Posts: 10
Re: Fehler in der Dokumentation
« Reply #7 on: Today at 05:12:49 PM »
WB_PATH: doch, der ist gesetzt (ich muss dazu sagen, dass ich das in einer WB-"Seite" programmiere, Abschnitt Code v3.1.0, d.h. es sollte ja sowieso "alles da sein".
Als Template benutze ich WB Default V1.2.3
(achja, den echten Domainnamen habe ich gekürzt, er ist aber normal in der Anzeige)
Wenn ich Dein require('config.php') setze, dann kommt im Debug-Log:
Code: [Select]
Sun, 11 Jan 2026 15:50:28 +0000 [E_WARNING] /config.php:[8] from /config.php:[8] define "Constant DB_TYPE already defined"
Sun, 11 Jan 2026 15:50:28 +0000 [E_WARNING] /config.php:[9] from /config.php:[9] define "Constant DB_HOST already defined"
Sun, 11 Jan 2026 15:50:28 +0000 [E_WARNING] /config.php:[10] from /config.php:[10] define "Constant DB_PORT already defined"
....
Sun, 11 Jan 2026 15:50:28 +0000 [E_WARNING] /config.php:[17] from /config.php:[17] define "Constant WB_URL already defined"
PHP Fatal error: Cannot redeclare function SanitizeHttpReferer() (previously declared in /www/wwwroot/60......de/fram....

Wenn ich  require('config.php') weg lasse, dann kommt:

Code: [Select]
DEBUG in view.php(31) : eval()'d code on line 9:
Array
(
)
und
Code: [Select]
DEBUG in view.php(31) : eval()'d code on line 14:
Array
(
    [0] => /www/wwwroot/60....t.de/acp_daten
    [1] => /www/wwwroot/60....t.de/acp_daten/dj_images
    [2] => /www/wwwroot/60....t.de/acp_daten/location_images
    [3] => /www/wwwroot/60....t.de/acp_daten/location_images/sueden
    [4] => /www/wwwroot/60....t.de/calendar
)

nun habe ich eine dirctcode.php direkt im ./pages-Verzeichnis angelegt (require("../config.php"), also einen zurück):
Code: [Select]
DEBUG in dirctcode.php on line 10:
Array
(
)

DEBUG in dirctcode.php on line 15:
Array
(
    [0] => /www/wwwroot/60....t.de/acp_daten
    [1] => /www/wwwroot/60....t.de/acp_daten/dj_images
    [2] => /www/wwwroot/60....t.de/acp_daten/location_images
    [3] => /www/wwwroot/60....t.de/acp_daten/location_images/sueden
    [4] => /www/wwwroot/60....t.de/calendar
)

Außerdem fällt mir gerade auf:
Es fehlt in der Ausgabe das Verzeichnis "media"
/www/wwwroot/60....t.de/media/acp_daten

Kann es sein, das die Funktion nur auf Windows richtig funktioniert? Du hast es ja lokal ausprobiert, ich  auf einem Debian mit ngx
Logged

Offline kuerbis42

  • Posts: 10
Re: Fehler in der Dokumentation
« Reply #8 on: Today at 05:59:55 PM »



Ich glaube die Funktion dir() ist fehlerhaft https://stackoverflow.com/questions/8081623/is-dir-returns-false-even-when-it-is-a-dir.
Schau mal hier:
https://www.php.net/manual/en/function.scandir.php
Ich habe mir dann mal die folgende Funktion "geklaut", das funktioniert prima.
Code: [Select]
<?php
function find_all_files($dir)
{
    
$root = scandir($dir);
    foreach(
$root as $value)
    {
        if(
$value === "." || $value === "..") {continue;}
        if(
is_file("$dir/$value")) {$result[]="$dir/$value";continue;}
        foreach(
find_all_files("$dir/$value") as $value)
        {
            
$result[]=$value;
        }
    }
    return 
$result;
}
?>
Logged

Offline sternchen8875

  • Global Moderator
  • *****
  • Posts: 697
Re: Fehler in der Dokumentation
« Reply #9 on: Today at 07:16:49 PM »
du mußt viel ruhiger werden...    :wink: :-D

also...

dir() ist nix von WB, das ist eine PHP-Funktion -> https://www.php.net/manual/de/function.dir.php

Quote
ich muss dazu sagen, dass ich das in einer WB-"Seite" programmiere, Abschnitt Code v3.1.0, d.h. es sollte ja sowieso "alles da sein".

ja, ist es dort auch. Ich hab nicht im CMS getestet, mir nur das Datenbank-Zeugs von WB geklaut, darum dort die config mit eingebunden, um auf die WB-Funktionen zuzugreifen

Quote
eval()'d code on line 14:
stammt aus meinem Code und betrifft immer die Zeile im WB-Code-Editor, egal, ob für Droplets oder Module wie Code oder Code²
in diesem Fall gehts um das hier
Code: [Select]
" . basename(__FILE__) . " on line " . __LINE__ . "
schreib es so, ist der eval-Fehler auch weg

Code: [Select]
$aFileList = file_list($base);
echo "<pre class='debug-dump'>DEBUG:<br>";
print_r($aFileList);
echo "</pre>";

in deiner ersten Antwort verwendest du

Code: [Select]
$base = realpath(WB_PATH."/media");
lass dir das dort direkt ausgeben und kontrolliere es. Kann ich von hier aus nicht sehen, nur darauf vertrauen, das du das auch richtig angibst.
Noch als Hinweis: /media ist ein Verzeichnis, das nicht jeder benutzt. Was gültig ist, steht in den WB-Optionen unter Servereinstellungen -> Medienverzeichnis:
(nur änderbar bei einer Neuinstallation)


Quote
Kann es sein, das die Funktion nur auf Windows richtig funktioniert? Du hast es ja lokal ausprobiert, ich  auf einem Debian mit ngx

Nein, sonst würde WB ja nicht funktionieren und online schaut das ja nicht anders aus, nur die Pfade ändern sich -> https://i.gyazo.com/92423774d0a8e4074fd251ed5ca3d5d8.png


noch als Tip: wenn du WB als Basis nutzt, würde ich auch dabei bleiben. WB ermittelt den Serverpfad  selbst und unabhängig von dem, was real auf dem Server passiert. Hab grad ne halbe Stunde gesucht, warum das Löschen beim Upgrade nicht geht - ja, da fehlte ein Slash am Ende  :-(




Logged

  • Print
Pages: [1]   Go Up
  • WebsiteBaker Community Forum »
  • WebsiteBaker Support (2.13.x) »
  • General Help & Support »
  • Fehler in der Dokumentation
 

  • SMF 2.0.19 | SMF © 2017, Simple Machines
  • XHTML
  • RSS
  • WAP2