Projekt

Obecné

Profil

<?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());
}
}
}
(49-49/74)