Dano:
- VPS serveris su nuolatine licencija ispmanager lite 5
- 10-20 vartotojų vienam serveriui
- „Google“ kalendorius su reguliariais priminimais tiems, kuriems trūksta laiko priegloba
- Gėda mokėti už bet ką kitą, ypač už prenumeratą.
Tikslas yra atsikratyti Google kalendoriaus ir rankinių priminimų klientui, kad jis turi mokėti už prieglobą. Išsilaisvinkite nuo „leisk jam dar šiek tiek padirbėti, tuoj sumokės“, „kažkaip nepatogu jį išjungti“ ir patikėkite tai bedvasiai mašinai.
Aišku, iš pradžių googlėjau ir ieškojau, bet neradau sprendimų, viskas susivedė į tai, kad reikia užsiprenumeruoti BILLmanager, bet taškas Nr.4 man labai svarbus ir rimtas, nesulauksiu atsikratyti jo. Ir sprendimas pasirodė ne toks jau sunkus.
Taigi ką mes darome?
Sukurkite aplanką users.addon, /usr/local/mgr5/etc/sql/ kataloge, du tuščius failus:
- mokėjimo_data
- uwemail
Tai įsakys skydui sukurti duomenų bazėje
/usr/local/mgr5/etc/ispmgr.db
Vartotojų lentelėje yra du atitinkami laukai, kuriuose bus rašomos reikšmės iš administratoriaus skydelio.
Sukurkite failą ispmgr_mod_pay_data.xml aplanke /usr/local/mgr5/etc/xml su turiniu
<?xml version="1.0" encoding="UTF-8"?>
<mgrdata>
<metadata name="user.edit">
<form>
<page name="main">
<field name="pay_date">
<input type="text" name="pay_date"/>
</field>
<field name="uwemail">
<input type="text" name="uwemail"/>
</field>
</page>
</form>
</metadata>
<lang name="ru">
<messages name="user.edit">
<msg name="pay_date" sqlname="pay_date">Оплачено до</msg>
<msg name="uwemail" sqlname="uwemail">Пользовательский email</msg>
</messages>
</lang>
<lang name="en">
<messages name="user.edit">
<msg name="pay_date" sqlname="pay_date">Paid before</msg>
<msg name="uwemail" sqlname="uwemail">User email</msg>
</messages>
</lang>
</mgrdata>
Tai suteikia skydeliui taisyklę, kad mūsų laukai būtų rodomi vartotojo redagavimo formoje.
Perkraukite skydelį:
/usr/local/mgr5/sbin/mgrctl -m ispmgr exitMes gauname:

Laukeliuose rašome iki kokios dienos hostingas turėtų veikti, ir koks vartotojo el.paštas, kur siųsti priminimus, kad hostingas greitai baigsis.
Dabar turime sukurti scenarijų, kuris primins vartotojams, kad priegloba baigiasi tam tikrais intervalais. Praneškite administratoriui, kad priegloba baigiasi. Praneškite vartotojui ir administratoriui, kad vartotojas išjungtas.
Man patinka php ir parašiau scenarijų.
<?php
$adminemail = "admin@gmail.com"; // email админа
$day_send_message = [30,7,5,3,1]; // за сколько дней и с какой переодичностью будет напоминать пользователю что хостинг заканчивается
$db = new SQLite3('/usr/local/mgr5/etc/ispmgr.db');
$results = $db->query('SELECT * FROM users WHERE active == "on" AND pay_date IS NOT NULL');
while ($user = $results->fetchArray()) {
$days_left=floor( ( strtotime($user['pay_date']) - time() ) / (60 * 60 * 24));
if(in_array($days_left, $day_send_message)){
if($user['uwemail'] != ""){
mail($user['uwemail'], 'ISPMANAGER заканчивается хостинг через '.$days_left.' днейя', "Текст для пользователя о том что осталось столько то дней");
}
}
if( $days_left == 3 ) {
mail($adminemail, 'ISPMANAGER USER '.$user['name'], $user['name'] . " Закончится хостинг через ".$days_left." дня");
}
if($days_left <= 0){
mail($adminemail, 'ISPMANAGER USER '.$user['name'].' DISABLED', $user['name'].' Отключен');
exec("/usr/local/mgr5/sbin/mgrctl -m ispmgr user.suspend elid=".$user["name"]);
if( $user['uwemail'] != "" ) {
mail($user['uwemail'], 'ISPMANAGER хостинг отключен', 'Текст для пользователя что хостинг закончился');
}
}
// при желании можно еще написать небольшой IF что бы данные удалялись через некоторое время, но мне это не нужно
}
Išsaugome šį scenarijų bet kur ir vadiname kaip norime, ir pridedame cron užduotį, kad jį iškviestume kartą per dieną. Viskas paruošta.
Dabar sąžinė švari, rupūžė patenkinta, papildomų išlaidų nepatyriau.
Belieka užpildyti duomenis naudotojuose, kurią dieną buvo sumokėta už hostingą, ir vartotojų el. paštą, kur siųsti priminimus vartotojams.
Džiugu, jei kam nors padeda.
Šaltinis: www.habr.com
