Userpunkte & Module freigeben

Begonnen von DasZ, 02 November 2005, 18:35:30

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

DasZ

Moin moin.

(Ja ich hab die Suche benutzt  ;))

Also das Problem:
Ich will meine Downloads nur für User mit Userpunkten zugänglich machen.
Quasi: Hast du Userpunkte siehst du das Modul, ansonsten nicht, bzw.'ne Seite wo steht, dass man Userpunkte für die Azeige dieses Moduls braucht.

Idee:
User mit Userpunkten werden automatisch in eine andere Benutzergruppe verschoben, diese Benutzergruppe sieht das Downloadmodul.
User ohne Punkte bleiben halt in der (Standard)benutzergruppe und sehen nur den Hinweis.

Was ich schon hab:
Im Prinzip alles, bis auf diese Wenn-Dann anweisung zum automatischen Verschieben des Users in eine der Gruppen.

Hat jemand'ne Idee wie sich das realisieren lässt, bzw. hat's schon realisiert und is gewillt mir zu helfen?  :)

Schonma danke vorneweg.


Zchen


PS: CMS is das vkpMx 2.1a und ich grübel schon ewig lange über dem Problemchen

JoergK

Hi Zchen ;)

Wenn ich mich jetzt nicht all zu sehr täusche, werden die Userpunkte nicht durch eine getätigte Aktion (für die's Punkte gibt) als solches erfasst, sondern nur dann, wenn jemand (s)ein Userprofil aufruft, dynamisch generiert. Somit kann der User auch nicht sofort nach getätigter (punktebewerteter) Aktion in eine andere Usergruppe verschoben werden. Dies würde erst mit dem Aufrufen seines Userprofils passieren (können).

Wenn Du damit leben kannst/willst, dann ist die Datei modules/Your_Account/userpoints.php Dein Ziel.
Such darin mal die Zeile
if($userpoints>1)  $hasuserpoints = "<b>".$userpoints."</b> ". _YA_HASPOINTS;
Nach dieser Zeile bauste das Verschieben in die andere Usergruppe ein.

Wenn Du den Link zum Download in nem HTML-Block hast, haste eh schlechte Karten, dann dort werden keine PHP-Codes ausgewertet. Bleiben Dir also "nur" die Blöcke Modules_one, -_two & -_three.

Im gewünschten Block (Modules_one, -_two oder -_three) such mal nach der Zeile
$opt_u[strtolower($m_title2)] = "<tr $actionMenu\"><td title=\"".$m_title2."\"><span class=\"boxcontent\">".$img." <a href=\"modules.php?name=".$m_title."\">".$m_title3."</a></span></td></tr>\n";
Diese Zeile mußte nun in Deine Abfrage "einkapseln", ob der aktuelle User Punkte hat.


Gruss,
JoergK
Gruß,
Jörg


Nobody is perfect ... so don't call me Nobody

DasZ

hui ging ja wieder fix  :thumbup:

also das mit der userpoints.php werd ich ma probieren, muss mir nur noch den entsprechenden befehl irgendwoher beschaffen... der rest mit den blöcken is ja im prinzip überflüssig, weil man ja im modulmenü festlegen kann welche gruppe welches menü sieht....

danke für die megafixe hilfe =)

wenn ich weiterkomme meld ich mich wieder... wenn nich, dann auch ^^




Zchen

DasZ

gut..... ich stoße an meine grenzen..... hab mir 2h die finger wund gesucht, find aber nich den teil in dem der user bei registrierung in die gruppe eingefügt wird....


danach müsste das ganze doch eigentlich kein problem mehr sein, auch mit meinem begrenzten wissen....

quasi:

if($userpoints>1) move user to group downloadberechtigte



:-\ :D verzweiflung :D :-\



Zchen

JoergK

Zitatder rest mit den blöcken is ja im prinzip überflüssig, weil man ja im modulmenü festlegen kann welche gruppe welches menü sieht....
stimmt ...   ;)

So, dann also mal zum Gruppenschieben  ;D
Zunächst mußte die neue Gruppe anlegen. Dann guckst Du nach, welche ID die "normale" und welche die neue Usergruppe haben (Gruppe editieren -> modifizieren - oder halt in der DB in der TABLE {prefix}_groups_access).

Um sicher zu stellen, dass nur die "richtigen" User in die neue Gruppe verschoben werden, muss noch die aktuelle Gruppe des Users ermittelt werden. Dazu such in modules/Your_Account/userpoints.php nach den Zeilen:
# uid ermitteln
if (empty($uid)) {
 $resultx=sql_query("select uid from ${user_prefix}_users where uname='$uname'");
 list($uid) = sql_fetch_row($resultx);
}


und änder sie so ab:
# uid und usergruppe ermitteln
if (empty($uid)) {
 $resultx=sql_query("select uid, user_ingroup from ${user_prefix}_users where uname='$uname'");
 list($uid, $user_ingroup) = sql_fetch_row($resultx);
}


Nu fügste in modules/Your_Account/userpoints.php unterhalb der bereits genannten Zeile:
if($userpoints>1)  $hasuserpoints = "<b>".$userpoints."</b> ". _YA_HASPOINTS;

das ein:
if ($user_ingroup == X && $userpoints >= 1){
 sql_query("update ${user_prefix}_users set user_ingroup = Y where uid = '$uid' ");
}

Das X durch die ID der alten Gruppe ersetzen.
Das Y durch die ID der neuen Gruppe ersetzen.

Und fertig is  ;D

Das ganze is allerdings ohne Gewähr, da ich's nicht getestet habe.  ;)


Gruss,
JoergK
Gruß,
Jörg


Nobody is perfect ... so don't call me Nobody

DasZ

schwere begeisterung.... es funktioniert... man muss sich nicht mal neu einloggen, einfach ein modul klicken und zack sieht man die module.... geilo... ich dank dir 5 mio mal.....  ;D ;D ;D ;D


aber ein kleines problemchen bleibt leider.... man kommt zwar in die neue gruppe rein, aber wenn die userpunkte unter 1... also auf null fallen wird man nicht automatisch in die vorhergehende benutzergruppe zurückbefördert... hab's damit probiert den selben befehl darunter nochmal einzufügen und hab ihn so modifiziert:
if ($user_ingroup == 2 && $userpoints < 1){
             sql_query("update ${user_prefix}_users set user_ingroup = 1 where uid = '$uid' ");
                               }

aber das gab nicht das ergebnis was ich gern gehabt hätte... was ich im prinzip nicht ganz verstehe... wär das möglich, dass man da'n else befehl draus machen muss? also:

if ($user_ingroup == 1 && $userpoints > 1){
             sql_query("update ${user_prefix}_users set user_ingroup = 2 where uid = '$uid' ");
                               }
else{
if ($user_ingroup == 2 && $userpoints < 1){
             sql_query("update ${user_prefix}_users set user_ingroup = 1 where uid = '$uid' ");
                               }


denn wenn der if zweig false wird, wegen der falschen benutzergruppe (man ist ja dann schon in benutzergruppe 2, sollte es doch auf den elsezweig wechseln und ihn bei $userpoints < 1 doch wieder in benutzergruppe 1 verschieben, oder?

grübel..... vor 10 jahren mal basic am c64 gemacht zu haben zahlt sich aus.... ich wusste es..... :D





Zchen

JoergK

Zitatgeilo... ich dank dir 5 mio mal.....  ;D ;D ;D ;D
Einmal reicht auch  ;)

Zitataber ein kleines problemchen bleibt leider.... man kommt zwar in die neue gruppe rein, aber wenn die userpunkte unter 1... also auf null fallen wird man nicht automatisch in die vorhergehende benutzergruppe zurückbefördert... hab's damit probiert den selben befehl darunter nochmal einzufügen und hab ihn so modifiziert:
if ($user_ingroup == 2 && $userpoints < 1){
 sql_query("update ${user_prefix}_users set user_ingroup = 1 where uid = '$uid' ");
}

aber das gab nicht das ergebnis was ich gern gehabt hätte... was ich im prinzip nicht ganz verstehe...
Biste sicher, dass die Punkte tatsächlich wieder 0 sind? Weil dann sollte Deine zusätzliche Zeile funzen.

Zitatwär das möglich, dass man da'n else befehl draus machen muss?
Nicht wirklich  ;)

Zitatif ($user_ingroup == 1 && $userpoints > 1){
 sql_query("update ${user_prefix}_users set user_ingroup = 2 where uid = '$uid' ");
}
else{
 if ($user_ingroup == 2 && $userpoints < 1){
   sql_query("update ${user_prefix}_users set user_ingroup = 1 where uid = '$uid' ");
 }
Ist fast richtig... hier bekämst Du nen Error, weil die Klammer der else-Bedingung nicht geschlossen ist.
Desweiteren ist bei Dir noch nen kleiner Denkfehler (?) drin: Du fragst auf >1 ab, um den User zu "befördern" und auf <1 um ihn wieder zu "degradieren". Wenn er also genau 1 Punkt hat, passiert beides mal nix. Wenn er noch normaler User ist, wird er nicht zum Downloaduser und andersrum wenn er Downloaduser ist und nur noch einen Punkt hat, passiert auch nix.

Wenn, dann sollte es so aussehen:
if ($user_ingroup == 1 && $userpoints >= 1){ // Abfrage auf Normaluser und mindestens 1 Punkt
 sql_query("update ${user_prefix}_users set user_ingroup = 2 where uid = '$uid' ");
}elseif ($user_ingroup == 2 && $userpoints == 0){ // Abfrage auf Downloaduser und 0 Punkte
 sql_query("update ${user_prefix}_users set user_ingroup = 1 where uid = '$uid' ");
}

Oder halt auf >1 zum "Befördern" abfragen, dann aber auf <2 zum "Degradieren"  ;)

Gruss,
JoergK
Gruß,
Jörg


Nobody is perfect ... so don't call me Nobody

DasZ

hui... gut, also 2 mal hat noch irgendwo'ne } gefehlt, aber danach lief's tadellos. dank dir nochma, du bist'n schatz =)



glücklich rausstolper





Zchen

DasZ

und wieder reinstolpert....gg

also das wäre jetzt hier sozusagen der i-punkt auf dem ganzen und ich weiß nicht, ob man das umsetzen kann... wenn nicht auch nich so schlimm:

wenn sich meine user einlogen kommen sie automatisch zu den news, also "modules.php?name=News"
kann man die abfrage der userpunkte die im Y_A modul passiert irgendwie versteckt dort einbauen, damit ihre userpunkte immer beim betreten der community aktualisiert werden?

bis denne dann


Zchen

JoergK

Zitatkann man die abfrage der userpunkte die im Y_A modul passiert irgendwie versteckt dort einbauen, damit ihre userpunkte immer beim betreten der community aktualisiert werden?

Ohne Garantie (weil ungetestet) dass es funzt, kannste mal folgendes versuchen:

Schnapp Dir die Datei modules/News/index.php und such mal am Ende nach
   default:
   theindex($new_topic, $pagenum);
   break;


Das bauste Dir dann so um:
   default:
   theindex($new_topic, $pagenum);
   if(mxIsUser() && $useuserpoints) {
     $uinfo = mxGetUserData();
     if (@file_exists("modules/Your_Account/userpoints.php")){
       $uname = $uinfo['uname'];
       include_once("modules/Your_Account/userpoints.php");
     }
   }
   break;





Für alle Mitleser, denen es wieder entfallen ist, nochmal zur Erinnerung:
Wir reden hier über Änderungen/Anpassungen für vkpMx2.1.a. In der Vorgängerversion 2.1 sowie den aktuelleren Versionen von pragmaMx (0.1.5, 0.1.6) sollte es aber genauso funktionieren.

Bei pragmaMx 0.1.5/0.1.6 würde ich es allerdings nicht in einem speziellen Modul (wie hier dem News-Modul) sondern in /includes/mx_system.php in der function mx_sys_userlogin am Ende zwischen session_write_close(); und Header("Location: ".$nexturl.""); die(); einbauen. Somit wäre die Nutzung einer Modulfreigabe, abhängig von Userpunkten, universell nutzbar, egal welches Modul man als Startseite gewählt hat.




Gruss,
JoergK
Gruß,
Jörg


Nobody is perfect ... so don't call me Nobody

NicoleWendt

Hallo JoergK!

Du scheinst hier ja einer der Cracks zu sein  ;D

Kannst Du mir die "Funktion - Module je nach Userpoints anzeigen" nochmal für die aktuelle Pragma-Version zusammenfassen?

Ich habe leider NULL PHP-Kenntnisse, daher möchte ich jetzt nicht wie wild einfach drauflos ändern ;)

Ziel1 soll folgendes sein:

Modul "Downloads" ist derzeit nur in der Gruppe Platin-Member verfügbar.
Es soll aber auch bei "User" ab einer bestimmten Punktezahl verfügbar werden......

Ziel2 soll sein:

Ab einer gewissen Punktezahl wird der User in die Gruppe Platin-Member verschoben.

Vielen Dank!
Nicole
Nicole

[Nuestros sueños, nuestros anhelos y nuestras esperanzas de muchos colores, hay que aceptarlos seriamente y como cosas importantes. Quien los reprima, oprima lo mejor dentro de si mismo y se haga un ser humano vacío.]