A Drupal hatosban mutatkoztak be a Trigger és Action modulok (csak a Trigger modult kell bekapcsolnunk az Action a beépült a rendszerbe). A két modul segítségével könnyedén alakíthatunk ki munkameneteket a Drupal rendszerünkben. A triggerek különböző események amelyek bekövetkeztekor valamilyen akciót vagy akciókat hajthatunk végre. A tanfolyamaimon mintapélda szokott lenni, hogy a névtelen felhasználónak engedünk hírt beküldeni. Én ilyenkor azt szoktam csinálni, hogy létrehozok egy új tartalom típust felhasználói hír néven. Ennél a tartalom típusnál beállítom, hogy alapértelmezetten ne legyen közzétéve. Ezután már csak a jogosultságoknál kell jogot adni a névtelen felhasználónak a felhasználói hír létrehozására. Nem kell félnünk, mert a beküldött hírek nem kerülnek publikálásra, hisz csak a tartalmak adminisztrációja joggal rendelkező felhasználónak van ilyen beállítási lehetőség a tartalom beküldő űrlapon. Ez a megoldás már működőképes de igazából használhatatlan. Egyrészt nekünk árgus szemmel figyelni kell, hogy jött-e új tartalom, másrészt a felhasználónak a beküldés után egy hozzáférés megtagadva üzenet jelenik meg. Az üzenet nem véletlenül jelenik meg, hisz beküldés után a beküldött tartalmat mutatná a rendszer. A baj csak az, hogy az éppen beküldött tartalom nincs közzétéve, ezért az nem látható. Mindkét problémára megoldást tud nyújtani a két fent nevezett modul. Először létrehozunk egy akciót, ami levelet küld nekünk. Másodszor létrehozunk egy köszönő oldalt, majd egy olyan akciót, ami erre az oldalra irányít át. Ezután a két akciót hozzákapcsoljuk a tartalom beküldése eseményhez/triggerhez. Már kész is vagyunk. Kényelmesen hátradőlünk a székünkben és élvezzük a Drupal Csodálatos Világát. Igen ám de később valószínűleg észrevesszük azt a kellemetlenséget, hogy a triggert nem tudjuk úgy beállítani, hogy csak bizonyos tartalom típusokra legyen érvényes, sem azt, hogy csak bizonyos felhasználókra vagy csoportokra hajtódjon végre az akció. Ezért aztán minden beküldött tartalom után megköszönjük saját magunknak a beküldött tartalmat. Ez egy apró kellemetlenség amivel együtt kel élnünk.? (megoldási javaslatokat várom) A másik kellemetlenséggel akkor találjuk magunkat szembe, amikor a hozzászólásokról szeretnénk értesítést kapni. A rendszer ugyan lehetővé teszi, hogy küldjünk e-mailt hozzászólás érkezésekor, de a hozzászólás adataihoz nem férünk hozzá. Csak olyan semmitmondó leveleket tudunk kiküldeni, amiben pusztán az van benne, hogy melyik bejegyzéshez érkezett a hozzászólás. Sem a beküldő, sem a hozzászólás tartalmára vonatkozólag nem tudunk semmi információt küldeni. A legfurcsább az, hogy a trigger átadja az akciónak a hozzászólás adatait, de az nem kezd vele semmit. Küldtem be rá issue-t de többek ezt nem hibának, hanem egy új szolgáltatásnak fogják fel ezért a hatosba nem valószínű, hogy bekerül. Nem kell azonban aggódnunk, mert a megoldás nagyon egyszerű. Mint mondtam az adatok átadódnak az akciónak de az nem csinál vele semmit. Olyannyira nem csinál vele semmit, hogy a levél küldéséhez egyszerűen hozzácsapja, így egy ügyes mail_alter-el kijavíthatjuk a hibát. Hozzunk létre először egy comment_action_mail.info fájlt és másoljuk bele a következőt:
name = Comment mail action
description = Add comment data to action mail
core = 6.x
Ezután hozzunk létre egy comment_action_mail.module nevű fájlt a következő tartalommal:
<?php
function comment_action_mail_mail_alter(&$message) {
if ($message['id'] == 'system_action_send_email') {
if (isset($message['params']['context']['comment'])) {
$comment = $message['params']['context']['comment'];
$tr = array(
'%comment_subject' => drupal_html_to_text($comment->subject),
'%comment_body' => drupal_html_to_text(check_markup($comment->comment, $comment->filter)),
'%comment_username' => drupal_html_to_text($comment->name),
'%comment_delete_url' => url('comment/delete/'.$comment->cid, array('absolute'=>TRUE)),
'%comment_edit_url' => url('comment/edit/'.$comment->cid, array('absolute'=>TRUE)),
);
foreach ($message['body'] as $key => $val) {
$message['body'][$key] = strtr($val, $tr);
}
}
}
}
No ekkor kész is vagyunk, most már a fenti öt százalékjellel jelölt szövegrészt használhatjuk is a magunknak küldött üzenetekben. Amire még oda kell figyelnünk az az, hogy a levélküldő akció beállításakor nincs lehetőségünk szűrőket állítani. Így lemondhatunk a sortörés átalakítóról ami a soremeléseinket html<br>
tagokra cseréli. Ez azért gáz, mert a drupal6drupal_html_to_text()
az összes soremelést és szóközt kidobálja a levelünkből. Tehát csak úgy tudunk normális leveleket küldeni magunknak, ha az üzenet beállításainál a megfelelő HTML kódokat használjuk. Pl.:
<h1>%title</h1>
%comment_username<br>
%comment_body
Remélem hasznos volt ez a kis írás. Biztos ami biztos csatoltam a modult, hátha valakinek túl bonyolultak a fent leírtak.