[Erledigt] Funktion mxModuleAllowed und Admin-Menü

Begonnen von Alex__, 04 März 2008, 14:50:33

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

Alex__

Hallo liebe PragmaMx-Gemeinde,

versuche mir gerade die Funktionsweise des Adminsmenüs klar zu machen. Dabei sind folgende Fragen aufgekommen:


  • Wo ist die Funktion mxModuleAllowed() definiert (und was macht sie)?
  • Wenn man im Admin-Menü eine Menüpunkt anklickt, was passiert dann?

Der Link von "Downloads" im Adminmenü ist bspw. "http://domain/admin.php?op=Downloads&panel=5", das bedeutet doch, dass die Datei "admin.php" im Stammverzeichnis mit den Parametern op=Downloads und panel=5 aufgerufen wird. Das Panel bezeichnet wohl den Addon-Reiter im Adminmenü und das op ist wohl eine Abkürzung für Operation. Doch leider kann ich keine Funktion "Downloads" in admin.php finden. Wie also ist das zu deuten?

Besten Dank und Gruß,

Alex

Future

#1
ZitatWo ist die Funktion mxModuleAllowed() definiert (und was macht sie)?

Die Funktion prüft meines wissens nach, ob ein User für das jeweilige Modul berechtigt ist.
Sprich wenn du einen Link mit der Funktion prüfst, das Modul nur für Registrierte User freigegeben ist, wird ein Gast diesen Link gar nicht erst zu gesicht bekommen.
Die Funktion selber findest du glaube ich in der datei pmxroot/includes/mxapi.php und müsste eine true 1 bzw. false 0 zurückgeben.

Zitat* Wenn man im Admin-Menü eine Menüpunkt anklickt, was passiert dann?


Der Link von "Downloads" im Adminmenü ist bspw. "http://domain/admin.php?op=Downloads&panel=5", das bedeutet doch, dass die Datei "admin.php" im Stammverzeichnis mit den Parametern op=Downloads und panel=5 aufgerufen wird. Das Panel bezeichnet wohl den Addon-Reiter im Adminmenü und das op ist wohl eine Abkürzung für Operation. Doch leider kann ich keine Funktion "Downloads" in admin.php finden. Wie also ist das zu deuten?

Die Funktion Downloads gibt es in der admin.php auch nicht. Es ist die datei pmxroot/admin/case(links)(modules)/download.php

Also wenn du bsp. das Adminmenü der Downloads änder willst, musst du dir folgende Dateien vornehmen:

pmxroot/admin/case/case.download.php
pmxroot/admin/links/links.download.php
pmxroot/admin/modules/download.php

Hoffe ich hab jetzt alles richtig zusammenbekommen und das es verständlich ist

Alex__

Hi Future,

besten Dank für Deine Antwort und die Tipps.

Bei mir enthält der Ordner "pmxroot/admin/modules/" keine Datei download.php oder eine ähnlich klingende Datei.

Mich würde interessieren, an welcher Stelle in pmxroot/admin.php die entsprechende Datei aufruft -- irgendwo muss doch inkludiert oder aber aufgerufen werden.

Hintergrund ist, dass ich das Modul (Download) doppelt einsetzen will. Dazu habe ich bisher den Ordner Downloads in "pmxroot/modules/" kopiert und umbenannt in "UserDownload"; sodann über "pmxroot/admin/links/links.UserDownload.php" ins Admin-Menü eingebunden. Entsprechend habe ich auch die Datei "case.userdownload.php" erstellt. Klicke ich nun auf den Menüpunkt "UserDownload", dann erscheint die Fehlermeldung:

Diese Funktion ('UserDownload') ist nicht vorhanden.


Beste Grüße,

Alex

Future

Moin,

stimmt! Im Download Modul ist es so geregelt das im Ordner pmxroot/modules/Download ein Ordner admin ist mit einer Datei admin.php Da ist das Admin Menü drinne.

Die admin Datei selber wird in der case.downloads.php included

if (!defined("mxAdminFileLoaded")) die("Access Denied");

$mod = 'Downloads';

switch ($op) {
    case 'downloads': // Kompatibilitaet
    case $mod . '':
    case $mod . 'List':
    case $mod . 'DelNew':
    case $mod . 'AddCat':
    case $mod . 'AddSubCat':
    case $mod . 'AddData':
    case $mod . 'AddEditorial':
    case $mod . 'ModEditorial':
    case $mod . 'DownloadCheck':
    case $mod . 'Validate':
    case $mod . 'DelEditorial':
    case $mod . 'CleanVotes':
    case $mod . 'ListBroken':
    case $mod . 'DelBroken':
    case $mod . 'IgnoreBroken':
    case $mod . 'ListModRequests':
    case $mod . 'ChangeModRequests':
    case $mod . 'ChangeIgnoreRequests':
    case $mod . 'DelCat':
    case $mod . 'ModCat':
    case $mod . 'ModCatSave':
    case $mod . 'ModData':
    case $mod . 'ModDataSave':
    case $mod . 'DelData':
    case $mod . 'DelVote':
    case $mod . 'DelComment':
    case $mod . 'Transfer':
    case $mod . 'Config':
    case $mod . 'ConfigSave':
        mxSessionSetVar('panel', MX_ADMINPANEL_ADDON);
include('modules/' . $mod . '/admin/admin.php');
        break;
}


Du musst beim kopieren und umbennen der Datei auch in der case DAtei die variable $mod anpassen.

Mit einem einfach kopieren der Dateien ist dein vorhaben aber nicht machbar. Da gehört ein bisschen mehr zu.

Alex__

Hallo,

die Datei "pmxroot/admin/case/case.userdownload.php" sieht bei mir wie folgt aus:


<?php

if (!defined("mxAdminFileLoaded")) die("Access Denied");

$mod 'UserDownloads';

switch (
$op) {
    case 
'UserDownload'// Kompatibilitaet
    
case $mod '':
    case 
$mod 'List':
    case 
$mod 'DelNew':
    case 
$mod 'AddCat':
    case 
$mod 'AddSubCat':
    case 
$mod 'AddData':
    case 
$mod 'AddEditorial':
    case 
$mod 'ModEditorial':
    case 
$mod 'DownloadCheck':
    case 
$mod 'Validate':
    case 
$mod 'DelEditorial':
    case 
$mod 'CleanVotes':
    case 
$mod 'ListBroken':
    case 
$mod 'DelBroken':
    case 
$mod 'IgnoreBroken':
    case 
$mod 'ListModRequests':
    case 
$mod 'ChangeModRequests':
    case 
$mod 'ChangeIgnoreRequests':
    case 
$mod 'DelCat':
    case 
$mod 'ModCat':
    case 
$mod 'ModCatSave':
    case 
$mod 'ModData':
    case 
$mod 'ModDataSave':
    case 
$mod 'DelData':
    case 
$mod 'DelVote':
    case 
$mod 'DelComment':
    case 
$mod 'Transfer':
    case 
$mod 'Config':
    case 
$mod 'ConfigSave':
        
mxSessionSetVar('panel'MX_ADMINPANEL_ADDON);
include('modules/' $mod '/admin/admin.php');
        break;
}

?>



Diese Datei dient wohl als Weiche, d.h. von hier aus werden die restlichen Funktionen angestoßen. Die Frage ist jedoch wie?

In allen der Fälle wird die Datei /admin/admin.php des Moduls Download inkludiert. In dieser Datei ist auch keine Funktion "Downloads()" zu finden und dennoch erhalte ich die entsprechende Fehlermeldung. In der admin.php werde wiederum selbst drei Dateien inkludiert, auch hier Fehlanzeige was die Funktion "Downloads()" anbelangt.

Programmieren kann ich, doch leider blicke ich noch nicht durch das Zusammenspiel der einzelnen Komponenten durch.   :red:

Warum also erscheint die o.g. Fehlermeldung?
Durch welche Funktion (die es nicht zu geben scheint) wirde diese Meldung verursacht?


Beste Grüße,

Alex

Future

#5
Moin,

schau mal ganz unten in der Datei pmxroot/admin.php
Da wird die Fehlermeldung die du suchst generiert:

<?php    // Ausgabepuffer aktivieren um zu pr&#252;fen ob die $op-Option vorhanden ist
            // bei Problemen, die Zeilen mit *** dahinter, einfach auskommentieren ;)
            
ob_start();
            
$casedir dir("admin/case");
            while (
$func $casedir->read()) {
                if (
substr($func05) == "case.") {
                    include(
$casedir->path "/" $func);
                } 
            } 
            
closedir($casedir->handle); 
            
// Ausgabepuffer zwischenspeichern um zu pr&#252;fen
            // ob die $op-Option vorhanden ist und evtl.
            // eine Fehlermeldung zu generieren
            
$fileoutput trim(ob_get_clean());
            if (empty(
$fileoutput)) {
                
mxErrorScreen("Diese Funktion (" $op ") ist nicht vorhanden.<br />This function (" $op ") is not available.");
                exit;
            } 
            echo 
$fileoutput
            
// ende Ausgabepuffer zwischenspeichern
            
break;
?>


Und dann schau mal in der Datei pmxroot/modules/Downloads/admin/admin.php ganz unten

<?php
switch ($op) {
    case 
"downloads"// Kompatibilitaet
    
case "Downloads":
        
modAdminMain();
        break;
?>


So wie ich das sehe, rufst du durch die url www.deineseite.de/admin.php?op=Downloads die funktion modAdminMain(); aus der admin DAtei des Download Modules auf.
Und diese ist auch in der Datei pmxroot/modules/Downloads/admin/admin.php vorhanden

Alex__

Hi Future,

besten Dank für den Hinweis.  :thumbup:
Nun habe ich eine Spur, die verfolgen kann. Werde mich bei Erfolg oder Misserfolg noch einmal melden.

LG
Alex

Alex__

Hi Future,

einen Tippfehler ausgemerzt und eine zusätzlich Änderung später läuft das zweite Download-Modul.
Du warst mir eine große Hilfe - besten Dank!

Als nächstes versuche ich das Modul auf andere Tabellen zu verweisen, dann sollte die Verdoppelung der Module abgeschlossen sein. Ich hake das Thema noch nicht ab; sollten noch Fragen aufkommen, dann würde ich diese hier stellen.

LG
Alex

Future

Das hört sich doch mal gut an :)

Für weitere Fragen mach bitte einen neuen Thread auf. Das Thema hat ja eigentlic nur noch relativ wenig mit der übersprünglich gestellten Frage zu tun.
Ist übersichtlicher.

Alex__