2019. június 16., vasárnap

Gyorskeresés

PHPBB fórum privátüzenet értesítő email visszaállítása

Írta: | Kulcsszavak: PHP . PHPBB . Webfejlesztés . programozás . script . sql

[ ÚJ BEJEGYZÉS ]

Sajnos a PHPBB fejlesztői számomra ismeretlen indokból (Talán a GDPR fszság miatt?) úgy döntöttek, hogy a fórummotor ezentúl az újonnan regisztrált felhasználók számára alapértelmezett módon kikapcsolt állapotban hagyja a privát üzenetek (továbbiakban PM-ek) emailes levélértesítésére szolgáló jelölő négyzetet.

Tehát, ha te is üzemeltetsz PHP Bulletin Board fórumrendszert, az újonnan regisztrált tagok alapértelmezetten nem kapnak email értesítést, arról, hogy privát üzenetük érkezett. Régebben ez alapértelmezetten be volt kapcsolva. Ha egy user nem akart erről emailt kapni, volt lehetősége kikapcsolni.

Mit kell tenni annak érdekében, hogy megmókoljuk ezt a dolgot?
Lépjünk be a fórum scripjeinek könyvtárába majd az ebben található "Includes" mappába. Nyissuk meg szerkesztésre a functions_user.php-t.

A 364. sorban keressük meg ezt:
// Use default notifications settings if notifications_data is not set
if ($notifications_data === null)
{
$notifications_data = array(
array(
'item_type' => 'notification.type.post',
'method' => 'notification.method.email',
),
array(
'item_type' => 'notification.type.topic',
'method' => 'notification.method.email',
),
);
}

Itt ahogy az angol szöveg is jelzi, beállíthatjuk a default, azaz alapértelmezett értékeket. Ezt kell a következőre módosítani:

if ($notifications_data === null)
{
$notifications_data = array(
array(
'item_type' => 'notification.type.post',
'method' => 'notification.method.email',
),
array(
'item_type' => 'notification.type.topic',
'method' => 'notification.method.email',
),
array(
'item_type' => 'notification.type.pm',
'method' => 'notification.method.email',
),
);
}

Azaz annyi történt, hogy egy 'item_type' => 'notification.type.pm', résszel bővítettük a kódot.

Mit is csinál ez a kód?
A PHPBB rendszerünkhöz tartozik egy adatbázis, amiben táblák találhatók, defaultban phpbb_táblanév előtagú táblákkal. De az előtag meg is változtatható. Ha te megváltoztattad, akkor erre figyelj oda. Én most a default szerint csinálom ezt a leírást.
A kód a phpbb_user_notifications táblában az újonnan regisztrált userek ID-jével az alábbihoz hasonló sorokat vesz fel:

[U]Item_type Item_ID User_ID Method Notify[/U]
notification.type.pm 0 1 notification.method.email 1
notification.type.pm 0 2 notification.method.email 1
notification.type.pm 0 3 notification.method.email 1
... ... ... .... ....

Vannak még más sorok, más Item Type-k, pl a posztokhoz trartozó email notification method stb is a táblában, de ezekkel most ezen írás keretei között nem foglalkozok.
Ha a fenti kód nincs a functions_user.php fájlban, akkor ezek nem jönnek létre, tehát nem az van, hogy létezik, csak a Notify érték 0 lesz, hanem egyszerűen nincs az user ID-jéhez kapcsolódóan ilyen sor. Természetesen, ha már módosítottuk a fájlt, akkor is csak a módosítás után regisztrált felhasználóknak jön létre, akik enélkül regisztráltak, azoknak nem. Tehát ők, továbbra sem értesülnek emailben a PM-jeikről. Ez sajnos látogatottság kiesést is jelent főleg olyan fórumokon, ahol az Userek sokat privátoznak egymással.

Éppen ezért ha ez a szám jelentős, akkor SQL utasításokkal, manuálisan kell felvinni ezeket a sorokat a táblába, hogy a már létező usereknek bekapcsoljuk az email értesítést.

A parancs a következő:
INSERT INTO `phpbb_user_notifications` (`item_type`, `item_id`, `user_id`, `method`, `notify`) VALUES ('notification.type.pm', '0', '107199', 'notification.method.email', '1');

Ezt kell lefuttatnunk USER ID-nként, bármilyen SQL parancsértelmezőben, ami a tárhelyünk szerverén elérhető számunkra. Én a PHPMYADMIN értelmezőjét használtam.

A fenti példában most a 107199-es ID számú USER-nek kapcsoltam be, a PM-ek email értesítését. De mit tehetünk, ha 1000 vagy több ilyen sort kell bevinni.
Ekkor segít nekünk a jóöreg MS-Excel. Ahol egy húzásra lehetőség van rá, hogy a számokat az USER ID résznél egyel növeljük.

Én így csináltam ezt meg:

A1-18 oszlopba beírtam az SQL parancs elejét. B1-18 moszlopba az USER ID-ket többszöröztem. Egy egyszerű egeres lehúzásos művelettel mindig az előző cella értékéhez ad eggyel többet. Így nagyon gyorsan több ezer sort tudunk készíteni, anélkül, hogy nekünk kéne kézzel egyesével beirogatni. A C1-18 oszlopba, pedig az SQL parancs végét írtam be. A D1-18 oszlopban, pedig egyesítettem az A, B, C oszlopok értékeit egy függvénnyel. A neve CONCATENATE. A képen látható, hogyan kell bevinni. Természetesen minden új sornál a megfelelő sorszámra kell hivatkoznunk, tehát pl a 3. sorban a D3 cella értékek =CONCATENATE(A3;B3;C3) s így tovább.

Innen már egyenes volt az út, a PHPMYADMIN nevű MySQL szerkesztő program SQL parancsértelmezőjébe bemásolni a sorokat és máris bekapcsolódott azon usereknél is az email értesítés, akiknél eddig nem volt.

Természetesen regisztrációnál jelezzétek a tagoknak ezt, vagy a felhsználási feltételekbe írjátok bele, hogy egyetértenek ezzel, ez a minimum.

Hozzászólások

(#1) bambano


bambano
(Jómunkásember)

"Természetesen regisztrációnál jelezzétek a tagoknak ezt, vagy a felhsználási feltételekbe írjátok bele, hogy egyetértenek ezzel, ez a minimum.": ez explicit sérti a gdpr-t, tehát ha ez volt a gond, akkor ezt ne csináld.

másrészt az mekkora rotfl már, hogy excelben szerkesztesz sql parancsot...

lezso6 szerint a user: rossz számtech karmája van | @netik: There is no Internet of Things. There are only many unpatched, vulnerable small computers on the Internet.

(#2) monguz válasza bambano (#1) üzenetére


monguz
(őstag)

"..másrészt az mekkora rotfl már, hogy excelben szerkesztesz sql parancsot..." Az a rotfl, hogy ezt szóváteszed...

(#3) UnA válasza monguz (#2) üzenetére


UnA
(Korrektor)

Az Excel szerintem sem a legjobb ötlet, nekem hamarabb jutna eszembe SQL-ből generálni. ;)

(#4) bambano válasza monguz (#2) üzenetére


bambano
(Jómunkásember)

egészségedre. a röhögés javítja a közérzetet és tisztítja a padlót.
a posztjának fele jogsértő, a másik fele komoly tudáshiányra utal. miért ne tenném szóvá?

aki annyit se tud, hogy sql-ben be lehet szúrni egy select eredményét, az ne ossza az észt, mert neki sincs feleslegben. ez az olvasók érdeke.

lezso6 szerint a user: rossz számtech karmája van | @netik: There is no Internet of Things. There are only many unpatched, vulnerable small computers on the Internet.

(#5) btz válasza bambano (#4) üzenetére


btz
(PH! addikt)
LOGOUT blog (1)

Nem osztottam az észt, nem tudom milyen ész osztásról beszélsz? Leírtam, hogyan oldottam meg a problémámat, hátha másnak is hasznára lesz vagy épp magamnak.

Nem tudom melyik posztjaimnak a fele jogsértő? Szerintem összekeversz valakivel.

Nem tudom milyen indokból, csak feltételeztem, hogy a GDPR miatt változtattak ezen a PhpBB készítői, de ha a ezelőtt évekig senkinek nem volt probléma, hogy alapból kap email értesítést a privát üzeneteiről, akkor ezután sem lesz. A lehetősége, továbbra is megvan, hogy kikapcsolja. Akinek ki van kapcsolva, azért mert szándékosan kapcsolta ki, annak a phpbb_user_notifications táblában notification.method.email sora létezik és a Notify értéke 0. Ezen nem lett változtatva. Aki regisztrált, az elfogadta egy jelölő négyzetben, hogy az email címét tárolom és kaphat levelet az oldaltól. Innentől kezdve ennek tudatában regisztrált. Szerintem innentől kezdve nincs értelme semilyen jogsértésről beszélni.

Nem mondtam soha senkinek, hogy lexikális a tudásom SQL-ből, ha neked akkora nagy a tudásod, akkor azt írd le, hogy te hogy oldottad volna meg azt a dolgot az Exceles módszer nélkül, annak van érdemi haszna egy fórumon, annak talán én is hasznát veszem és mások is. Én így oldottam meg, ennyire tellett, a célnak megfelelt, pár száz sor létrehozásához elég volt. Aki pro-nak érzi magát SQL-ből az írja le a megoldást. Tudom, hogy az Excelezés nem elegáns módszer, de a célnak megfelelt.

ⓑⓣⓩ

(#6) btz válasza UnA (#3) üzenetére


btz
(PH! addikt)
LOGOUT blog (1)

Mit és hogyan. Írd le a pontos menetét.
Teljesen tisztában vagyok vele, hogy ez az Exceles módszer nem egy esztétikus dolog de így tudtam csak megoldani. Én sem így akartam de nem vagyok SQL guru és a Google sem dobott jó megoldást (persze lehet, hogy nem is jól kerestem)

ⓑⓣⓩ

(#7) bambano válasza btz (#5) üzenetére


bambano
(Jómunkásember)

"Nem tudom milyen indokból, csak feltételeztem, hogy a GDPR miatt változtattak ezen a PhpBB készítői, de ha a ezelőtt évekig senkinek nem volt probléma, hogy alapból kap email értesítést a privát üzeneteiről, akkor ezután sem lesz.": tehát ha se az indokot, se a gdpr-t nem ismered, akkor lehet, jobb módszer lenne hinni olyannak, aki legalább a gdpr-t ismeri?

az, hogy egy levélküldést bekapcsol valaki, majd utólag értesíti az email cím tulajdonosát, jogsértő.

"Nem tudom melyik posztjaimnak a fele jogsértő?": azt tudod, mi a különbség az egyes és a többes szám között? tehát ha azt írom, a posztod, akkor az egyes szám. ebből konkrétan következik, hogy arról a posztról beszélek, amelyiknek a topicjában írok. meg az is, hogy nem megy át többes számba, tehát nem posztjaid, csak posztod. a posztod arról szól, hogy hogyan kapcsoljon be valaki egy törvénysértő beállítást.

sql parancsot szerkeszteni excelben meg olyan szintű bénázás, hogy szerintem szégyellned kellene.

miután a posztod legális hasznosság-tartalma nagyjából nulla, miért nem törlöd ki az egészet?

lezso6 szerint a user: rossz számtech karmája van | @netik: There is no Internet of Things. There are only many unpatched, vulnerable small computers on the Internet.

(#8) btz válasza monguz (#2) üzenetére


btz
(PH! addikt)
LOGOUT blog (1)

Amióta "ismerem" mindenkivel csak kötekszik, nem tudom neki mekkora a tudása SQL-ből, de ha akkora nagy, akkor nyugodtan fitogtassa. Nyugodtan tegye szóvá, de ha ő akkora pro, akkor már le is írhatta volna, hogy hogyan lehet megoldani a dolgot SQL only módon, annak van építő hatása is, így csak natúr fikázás.

ⓑⓣⓩ

(#9) btz válasza bambano (#7) üzenetére


btz
(PH! addikt)
LOGOUT blog (1)

az, hogy egy levélküldést bekapcsol valaki, majd utólag értesíti az email cím tulajdonosát, jogsértő

Regisztrációkor (tehát nem utólag) ők is tájékoztatva voltak arról, hogy az oldaltól email értesítések érkezhetnek a postafiókjukba, ezt elfogadták, akkor is ha a hiba miatt nem lett nekik bekapcsolva az opció és nem kaptak levelet. A kimenő levélben pedig ott a link a felhasználói vezérlő puljukhoz, ahol mindent be tudnak állítani.

tehát ha azt írom, a posztod

Bocs ezt tényleg elnéztem, úgy olvastam, hogy posztjaim, többes számban.

miután a posztod legális hasznosság-tartalma nagyjából nulla, miért nem törlöd ki az egészet?

Mert már leírtam, hogy nem illegális. Ezt csak te állítod, hogy az. Másnak hasznos lehet és nekem is, ha esetleg egy frissítés után visszaálna a gyári állapot, 1-2 év mulva nem szeretném megint 6 helyről előkaparni, hogyan is kell változtatni a kódon.

sql parancsot szerkeszteni excelben meg olyan szintű bénázás, hogy szerintem szégyellned kellene.

Nem a szakmám része, nem foglalkozok napiszinten vele, nem tudom miért kellene naprakész tudásomnak lenni belőle?
A problémát megoldoztta? Meg. Ennyi. Persze elismerem hogy gány módszer, de ez van.

De még mindig nem látom leírva, hogyan lehet több száz vagy ezer sor SQL parancsot bevinni egyszerűen, úgy hogy csak az user_id mező értékei változnak.

[ Szerkesztve ]

ⓑⓣⓩ

(#10) bambano válasza btz (#8) üzenetére


bambano
(Jómunkásember)

megkérdezhetem, hogy a #5-ben hogyan válaszoltál a #4-re, ha nem olvastad el?

hint: a #4-ben leírtam, hogy mit kellett volna tenned. tehát az építő hatás megvolt.

lezso6 szerint a user: rossz számtech karmája van | @netik: There is no Internet of Things. There are only many unpatched, vulnerable small computers on the Internet.

További hozzászólások megtekintése...
Copyright © 2000-2019 PROHARDVER Informatikai Kft.