-----Original Message----- From: lms-bounces@lists.lms.org.pl [mailto:lms-bounces@lists.lms.org.pl] On Behalf Of maccolo Sent: Thursday, May 08, 2008 9:47 AM To: lista użytkowników LMS Subject: [lms] skrypt do powiadomien
porusze jeszcze temat powiadomien, moglbym wykonac skrypt ktory to robi bez squida i crona, potrzebowalbym do tego skrypt ktory wyciaga z bazy danych tresc wiadomosc wpisanej do lms`a
Wrzucalem to to kiedys na grupe. Ostrzezenia generujesz np.. Modulem cutoff z lmsd. Potem tworzysz skrypcik o tej tresci:
#!/bin/bash /usr/local/sbin/iptables -t nat -D WARNING -p tcp -s $1 -j REDIRECT --to-port 80
Nadajesz mu praw 700 i userowi, na którym chodzi apache pozwalasz przez sudo na odpalanie go.
W daemonie tworzysz sobie instancje warn (korzystasz z modulu parser):
{if (fileexists("/etc/lms/scripts/warn.daemon")) deletefile("/etc/lms/scripts/warn.daemon"); /if;}
{result = SELECT inet_ntoa( nodes.ipaddr ) as ip, nodes.name, nodes.warning FROM nodes, networks WHERE networks.address = ( nodes.ipaddr & inet_aton( networks.mask ) ) AND (networks.name = "<<NAZWA SIECI>>")}
{if (number(result)) for (i=0; i<number(result); i++) if (number(result[i].warning)) }/usr/local/sbin/iptables -t nat -A WARNING -s {result[i].ip} -p tcp -j REDIRECT --to-port 80\n{ /if; /for; /if}\n
/usr/local/sbin/iptables -t nat -A WARNING -j RETURN\n
Na koniec modyfikujesz winietke ta z lms-squid (dokladniej message.html podmieniasz linijke do klikania oznaczajacego przeczytanie):
<a href="http://<url>/index.php?readed=1&oldurl={$layout.moveurl}">{t}Click here to mark this message as readed.{/t}</a>
A index.php od linijki z SMARTY ma wygladac tak:
$SMARTY->assign_by_ref('layout', $layout);
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $forwarded_ip = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $nodeip = $forwarded_ip['0']; $nodeid = $LMS->GetNodeIDByIP($forwarded_ip['0']); } else { $nodeip = str_replace('::ffff:', '', $_SERVER['REMOTE_ADDR']); $nodeid = $LMS->GetNodeIDByIP($nodeip); }
$customerid = $LMS->GetNodeOwner($nodeid); $nodeinfo = $LMS->GetNode($nodeid);
$layout['ip'] = "sudo /etc/lms/warn $nodeip"; if (isset($_GET['readed'])) { $DB->Execute('UPDATE nodes SET warning = 0 WHERE id = ?', array($nodeid)); shell_exec("sudo /etc/lms/warn $nodeip"); header('Location: http://%27.$_GET%5B%27oldurl']); } else { $customerinfo = $LMS->GetCustomer($customerid); //$layout['oldurl'] = $_GET['oldurl']; $layout['moveurl'] = $_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]; $SMARTY->assign('customerinfo', $customerinfo); $SMARTY->assign('nodeinfo', $nodeinfo); $SMARTY->assign('layout', $layout); $SMARTY->display('message.html'); }
Oczywiście sprawdz, czy Tobie będą się zgadzac porty (u mnie router osiedlowy nie robi w zasadzie nic poza shapingiem, routowaniem wyjscia i pory pocztowym, wiec moglem sobie to na porcie 80 to postawic)