Drupal felhasználó léptetés

Fórumok

Sziasztok!

Adott egy összetett feladat amivel kissé megragadtam, vagy beragadtam a saját elképzelésembe, így tőletek mint külső, jártas szemlélőktől kérek segítséget.

Létrehoztam 3 különböző user role-t: - mindhárom szinten más-más jogosultságokkal rendelkezik az oda tartozó user.
- kezdő
- haladó
- szakértő

(administrator + admin)
(Ill. ezen felül van még a regisztrált szint)

A feladat, hogy a felhasználókat egy bizonyos tevékenység (havi vásárlások) számához viszonyítva léptessük be/ki a szintekből. Ha kiesik egy szintből, legyen újra "regisztrált" felhasználó.

A kritériumok:
a.1:- 5 vásárlás esetén kezdő szintre léptetés --> 1 hónapos időtartamra.
a.2:- 10 vásárlás esetén haladó szintre léptetés --> 1 hónapos időtartamra.
a.3:- 15 vásárlás esetén szakértő szintre léptetés --> 1 hónapos időtartamra.

b.1: - Ezen dinamikus szint léptetések mellett a felhasználónak lehetősége legyen "SZINT" (kezdő|haladó|szakértő) vásárlásra is, ami szintén egy hónapra szól.

Az A+B lehetőségek működjenek párhuzamosan egymás mellett.

Ill. figyelnem kell azt is, hogy amennyiben az a lehetőségek valamelyikében elérte az adott szintet, a szint elérése óta mennyit vásárolt a szint lejárásának végéig, és ha ugyanannyit, mint az adott szint megkövetel, akkor megtartani azon a szinten, ha többet akkor magasabb szinte léptetni.
Illetve ha az 1 hónap alatt többet vásárolt szintén léptesse egy szinttel feljebb és a lejáratát ettől a szint lépéstől figyelje.

Attól tartok logikai ellentmondások is lehetnek a feladatban... Hiszen ha "szintet" vásárolt, nem kell a vásárlások száma szerint léptetni (De figyelni kell a számát 1 hónapig, hiszen ha lejár a "szint" valahova be kell sorolni (regisztrál|kezdő|haladó|szakértő).

Segítsetek kérlek tisztábban látni.

Üdv.:
V007

Hozzászólások

A szintjét mindenképpen vásárolja. Vagy egyszerre, soron kívül, vagy az előző havi vásárlásaival.
Azt kell csak figyelni, mikor jár le az egy hónap, és akkor emelni a pallost.

Technikailag mi lenne erre a legegyszerűbb módszer?

Én erre gondoltam:
1. egy custom field bevezetése ahol növelem a vásárlások darab számát. -> rules
2. egy custom field ahol tárolom az időpontot amikor elért egy szintet/vásárolt soron kívül egyet. -> rules
2.a ha lejárt a 30 nap, visszaléptetem egy 0. szintre -> rules.
2.b mivel lejárt az adott hónap az 1. pont beli mező értékét kinullázom.

3. egy rules bevezetése ami a megfelelő szintbe lépteti a felhasználót.
4. 2. pont

De ez az eset =(ha így jó) még mindig nem kezeli azt a szituációt, hogy ha egy felhasználó a megszerzett szint érvényességi ideje alatt tovább vásárol, de nem ér el új szintet. Ekkor a 2.b. pont szerint kinullázódnak a pontjai.

Igen: ha nem ér el újra annyi vásárlást mint amennyi kell, hogy szinten maradjon vagy feljebb lépjen akkor regisztrált szintre kell lépnie.
De tegyük fel, hogy jelenleg haladó szinten van 12 ponttal. Letelt az egy hónap, de a 12 pontból csak 10-et kellene elvennem hiszen 10 ponttól már haladó és 15-től szakértő, tehát a köztes pontokat nem kell elvennem.

Ha Dátum => mai dátum
   Ha Vásárlás > 5  Akkor Szint = kezdő
   Ha Vásárlás > 10 Akkor Szint = haladó
   Ha Vásárlás > 15 Akkor Szint = szakértő
   Dátum = Mai Dátum + 1 hónap
EndHa

Ha vásárol
   Szint = Vásárolt Szint
   Dátum = Mai Dátum + 1 hónap
EndHa

Csak amiket írtál. :)
Azzal is érdemes foglalkozni, hogy ha szintet vásárol, ne kerüljön alacsonyabb szintre, mint amit a vásárlásaival amúgy is "kiérdemelt".

A vastagon szedett rész kimaradt az első feltételből

Ha Dátum => mai dátum
   Ha Vásárlás <= 5 Akkor Szint = Regisztrált
   Ha Vásárlás > 5  Akkor Szint = kezdő
   Ha Vásárlás > 10 Akkor Szint = haladó
   Ha Vásárlás > 15 Akkor Szint = szakértő
   Dátum = Mai Dátum + 1 hónap
EndHa

Ha vásárol
   Szint = Vásárolt Szint
   Dátum = Mai Dátum + 1 hónap
EndHa

"Vásárlás" az utolsó hónapban történt vásárlásainak száma

Nem nullázódik ki soha semmi.
Mindig csak az utolsó hónap vásárlásait nézed.
Ha vásárolt, annak megfelelően kap "rangot", ha nem, akkor visszalép.
Mindegy, hogy régebben mennyit vásárolt. A régi vásárlások ettől még lekérdezhetőek maradnak, ha szükség lenne rásjuk valamiért.

felmerülhet az a lehetőség, hogy a felfelé léptetéseket mindig on-air intézed a custom szabályaiddal a vásárlások alatt/után, míg a visszaléptetéseket elég csak napi egyszer vagy mondjuk óránként intéztetned. erre egy külön egyedi szabály ha adott időközönként lefut, az elég. a napi/óránkénti lefutást megoldhatod mondjuk az elysia_cron-nal (habár vannak bajok néha a modullal).

Van néhány kérdésem:
- A felhasználók fel léptetését egy rules-szal nem lehet megoldani ugye?
--> Tehát:
--- Minden szint léptetéshez külön-külön rule-t kell csinálnom.
--- Minden olyan esetre ahol soron kívül megveszi valaki a szintet külön rule-t kell csinálnom.

- Hogyan tudnám a szint elérésének dátumát elmenteni? Egy date típusú custom filed rules alóli módosításával?
- Ennek a custom fieldnek a leszürkítését, azonban megjelenítését a felhasználó saját adai alatt meg tudom oldani?

Jelenleg működik:
1. külön rule: - Tudom számolni a vásárlások számát
2. külön rule: - Ehhez viszonyítva tudom másik role-ba tenni az adott usert. Ezt mind a fizetési folyamat befejezése után.

# UPDATE:
Közben kiderült, hogy a soron kívüli szint váltást 12 fél időtartamra lehessen megvásárolni, ami kicsit túlbonyolítja a feladatot:
Kezdő szint 1 hónapra;
Kezdő szint 3 hónapra;
Kezdő szint 6 hónapra;
Kezdő szint 12 hónapra;

Haladó szint 1 hónapra;
Haladó szint 3 hónapra;
Haladó szint 6 hónapra;
Haladó szint 12 hónapra;

Szakértő szint 1 hónapra;
Szakértő szint 3 hónapra;
Szakértő szint 6 hónapra;
Szakértő szint 12 hónapra;

a dátumot figyelve, ha az utolsó szintlépés ideje egy hónapnál több, akkor visszalépteted eggyel és módosítod a dátumot. és ezt óránként hívogatod, s amikor észlel valakit, akkor lefokozza. írsz hozzá egy külön rule-t vagy bármit, és azt hívogatod elysiával.

nekem annak tűnik. viszont: azt tudod ugye, hogy a cron igazából csak akkor fut le (és szerintem az elysiánál is így van), ha az oldalt "időközben" ténylegesen látogatják is. ugyanis a cron tárolja az utolsó futás idejét, és ha egy random betöltődéskor azt észleli az oldalad, hogy futnia kellett volna, akkor fog futni. ergo ha te ténylegesen naponta, percenként stb. akarod egy meghatározott időben futtatni ezt, akkor érdemesebb ezt a funkciót kikapcsolni az elysiában (is), és a szervereden belőni egy szimpla kis szkriptet, ami majd meghívogatja naponta, percenként stb. a drupal/elysia cront (az elysiával ugyebár nem csak az a lényeges, hogy állítgatni tudod a configurációs oldalán, hogy mikor és mi fusson, hanem lényeges az is, hogy a szétszedett cron jobokkal jókora terhelést veszel le a szerveredről).

Én nem venném külön a lefokozást és az előléptetést.
Ha a Dátum lekérdezésekor kiderül, hogy eljött az idő a rang felülvizsgálatára, akkor az utolsó havi vásárlásai alapján betenném a neki megfelelő csoportba. Tök mindegy, hogy előtte magasabb, vagy alacsonyabb "rangban" volt-e, mindenki a helyére kerül.
Ezt szerintem nem kell óránként futtatni, elég naponta egyszer a teljes user adatbázisra, mondjuk hajnali 4-kor ezt a kódot.