|
<?php defined('SYSPATH') or die('No direct script access.');
|
|
class Scheduler_Controller extends Controller
|
|
{
|
|
function index()
|
|
{
|
|
url::redirect(url_lang::base());
|
|
}
|
|
|
|
/**
|
|
* This function should be regularly launched by scheduler. Schedular can be bash script run by cron.
|
|
* @author Jiri Svitak
|
|
* @param $type
|
|
* @return unknown_type
|
|
*/
|
|
public function run()
|
|
{
|
|
// script needs to be run from its server machine
|
|
if (server::remote_addr() != server::server_addr())
|
|
die();
|
|
|
|
$member_model = new Member_Model();
|
|
|
|
// update system lock status every day
|
|
if ((date('H:i') == '00:00'))
|
|
{
|
|
$member_model->update_lock_status();
|
|
}
|
|
|
|
// manage logs
|
|
if ((date('H:i') == '00:00'))
|
|
{
|
|
if (Settings::get('action_logs_active') == '1')
|
|
{
|
|
self::logs_partitions_daily();
|
|
}
|
|
}
|
|
|
|
//send quened SMS
|
|
self::send_quened_sms();
|
|
|
|
//receive SMS
|
|
self::receive_sms();
|
|
|
|
// update ulogd
|
|
|
|
if (Settings::get('ulogd_enabled'))
|
|
self::update_ulogd();
|
|
|
|
// update allowed subnets
|
|
|
|
if (Settings::get('allowed_subnets_enabled'))
|
|
self::update_allowed_subnets();
|
|
|
|
}
|
|
|
|
/**
|
|
* Manage partitions of log table.
|
|
* Add partition for current day and removes 31 days old partition.
|
|
* @author Ondřej Fibich
|
|
*/
|
|
private function logs_partitions_daily()
|
|
{
|
|
$model_log = new Log_Model();
|
|
// add partition for today
|
|
$model_log->add_partition();
|
|
// remove log partition
|
|
try
|
|
{
|
|
$model_log->remove_old_partition();
|
|
}
|
|
catch (Exception $ignore)
|
|
{ // ignore exception - first 30 days do not have older one..
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Function sends SMS messages from db quene.
|
|
* @author Roman Sevcik
|
|
*/
|
|
private function send_quened_sms()
|
|
{
|
|
$model_sms_message = new Sms_message_Model();
|
|
$unsent_messages = $model_sms_message->where('type = '.Sms_Controller::$SENT.' AND state = '.Sms_Controller::$SENT_UNSENT.' AND send_date < CURRENT_TIMESTAMP')->limit(50)->find_all();
|
|
|
|
if (count($unsent_messages) > 0)
|
|
foreach ($unsent_messages as $message)
|
|
{
|
|
switch ($message->driver)
|
|
{
|
|
case Sms::$KLIKNIAVOLEJ:
|
|
|
|
$user = $this->settings->get('sms_user'.Sms::$KLIKNIAVOLEJ);
|
|
$password = $this->settings->get('sms_password'.Sms::$KLIKNIAVOLEJ);
|
|
$test_mode = $this->settings->get('sms_test_mode'.Sms::$KLIKNIAVOLEJ) - 1;
|
|
|
|
$sms = new Sms_Klikniavolej();
|
|
$sms->user($user);
|
|
$sms->password($password);
|
|
$sms->sender($message->sender);
|
|
$sms->recipient($message->receiver);
|
|
if ($test_mode == Sms_Klikniavolej::$TEST_MODE_YES)
|
|
$sms->test(Sms_Klikniavolej::$TEST_MODE_YES);
|
|
$sms->text(htmlspecialchars_decode($message->text));
|
|
if ($sms->send())
|
|
{
|
|
$message->state = Sms_Controller::$SENT_OK;
|
|
$message->message = $sms->get_status();
|
|
}
|
|
else
|
|
{
|
|
$message->state = Sms_Controller::$SENT_FAILED;
|
|
$message->message = $sms->get_error();
|
|
}
|
|
$message->save();
|
|
break;
|
|
case Sms::$NEJLEVNEJSISMS:
|
|
|
|
$user = $this->settings->get('sms_user'.Sms::$NEJLEVNEJSISMS);
|
|
$password = $this->settings->get('sms_password'.Sms::$NEJLEVNEJSISMS);
|
|
|
|
$sms = new Sms_Nejlevnejsisms();
|
|
$sms->user($user);
|
|
$sms->password($password);
|
|
$sms->recipient($message->receiver);
|
|
$sms->text(htmlspecialchars_decode($message->text));
|
|
if ($sms->send())
|
|
{
|
|
$message->state = Sms_Controller::$SENT_OK;
|
|
$message->message = $sms->get_status();
|
|
}
|
|
else
|
|
{
|
|
$message->state = Sms_Controller::$SENT_FAILED;
|
|
$message->message = $sms->get_error();
|
|
}
|
|
$message->save();
|
|
case Sms::$SOUNDWINV100:
|
|
$user = $this->settings->get('sms_user'.Sms::$SOUNDWINV100);
|
|
$password = $this->settings->get('sms_password'.Sms::$SOUNDWINV100);
|
|
$hostname = $this->settings->get('sms_hostname'.Sms::$SOUNDWINV100);
|
|
|
|
|
|
$sms = new Sms_Soudvinv100();
|
|
$sms->user($user);
|
|
$sms->password($password);
|
|
$sms->hostname($hostname);
|
|
$sms->recipient('00'.$message->receiver);
|
|
$sms->text(htmlspecialchars_decode($message->text));
|
|
if ($sms->send())
|
|
{
|
|
$message->state = Sms_Controller::$SENT_OK;
|
|
$message->message = $sms->get_status();
|
|
}
|
|
else
|
|
{
|
|
$message->state = Sms_Controller::$SENT_FAILED;
|
|
$message->message = $sms->get_error();
|
|
}
|
|
$message->save();
|
|
break;
|
|
case Sms::$INACTIVE:
|
|
default:
|
|
$message->state = Sms_Controller::$SENT_FAILED;
|
|
$message->message = 'Neznámý ovladač';
|
|
$message->save();
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Function receive SMS messages from GSM gw.
|
|
* @author Roman Sevcik
|
|
*/
|
|
private function receive_sms()
|
|
{
|
|
if ($this->settings->get('sms_driver_state'.Sms::$SOUNDWINV100) == Sms::$DRIVER_ACTIVE)
|
|
{
|
|
$user = $this->settings->get('sms_user'.Sms::$SOUNDWINV100);
|
|
$password = $this->settings->get('sms_password'.Sms::$SOUNDWINV100);
|
|
$hostname = $this->settings->get('sms_hostname'.Sms::$SOUNDWINV100);
|
|
|
|
$sms = new Sms_Soudvinv100();
|
|
$sms->user($user);
|
|
$sms->password($password);
|
|
$sms->hostname($hostname);
|
|
|
|
if ($sms->receive())
|
|
{
|
|
$messages = $sms->get_messages();
|
|
|
|
//print '<pre>';
|
|
//print_r ($messages);
|
|
//print '</pre>';
|
|
|
|
for($i = 0; $i < count($messages); $i++)
|
|
{
|
|
if (strtolower($messages[$i]->text) === 'klima')
|
|
{
|
|
print 'Sending answer to '.$messages[$i]->sender;
|
|
$sms = new Sms_Soudvinv100();
|
|
$sms->user($user);
|
|
$sms->password($password);
|
|
$sms->hostname($hostname);
|
|
$sms->recipient('00'.$messages[$i]->sender);
|
|
$sms->text(htmlspecialchars_decode('Klima je nejlepsi, Klima je super, Klima je nej...! S pozdravem FreeNetIS'));
|
|
$sms->send();
|
|
}
|
|
elseif (strtolower($messages[$i]->text) === 'freenetis stav')
|
|
{
|
|
print 'Sending answer to '.$messages[$i]->sender;
|
|
$sms = new Sms_Soudvinv100();
|
|
$sms->user($user);
|
|
$sms->password($password);
|
|
$sms->hostname($hostname);
|
|
$sms->recipient('00'.$messages[$i]->sender);
|
|
$sms->text(htmlspecialchars_decode('Vas aktualni kredit je 1240 CZK. S pozdravem FreeNetIS'));
|
|
$sms->send();
|
|
}
|
|
else
|
|
{
|
|
$recipient = $this->settings->get('sms_sim_card_number'.Sms::$SOUNDWINV100);
|
|
if ($recipient == null || $recipient == '' )
|
|
$recipient = $this->settings->get('sms_sender_number');
|
|
|
|
$sms = new Sms_message_Model();
|
|
$sms->user_id = 1;
|
|
$sms->stamp = $messages[$i]->date;
|
|
$sms->send_date = $messages[$i]->date;
|
|
$sms->text = htmlspecialchars($messages[$i]->text);
|
|
$sms->sender = $messages[$i]->sender;
|
|
$sms->receiver = $recipient;
|
|
$sms->driver = Sms::$SOUNDWINV100;
|
|
$sms->type = Sms_Controller::$RECEIVED;
|
|
$sms->state = Sms_Controller::$RECEIVED_UNREAD;
|
|
$sms->save();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Update ulogd
|
|
* @author Michal Kliment
|
|
*/
|
|
private function update_ulogd()
|
|
{
|
|
// it's time to update
|
|
if (Settings::get('ulogd_update_last') + Settings::get('ulogd_update_interval') < time())
|
|
{
|
|
// traffics of ip addresses
|
|
$ip_addresses_traffic_model = new Ip_addresses_traffic_Model();
|
|
|
|
// cleans traffics of ip addresses
|
|
$ip_addresses_traffic_model->clean_ip_addresses_traffics();
|
|
|
|
// inserts new traffics of ip addresses
|
|
$ip_addresses_traffic_model->insert_ip_addresses_traffics();
|
|
|
|
// updates member's ids of ip addresses
|
|
$ip_addresses_traffic_model->update_member_ids();
|
|
|
|
// cleans ulogd table
|
|
$db = new Database();
|
|
$db->query("TRUNCATE ulog2_ct;");
|
|
|
|
// traffics of members
|
|
$members_traffic_model = new Members_traffic_Model();
|
|
|
|
// cleans traffics of members
|
|
$members_traffic_model->clean_members_traffics();
|
|
|
|
// inserts new traffics of members
|
|
$members_traffic_model->insert_members_traffics();
|
|
|
|
// finding of count of active members
|
|
$ulogd_active_count = Settings::get('ulogd_active_count');
|
|
|
|
// count is in percents
|
|
if (substr($ulogd_active_count,-1) == "%")
|
|
{
|
|
// finds total members to ulogd
|
|
$total = ORM::factory('member')->count_all_members_to_ulogd();
|
|
|
|
// calculates count of active members from percents
|
|
$ulogd_active_count = round(((int) substr($ulogd_active_count,0,-1)) / 100 * $total);
|
|
}
|
|
|
|
// finding of avarage
|
|
$avg = $members_traffic_model->get_avg_traffic();
|
|
|
|
if (($ulogd_active_min = Settings::get('ulogd_active_min')) != '')
|
|
{
|
|
$min = intval($ulogd_active_min);
|
|
|
|
switch (substr($ulogd_active_min, -2, 1))
|
|
{
|
|
case 'k':
|
|
// do nothing
|
|
break;
|
|
case 'M':
|
|
$min *= 1024;
|
|
break;
|
|
case 'G':
|
|
$min *= 1024*1024;
|
|
break;
|
|
case 'T':
|
|
$min *= 1024*1024*1024;
|
|
break;
|
|
default:
|
|
$min /= 1024;
|
|
break;
|
|
}
|
|
|
|
if ($avg < $min)
|
|
$avg = $min;
|
|
}
|
|
|
|
// updates active members
|
|
$members_traffic_model->update_active_members($avg);
|
|
|
|
// daily traffics of members
|
|
$members_traffics_daily_model = new Members_traffics_daily_Model();
|
|
|
|
// updates daily traffics of members
|
|
$members_traffics_daily_model->updates_members_traffics_by_date(date('Y-m-d'));
|
|
|
|
// inserts new daily traffics of members
|
|
$members_traffics_daily_model->insert_members_traffics_by_date(date('Y-m-d'));
|
|
|
|
// updates variable
|
|
Settings::set('ulogd_update_last', time());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Updates allowed subnets
|
|
*
|
|
* @author Michal Kliment
|
|
*/
|
|
private function update_allowed_subnets ()
|
|
{
|
|
// it's time to update
|
|
if (Settings::get('allowed_subnets_enabled') && Settings::get('allowed_subnets_update_last') + Settings::get('allowed_subnets_update_interval') < time())
|
|
{
|
|
$ip_addresses_model = new Ip_address_Model();
|
|
|
|
// updates allowed ips
|
|
$ip_addresses_model->update_allowed_ips();
|
|
|
|
$subnets_owner_model = new Subnets_owner_Model();
|
|
|
|
// updates allowed subnets
|
|
$subnets_owner_model->update_allowed_subnets();
|
|
|
|
// updates variable
|
|
Settings::set('allowed_subnets_update_last', time());
|
|
}
|
|
}
|
|
}
|