Revize 1131
Přidáno uživatelem Jiří Sviták před asi 13 roky(ů)
freenetis/branches/testing/application/vendors/unit_tester/unit_testing_config.xml | ||
---|---|---|
<input></input>
|
||
</values>
|
||
</method>
|
||
<method name="address_point_name" autogenerate="on">
|
||
<attributes></attributes>
|
||
<values>
|
||
<input></input>
|
||
</values>
|
||
</method>
|
||
</controller>
|
||
<controller name="languages">
|
||
<method name="index" autogenerate="on">
|
||
... | ... | |
<attribute name="from" default_value="ip_address" />
|
||
</attributes>
|
||
<values>
|
||
<input></input>
|
||
<input>
|
||
<param value="" />
|
||
</input>
|
||
<input>
|
||
<param value="" />
|
||
<param value="" />
|
||
</input>
|
||
<input>
|
||
<param value="" />
|
||
... | ... | |
<attribute name="message_id" default_value="" />
|
||
</attributes>
|
||
<values>
|
||
<input></input>
|
||
<input>
|
||
<param value="" />
|
||
</input>
|
||
<input>
|
||
<param value="" />
|
||
<param value="" />
|
||
</input>
|
||
</values>
|
||
</method>
|
||
... | ... | |
</input>
|
||
</values>
|
||
</method>
|
||
<method name="info" autogenerate="on">
|
||
<attributes></attributes>
|
||
<values>
|
||
<input></input>
|
||
</values>
|
||
</method>
|
||
<method name="show_whitelisted_members" autogenerate="on">
|
||
<attributes>
|
||
<attribute name="limit_results" default_value="100" />
|
||
... | ... | |
<model name="address_point">
|
||
<method name="count_all_address_points" autogenerate="on">
|
||
<attributes>
|
||
<attribute name="member_id" default_value="" />
|
||
<attribute name="filter_sql" default_value="" />
|
||
</attributes>
|
||
<values>
|
||
... | ... | |
<input>
|
||
<param value="" />
|
||
</input>
|
||
<input>
|
||
<param value="" />
|
||
<param value="" />
|
||
</input>
|
||
</values>
|
||
</method>
|
||
<method name="count_all_items_by_address_point_id" autogenerate="off">
|
||
... | ... | |
<input></input>
|
||
</values>
|
||
</method>
|
||
<method name="activate_interrupted_membership_message" autogenerate="on">
|
||
<attributes>
|
||
<attribute name="user_id" default_value="" />
|
||
</attributes>
|
||
<values>
|
||
<input>
|
||
<param value="" />
|
||
</input>
|
||
</values>
|
||
</method>
|
||
<method name="activate_debtor_message" autogenerate="on">
|
||
<attributes>
|
||
<attribute name="user_id" default_value="" />
|
||
<attribute name="debtor_boundary" default_value="" />
|
||
</attributes>
|
||
<values>
|
||
<input>
|
||
<param value="" />
|
||
<param value="" />
|
||
</input>
|
||
</values>
|
||
</method>
|
||
<method name="activate_payment_notice_message" autogenerate="on">
|
||
<attributes>
|
||
<attribute name="user_id" default_value="" />
|
||
<attribute name="payment_notice_boundary" default_value="" />
|
||
<attribute name="debtor_boundary" default_value="" />
|
||
</attributes>
|
||
<values>
|
||
<input>
|
||
<param value="" />
|
||
<param value="" />
|
||
<param value="" />
|
||
</input>
|
||
</values>
|
||
</method>
|
||
</model>
|
||
<model name="messages_ip_addresses">
|
||
<method name="get_redirections_of_ip_address" autogenerate="off">
|
||
... | ... | |
</attributes>
|
||
<values>
|
||
</values>
|
||
</method></helper>
|
||
</method>
|
||
<method name="items_count_field" autogenerate="on">
|
||
<attributes>
|
||
<attribute name="item" default_value="" />
|
||
<attribute name="name" default_value="" />
|
||
</attributes>
|
||
<values>
|
||
<input>
|
||
<param value="" />
|
||
<param value="" />
|
||
</input>
|
||
</values>
|
||
</method>
|
||
</helper>
|
||
<helper name="cookie">
|
||
<method name="set" autogenerate="on">
|
||
<attributes>
|
freenetis/branches/testing/application/models/ip_address.php | ||
---|---|---|
public function get_ip_addresses_of_debtors($debtor_boundary)
|
||
{
|
||
return $this->db->query("
|
||
SELECT ip.id, ip.ip_address, ip.whitelisted, s.name AS subnet_name, m.name AS member_name,
|
||
m.variable_symbol, a.balance
|
||
SELECT ip.id
|
||
FROM ip_addresses ip
|
||
JOIN subnets s ON s.id = ip.subnet_id
|
||
JOIN ifaces i ON i.id = ip.iface_id
|
freenetis/branches/testing/application/models/message.php | ||
---|---|---|
* @return unknown_type
|
||
*/
|
||
public function get_all_messages($limit_from = 0, $limit_results = 20,
|
||
$order_by = 'id', $order_by_direction = 'DESC', $filter_values = array())
|
||
$order_by = 'id', $order_by_direction = 'asc', $filter_values = array())
|
||
{
|
||
// order by check
|
||
if (!$this->has_column($order_by))
|
||
... | ... | |
LIMIT $limit_from, $limit_results
|
||
");
|
||
}
|
||
|
||
|
||
|
||
/**
|
||
* Activates interrupted membership message to ip addresses of users with
|
||
* interrupted membership.
|
||
* @author Jiri Svitak
|
||
* @param <type> $user_id
|
||
* @return int number of ip addresses activated
|
||
*/
|
||
public function activate_interrupted_membership_message($user_id)
|
||
{
|
||
// preparation
|
||
$message = ORM::factory('message')->where(
|
||
'type', self::$interrupted_membership_message)->find();
|
||
$content = $message->text;
|
||
$datetime = date('Y-m-d H:i:s');
|
||
$ip_count = 0;
|
||
// delete old redirections
|
||
$database = new Database();
|
||
$database->delete('messages_ip_addresses', array('message_id' => $message->id));
|
||
// find IP addresses with interrupted membership
|
||
$ip_model = new Ip_address_Model();
|
||
$ips = $ip_model->get_ip_addresses_with_interrupted_membership();
|
||
// first sql for inserting transfers
|
||
$sql_insert = "INSERT INTO messages_ip_addresses " .
|
||
"(message_id, ip_address_id, user_id, comment, datetime) VALUES ";
|
||
$values = array();
|
||
// set new redirections in junction table
|
||
foreach($ips as $ip)
|
||
{
|
||
// insert values
|
||
$values[] = "($message->id, $ip->id, $user_id, '', '$datetime')";
|
||
$ip_count++;
|
||
}
|
||
$sql_insert .= implode(",", $values);
|
||
if (!$database->query($sql_insert))
|
||
throw new Exception();
|
||
return $ip_count;
|
||
}
|
||
|
||
|
||
/**
|
||
* Activates debtor message to ip addresses of members with
|
||
* negative credit.
|
||
* @author Jiri Svitak
|
||
* @param <type> $user_id
|
||
* @param <type> $debtor_boundary
|
||
* @return int
|
||
*/
|
||
public function activate_debtor_message($user_id, $debtor_boundary)
|
||
{
|
||
// preparation
|
||
$message = ORM::factory('message')->where(
|
||
'type', self::$debtor_message)->find();
|
||
$content = $message->text;
|
||
$datetime = date('Y-m-d H:i:s');
|
||
$ip_count = 0;
|
||
// delete old redirections
|
||
$database = new Database();
|
||
$database->delete('messages_ip_addresses', array('message_id' => $message->id));
|
||
// finding IP addresses to redirect to debtor message
|
||
$ip_model = new Ip_address_Model();
|
||
$ips = $ip_model->get_ip_addresses_of_debtors($debtor_boundary);
|
||
// first sql for inserting transfers
|
||
$sql_insert = "INSERT INTO messages_ip_addresses " .
|
||
"(message_id, ip_address_id, user_id, comment, datetime) VALUES ";
|
||
$values = array();
|
||
// set new redirections in junction table
|
||
foreach($ips as $ip)
|
||
{
|
||
// insert values
|
||
$values[] = "($message->id, $ip->id, $user_id, '', '$datetime')";
|
||
$ip_count++;
|
||
}
|
||
$sql_insert .= implode(",", $values);
|
||
if (!$database->query($sql_insert))
|
||
throw new Exception();
|
||
return $ip_count;
|
||
}
|
||
|
||
|
||
/**
|
||
* Activates payment notice message to ip addresses of members who have
|
||
* low credit.
|
||
* @author Jiri Svitak
|
||
* @param <type> $user_id
|
||
* @param <type> $payment_notice_boundary
|
||
* @param <type> $debtor_boundary
|
||
* @return int
|
||
*/
|
||
public function activate_payment_notice_message($user_id, $payment_notice_boundary, $debtor_boundary)
|
||
{
|
||
// preparation
|
||
$message = ORM::factory('message')->where(
|
||
'type', self::$payment_notice_message)->find();
|
||
$content = $message->text;
|
||
$datetime = date('Y-m-d H:i:s');
|
||
$ip_count = 0;
|
||
// delete old redirections
|
||
$database = new Database();
|
||
$database->delete('messages_ip_addresses', array('message_id' => $message->id));
|
||
// finding IP addresses to redirect to debtor message
|
||
$ip_model = new Ip_address_Model();
|
||
$ips = $ip_model->get_ip_addresses_of_almostdebtors(
|
||
$payment_notice_boundary, $debtor_boundary
|
||
);
|
||
// first sql for inserting transfers
|
||
$sql_insert = "INSERT INTO messages_ip_addresses ".
|
||
"(message_id, ip_address_id, user_id, comment, datetime) VALUES ";
|
||
$values = array();
|
||
// set new redirections in junction table
|
||
foreach($ips as $ip)
|
||
{
|
||
// insert values
|
||
$values[] = "($message->id, $ip->id, $user_id, '', '$datetime')";
|
||
$ip_count++;
|
||
}
|
||
$sql_insert .= implode(",", $values);
|
||
if (!$database->query($sql_insert))
|
||
throw new Exception();
|
||
return $ip_count;
|
||
}
|
||
}
|
freenetis/branches/testing/application/models/member.php | ||
---|---|---|
);
|
||
protected $belongs_to = array('address_point','user');
|
||
|
||
// filtering by redirection
|
||
public static $all = 1;
|
||
public static $all_redirected = 2;
|
||
public static $membership_interrupt = 3;
|
||
public static $debtors = 4;
|
||
public static $payment_notice = 5;
|
||
public static $optional_message = 6;
|
||
|
||
const TYPE_APPLICANT = 1;
|
||
const TYPE_HONORARY = 3;
|
||
const TYPE_SYMPATHIZING = 4;
|
||
... | ... | |
// query
|
||
return $this->db->query("
|
||
SELECT id, id AS member_id, registration, name, street, street_number,
|
||
town, quarter, variable_symbol, aid, balance, redirect,
|
||
town, quarter, variable_symbol, aid, balance,
|
||
GROUP_CONCAT(a_comment SEPARATOR ', \n\n') AS a_comment,
|
||
a_comments_thread_id, type, entrance_date, leaving_date
|
||
FROM
|
||
... | ... | |
m.id, m.registration, m.name,
|
||
s.street, ap.street_number, t.town, t.quarter,
|
||
m.variable_symbol, a.id AS aid,
|
||
a.balance, m.redirect,
|
||
a.balance,
|
||
CONCAT(u.surname,' ',u.name,' (',SUBSTRING(c.datetime,1,10),'):\n',c.text) AS a_comment,
|
||
a.comments_thread_id AS a_comments_thread_id,
|
||
m.type, m.entrance_date, m.leaving_date
|
||
FROM
|
||
(
|
||
SELECT m.id,
|
||
m.name, m.variable_symbol, m.redirect,
|
||
m.name, m.variable_symbol,
|
||
m.address_point_id,
|
||
IF(m.registration = 1, ?, ?) AS registration,
|
||
IFNULL(t.translated_term, e.value) AS type,
|
||
... | ... | |
// query
|
||
return $this->db->query("
|
||
SELECT id, id AS member_id, registration, name, street, street_number,
|
||
town, quarter, variable_symbol, aid, balance, redirect,
|
||
town, quarter, variable_symbol, aid, balance,
|
||
GROUP_CONCAT(a_comment SEPARATOR ', \n\n') AS a_comment,
|
||
a_comments_thread_id, type, entrance_date, leaving_date
|
||
FROM
|
||
... | ... | |
m.id, m.registration, m.name,
|
||
s.street, ap.street_number, t.town, t.quarter,
|
||
m.variable_symbol, a.id AS aid,
|
||
a.balance, m.redirect,
|
||
a.balance,
|
||
CONCAT(u.surname,' ',u.name,' (',SUBSTRING(c.datetime,1,10),'):\n',c.text) AS a_comment,
|
||
a.comments_thread_id AS a_comments_thread_id,
|
||
m.type, m.entrance_date, m.leaving_date
|
||
... | ... | |
SELECT m.id
|
||
FROM
|
||
(
|
||
SELECT m.id, m.name, m.variable_symbol, m.redirect,
|
||
SELECT m.id, m.name, m.variable_symbol,
|
||
IF(m.registration = 1, ?, ?) AS registration,
|
||
IFNULL(t.translated_term, e.value) AS type,
|
||
IF(mi.id IS NOT NULL, ?, ?) AS membership_interrupt,
|
||
IFNULL(r.name,?) AS redirection,
|
||
m.organization_identifier, m.address_point_id,
|
||
m.comment, m.entrance_date, m.leaving_date
|
||
FROM members m
|
||
... | ... | |
LEFT JOIN members_fees mf ON mi.members_fee_id = mf.id
|
||
WHERE mf.activation_date <= CURDATE() AND mf.deactivation_date >= CURDATE()
|
||
) mi ON mi.member_id = m.id
|
||
LEFT JOIN
|
||
(
|
||
SELECT ? AS name, 1 AS redirect
|
||
UNION
|
||
SELECT ? AS name, 2 AS redirect
|
||
UNION
|
||
SELECT ? AS name, 4 AS redirect
|
||
UNION
|
||
SELECT ? AS name, 8 AS redirect
|
||
) AS r ON m.redirect & r.redirect
|
||
) AS m
|
||
LEFT JOIN address_points ap ON m.address_point_id = ap.id
|
||
LEFT JOIN streets s ON ap.street_id = s.id
|
||
... | ... | |
url_lang::lang('texts.Yes'),
|
||
url_lang::lang('texts.No'),
|
||
url_lang::lang('texts.nonei'),
|
||
Config::get('lang'),
|
||
url_lang::lang('texts.Membership interrupt'),
|
||
url_lang::lang('texts.Debtor'),
|
||
url_lang::lang('texts.Payment notice'),
|
||
url_lang::lang('texts.Optional message')
|
||
))->current()->total;
|
||
}
|
||
|
freenetis/branches/testing/application/controllers/subnets.php | ||
---|---|---|
}
|
||
|
||
|
||
//if ($this->acl_check_new('Messages_Controller', 'subnet'))
|
||
// $grid->action_field('subnet_id')->label(url_lang::lang('texts.Subnet')) ->url(url_lang::base().'redirect/add_to_subnet') ->action(url_lang::lang('texts.Redirect'))->class('center');
|
||
if ($this->acl_check_delete('Devices_Controller', 'subnet'))
|
||
|
||
{
|
||
$m = url_lang::lang('texts.Do you want to delete this subnet');
|
||
|
freenetis/branches/testing/application/controllers/members.php | ||
---|---|---|
->table('a')
|
||
->type('number');
|
||
|
||
$filter_form->add('redirect')
|
||
->label(url_lang::lang('texts.Redirection'))
|
||
->type('bit')
|
||
->values(array
|
||
(
|
||
"~16" => array
|
||
(
|
||
11 => url_lang::lang('texts.any'),
|
||
12 => url_lang::lang('texts.none')
|
||
),
|
||
1 => url_lang::lang('texts.Membership interrupt'),
|
||
2 => url_lang::lang('texts.Debtor'),
|
||
4 => url_lang::lang('texts.Payment notice'),
|
||
8 => url_lang::lang('texts.Optional message')
|
||
));
|
||
|
||
$filter_form->add('variable_symbol')
|
||
->callback('json/variable_symbol');
|
||
|
||
... | ... | |
if (strtolower($order_by_direction) != 'desc')
|
||
$order_by_direction = 'asc';
|
||
|
||
// types of redirection
|
||
$redir_types[Member_Model::$all] =
|
||
url_lang::lang('texts.All');
|
||
$redir_types[Member_Model::$all_redirected] =
|
||
url_lang::lang('texts.All redirected');
|
||
$redir_types[Member_Model::$membership_interrupt] =
|
||
url_lang::lang('texts.Membership interrupt');
|
||
$redir_types[Member_Model::$debtors] =
|
||
url_lang::lang('texts.Debtors');
|
||
$redir_types[Member_Model::$payment_notice] =
|
||
url_lang::lang('texts.Payment notice');
|
||
$redir_types[Member_Model::$optional_message] =
|
||
url_lang::lang('texts.Optional message');
|
||
|
||
// load members
|
||
$model_members = new Member_Model();
|
||
$total_members = $model_members->count_all_members($filter_form->as_sql());
|
||
... | ... | |
);
|
||
}
|
||
|
||
if ($this->acl_check_edit('Devices_Controller', 'redirect'))
|
||
{
|
||
$grid->add_new_button(
|
||
url_lang::base().'redirect/members',
|
||
url_lang::lang('texts.Redirection')
|
||
);
|
||
}
|
||
|
||
if ($this->acl_check_view(get_class($this), 'members'))
|
||
{
|
||
// csv export of members
|
||
... | ... | |
->label(url_lang::lang('texts.Balance'))
|
||
->callback('callback::balance_field');
|
||
|
||
$grid->order_callback_field('redirect')
|
||
->label(url_lang::lang('texts.Redir'))
|
||
->callback('callback::redirect_field');
|
||
|
||
// action fields
|
||
if ($this->acl_check_view(get_class($this), 'members'))
|
||
{
|
freenetis/branches/testing/application/controllers/messages.php | ||
---|---|---|
$order_by_direction = 'asc', $page_word = null, $page = 1)
|
||
{
|
||
// access rights
|
||
if (!$this->acl_check_view('Redirection_Controller', 'redirection'))
|
||
if (!$this->acl_check_view('Messages_Controller', 'message'))
|
||
Controller::error(ACCESS);
|
||
|
||
if (is_numeric($this->input->get('record_per_page')))
|
||
... | ... | |
$order_by = 'id';
|
||
|
||
if (strtolower($order_by_direction) != 'desc')
|
||
$order_by_direction = 'desc';
|
||
$order_by_direction = 'asc';
|
||
|
||
// model
|
||
$message_model = new Message_Model();
|
||
... | ... | |
public function add()
|
||
{
|
||
// access rights
|
||
if (!$this->acl_check_edit('Messages_Controller', 'message'))
|
||
if (!$this->acl_check_new('Messages_Controller', 'message'))
|
||
Controller::error(ACCESS);
|
||
|
||
// self cancel
|
||
... | ... | |
*/
|
||
public function edit($message_id = null)
|
||
{
|
||
if (!$this->acl_check_edit('Messages_Controller', 'message'))
|
||
Controller::error(ACCESS);
|
||
if (!isset($message_id))
|
||
Controller::warning(PARAMETER);
|
||
|
||
... | ... | |
*/
|
||
public function activate($message_id = NULL)
|
||
{
|
||
if (!$this->acl_check_new('Messages_Controller', 'member'))
|
||
Controller::error(ACCESS);
|
||
// param check
|
||
if (!$message_id || !is_numeric($message_id))
|
||
{
|
||
Controller::warning(PARAMETER);
|
||
}
|
||
|
||
// preparation
|
||
$message = new Message_Model($message_id);
|
||
|
||
// record check
|
||
if (!$message || !$message->id)
|
||
{
|
||
Controller::error(RECORD);
|
||
}
|
||
|
||
$content = $message->text;
|
||
$ip_model = new Ip_address_Model();
|
||
$message_model = new Message_Model();
|
||
$user_id = $this->session->get('user_id');
|
||
$datetime = date('Y-m-d H:i:s');
|
||
$ip_count = 0;
|
||
$message_model = new Message_Model();
|
||
$database = new Database();
|
||
// contact information
|
||
$contact_message = ORM::factory('message')->where(array
|
||
(
|
||
'type' => Message_Model::$contact_information
|
||
))->find();
|
||
|
||
$contact = $contact_message->text;
|
||
|
||
try
|
||
//try
|
||
{
|
||
$message_model->transaction_start();
|
||
//$message_model->transaction_start();
|
||
// choose which message to update
|
||
switch($message->type)
|
||
{
|
||
case Message_Model::$interrupted_membership_message:
|
||
// delete old redirections
|
||
$database->delete('messages_ip_addresses', array('message_id' => $message_id));
|
||
// find IP addresses with interrupted membership
|
||
$ips = $ip_model->get_ip_addresses_with_interrupted_membership();
|
||
// first sql for inserting transfers
|
||
$sql_insert = "INSERT INTO messages_ip_addresses " .
|
||
"(message_id, ip_address_id, user_id, comment, datetime) VALUES ";
|
||
$values = array();
|
||
// set new redirections in junction table
|
||
foreach($ips as $ip)
|
||
{
|
||
// insert values
|
||
$values[] = "($message->id, $ip->id, $user_id, '', '$datetime')";
|
||
$ip_count++;
|
||
}
|
||
$sql_insert .= implode(",", $values);
|
||
if (!$database->query($sql_insert))
|
||
throw new Exception();
|
||
$ip_count = $message_model->activate_interrupted_membership_message($user_id);
|
||
break;
|
||
case Message_Model::$debtor_message:
|
||
// boundary credit status
|
||
$debtor_boundary = $this->settings->get('debtor_boundary');
|
||
// saved as text, so comparation to empty string is necessary
|
||
if ($debtor_boundary == "")
|
||
{
|
||
$message_model->transaction_rollback();
|
||
//$message_model->transaction_rollback();
|
||
$this->session->set_flash('message', url_lang::lang(
|
||
'texts.Error - debtor credit boundary has not been set.'
|
||
'texts.Error - debtor credit boundary has not been set.'
|
||
));
|
||
url::redirect(url_lang::base().'messages/show_all');
|
||
}
|
||
// delete old redirections
|
||
$database->delete('messages_ip_addresses', array('message_id' => $message_id));
|
||
// finding IP addresses to redirect to debtor message
|
||
$ips = $ip_model->get_ip_addresses_of_debtors($debtor_boundary);
|
||
// first sql for inserting transfers
|
||
$sql_insert = "INSERT INTO messages_ip_addresses " .
|
||
"(message_id, ip_address_id, user_id, comment, datetime) VALUES ";
|
||
$values = array();
|
||
// set new redirections in junction table
|
||
foreach($ips as $ip)
|
||
{
|
||
// insert values
|
||
$values[] = "($message->id, $ip->id, $user_id, '', '$datetime')";
|
||
$ip_count++;
|
||
}
|
||
$sql_insert .= implode(",", $values);
|
||
if (!$database->query($sql_insert))
|
||
throw new Exception();
|
||
$ip_count = $message_model->activate_debtor_message($user_id, $debtor_boundary);
|
||
break;
|
||
case Message_Model::$payment_notice_message:
|
||
// boundary credit status
|
||
$payment_notice_boundary = $this->settings->get('payment_notice_boundary');
|
||
if ($payment_notice_boundary == "")
|
||
{
|
||
$message_model->transaction_rollback();
|
||
//$message_model->transaction_rollback();
|
||
$this->session->set_flash('message', url_lang::lang(
|
||
'texts.Error - payment notice credit boundary has not been set.'
|
||
'texts.Error - payment notice credit boundary has not been set.'
|
||
));
|
||
url::redirect(url_lang::base().'messages/show_all');
|
||
}
|
||
$debtor_boundary = $this->settings->get('debtor_boundary');
|
||
if ($debtor_boundary == "")
|
||
{
|
||
$message_model->transaction_rollback();
|
||
//$message_model->transaction_rollback();
|
||
$this->session->set_flash('message', url_lang::lang(
|
||
'texts.Error - debtor credit boundary has not been set.'
|
||
'texts.Error - debtor credit boundary has not been set.'
|
||
));
|
||
url::redirect(url_lang::base().'messages/show_all');
|
||
}
|
||
// delete old redirections
|
||
$database->delete('messages_ip_addresses', array('message_id' => $message_id));
|
||
// finding IP addresses to redirect to debtor message
|
||
$ips = $ip_model->get_ip_addresses_of_almostdebtors(
|
||
$payment_notice_boundary, $debtor_boundary
|
||
);
|
||
// first sql for inserting transfers
|
||
$sql_insert = "INSERT INTO messages_ip_addresses ".
|
||
"(message_id, ip_address_id, user_id, comment, datetime) VALUES ";
|
||
$values = array();
|
||
// set new redirections in junction table
|
||
foreach($ips as $ip)
|
||
{
|
||
// insert values
|
||
$values[] = "($message->id, $ip->id, $user_id, '', '$datetime')";
|
||
$ip_count++;
|
||
}
|
||
$sql_insert .= implode(",", $values);
|
||
if (!$database->query($sql_insert))
|
||
throw new Exception();
|
||
$ip_count = $message_model->activate_payment_notice_message($user_id, $payment_notice_boundary, $debtor_boundary);
|
||
break;
|
||
default:
|
||
Controller::warning(PARAMETER);
|
||
}
|
||
$message_model->transaction_commit();
|
||
//$message_model->transaction_commit();
|
||
$this->session->set_flash('message', url_lang::lang(
|
||
'texts.Redirection "%s" for %d IP addresses have been activated.',
|
||
array
|
||
... | ... | |
);
|
||
url::redirect(url_lang::base().'messages/show_all');
|
||
}
|
||
/*
|
||
catch (Exception $e)
|
||
{
|
||
$message_model->transaction_rollback();
|
||
... | ... | |
));
|
||
url::redirect(url_lang::base().'messages/show_all');
|
||
}
|
||
*
|
||
*/
|
||
}
|
||
|
||
}
|
freenetis/branches/testing/application/controllers/redirect.php | ||
---|---|---|
function settings()
|
||
{
|
||
// access control
|
||
if (!$this->acl_check_edit('Settings_Controller', 'system'))
|
||
if (!$this->acl_check_edit('Messages_Controller', 'message'))
|
||
Controller::error(ACCESS);
|
||
// creating of new forge
|
||
$this->form = new Forge(url_lang::base()."redirect/settings", '', 'POST', array('id' => 'article_form'));
|
||
... | ... | |
$messages = $message_model->find_all();
|
||
foreach($messages as $message)
|
||
{
|
||
// whitelisted IP addresses can be redirected only by redirections which ignore whitelist
|
||
//if ($ip->whitelisted && !$message->ignore_whitelist)
|
||
// continue;
|
||
// IP address can be manually redirected only to user message, interrupted membership message, debtor message, payment notice message
|
||
if ($message->type == Message_Model::$user_message ||
|
||
$message->type == Message_Model::$interrupted_membership_message ||
|
||
... | ... | |
* @param $from Tells where return after setting this redirection
|
||
* @return unknown_type
|
||
*/
|
||
function delete($ip_address_id, $message_id, $from = 'ip_address')
|
||
function delete($ip_address_id = null, $message_id = null, $from = 'ip_address')
|
||
{
|
||
if (!$this->acl_check_delete('Messages_Controller', 'ip_address'))
|
||
Controller::error(ACCESS);
|
||
if (!isset($ip_address_id) || !isset($message_id))
|
||
Controller::warning(PARAMETER);
|
||
$where = array();
|
||
if (is_numeric($ip_address_id))
|
||
$array['ip_address_id'] = $ip_address_id;
|
||
... | ... | |
* @param $message_id
|
||
* @return unknown_type
|
||
*/
|
||
function delete_from_member($member_id, $message_id)
|
||
function delete_from_member($member_id = null, $message_id = null)
|
||
{
|
||
// access rights
|
||
if (!$this->acl_check_delete('Messages_Controller', 'member'))
|
||
Controller::error(ACCESS);
|
||
if (!isset($member_id) || !isset($message_id))
|
||
Controller::warning(PARAMETER);
|
||
$db = new Database();
|
||
$ip_model = new Ip_address_Model();
|
||
$ips = $ip_model->get_ip_addresses_of_member($member_id);
|
||
... | ... | |
// access rights
|
||
if (!$this->acl_check_edit('Messages_Controller', 'member'))
|
||
Controller::error(ACCESS);
|
||
if (!isset($member_id))
|
||
Controller::warning(PARAMETER);
|
||
$whitelist_array[Ip_address_Model::$no_whitelist] = url_lang::lang('texts.No whitelist');
|
||
$whitelist_array[Ip_address_Model::$permanent_whitelist] = url_lang::lang('texts.Permanent whitelist');
|
||
$whitelist_array[Ip_address_Model::$temporary_whitelist] = url_lang::lang('texts.Temporary whitelist');
|
||
... | ... | |
}
|
||
}
|
||
|
||
|
||
/**
|
||
* Provides info on ip address and tells users about their account in freenetis - how to log in,
|
||
* view payments, view devices etc.
|
||
*
|
||
* @todo CHANGE IP
|
||
* @author Jiri Svitak
|
||
* @return unknown_type
|
||
*/
|
||
function info()
|
||
{
|
||
// initialization
|
||
$content = '';
|
||
$subnet_name = '';
|
||
$member_name = '';
|
||
$member_id = '';
|
||
$login = '';
|
||
$continue = 0;
|
||
$device_engineers = array();
|
||
$device_admins = array();
|
||
// trying to find remote ip address in database
|
||
$ip_address = ORM::factory('ip_address')->where('ip_address', server::remote_addr())->find();
|
||
// engineer of user's device, owner of ip address - if available
|
||
if ($ip_address->id != 0)
|
||
{
|
||
$member_name = $ip_address->iface->device->user->member->name;
|
||
$member_id = $ip_address->iface->device->user->member_id;
|
||
$login = $ip_address->iface->device->user->login;
|
||
$device_engineer_model = new Device_engineer_Model();
|
||
$device_engineers = $device_engineer_model->get_device_engineers($ip_address->iface->device_id);
|
||
}
|
||
// trying to find subnet of visitor's ip address
|
||
$subnet_model = new Subnet_Model();
|
||
$subnet = $subnet_model->get_subnet_of_ip_address(server::remote_addr());
|
||
// remote ip address belongs to some subnet
|
||
if (!empty($subnet))
|
||
{
|
||
//$subnet = $arr_subnets[0];
|
||
$subnet_name = $subnet->name;
|
||
// finding subnet's gateway
|
||
$ip_address_model = new Ip_address_Model();
|
||
$ap = $ip_address_model->get_gateway_of_subnet($subnet->network_address);
|
||
// admin of access point - only if ap exists
|
||
if ($ap->id != 0)
|
||
{
|
||
// if ap has interface
|
||
$iface = new Iface_Model($ap->iface_id);
|
||
if ($iface->id != 0)
|
||
{
|
||
$device_admin_model = new Device_admin_Model();
|
||
$device_admins = $device_admin_model->get_device_admins($ap->iface->device_id);
|
||
}
|
||
}
|
||
}
|
||
// information for members how to log in to system
|
||
$content = $this->settings->get('info');
|
||
// view
|
||
$view = new View('redirect');
|
||
$view->title = url_lang::lang('texts.Redirection');
|
||
$view->subnet_name = $subnet_name;
|
||
$view->ip_address = '';
|
||
$view->member_name = $member_name;
|
||
$view->member_id = $member_id;
|
||
$view->login = $login;
|
||
$view->device_engineers = $device_engineers;
|
||
$view->device_admins = $device_admins;
|
||
$view->content = $content;
|
||
$view->continue = $continue;
|
||
$view->render(true);
|
||
}
|
||
|
||
/**
|
||
* Shows members with at least one whitelisted IP address.
|
freenetis/branches/testing/redirection/info.php | ||
---|---|---|
<?php
|
||
/**
|
||
* Shows redirection page, written in pure PHP due to performance reasons,
|
||
* it is not necessary to load whole Kohana framework.
|
||
* @author Jiri Svitak
|
||
*/
|
||
// loading to access database password
|
||
define('SYSPATH', str_replace('\\', '/', realpath('system')).'/');
|
||
require '../config.php';
|
||
// connect to database
|
||
$link = mysql_connect($config['db_host'], $config['db_user'], $config['db_password']) or die(mysql_error());
|
||
mysql_query("SET CHARACTER SET utf8", $link) or die(mysql_error());
|
||
mysql_query("SET NAMES utf8", $link) or die(mysql_error());
|
||
mysql_select_db($config['db_name']) or die(mysql_error());
|
||
// obtain ip address
|
||
$ip_address = $_SERVER['REMOTE_ADDR'];
|
||
// content of redirection message
|
||
$info_query = "
|
||
SELECT ip.ip_address, ip.whitelisted, s.name AS subnet_name,
|
||
mm.name AS member_name, mm.id AS member_id,
|
||
mm.variable_symbol
|
||
FROM ip_addresses ip
|
||
JOIN subnets s ON s.id = ip.subnet_id
|
||
JOIN ifaces i ON i.id = ip.iface_id
|
||
JOIN devices d ON d.id = i.device_id
|
||
JOIN users u ON u.id = d.user_id
|
||
JOIN members mm ON mm.id = u.member_id
|
||
WHERE ip.ip_address = '$ip_address'
|
||
";
|
||
$info_result = mysql_query($info_query, $link) or die(mysql_error());
|
||
$info = mysql_fetch_array($info_result);
|
||
// text in left contact panel,
|
||
// it asssumed that after installation, there is always contact message with ID 1
|
||
$contact_query = "SELECT * FROM messages WHERE ID = 1";
|
||
$contact_result = mysql_query($contact_query, $link) or die(mysql_error());
|
||
$contact_array = mysql_fetch_array($contact_result) or die(mysql_error());
|
||
$contact = $contact_array['text'];
|
||
// replace tags in curly brackets to contain particular values associated to visitor
|
||
foreach ($info as $key => $value)
|
||
{
|
||
if ($key != 'text')
|
||
{
|
||
$contact = str_replace('{'.$key.'}', $value, $contact);
|
||
}
|
||
}
|
||
// redirection logo url
|
||
$logo_query = "SELECT name, value FROM config WHERE name = 'redirection_logo_url'";
|
||
$logo_result = mysql_query($logo_query, $link) or die(mysql_error());
|
||
$logo_array = mysql_fetch_array($logo_result);
|
||
if (!$logo_array)
|
||
{
|
||
echo 'Logo url has not been set, configure your redirection settings.';
|
||
die();
|
||
}
|
||
$logo = $logo_array['value'];
|
||
// close database connection
|
||
mysql_close($link);
|
||
?>
|
||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||
<head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||
<?php // useful settings for expiration prevent caching of this website ?>
|
||
<meta http-equiv="Expires" content="0" />
|
||
<meta http-equiv="Cache-Control" content="No-Cache" />
|
||
<title>Freenetis</title>
|
||
<link href="../media/css/style.css" rel="stylesheet" type="text/css" />
|
||
<style type="text/css">
|
||
#content-padd h2 {margin: 10px 0px;}
|
||
#content-padd h3 {margin: 10px 0px;}
|
||
#content-padd li {margin-left: 20px;}
|
||
#content-padd a {font-weight: bold;}
|
||
td {width: 100px;}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div id="main">
|
||
<div id="header">
|
||
<h1 style="position:absolute;
|
||
top:24px;
|
||
left:18px;
|
||
background:url(<?php echo $logo ?>);
|
||
width:212px;
|
||
height:49px;
|
||
background-repeat:no-repeat;
|
||
"></h1>
|
||
<div class="status">
|
||
|
||
</div>
|
||
<div class="map"></div>
|
||
</div>
|
||
<div id="middle">
|
||
<div id="menu">
|
||
<div id="menu-padd">
|
||
<?php echo $contact; ?>
|
||
</div>
|
||
</div>
|
||
<div id="content">
|
||
<div id="content-padd" style="margin:10px">
|
||
|
||
</div>
|
||
</div>
|
||
<div class="clear"></div>
|
||
</div>
|
||
</div>
|
||
</body>
|
||
</html>
|
freenetis/branches/testing/redirection/cancel.php | ||
---|---|---|
|
||
|
||
// no redirection found - perhaps visiting this page by mistake?
|
||
if (!$message)
|
||
if ($message && count($message) > 0)
|
||
{
|
||
echo 'No redirection found for this IP address, so there is nothing to be canceled.';
|
||
die();
|
||
}
|
||
// cannot be canceled
|
||
if ($message['self_cancel'] == 0)
|
||
{
|
||
echo 'This redirection cannot be canceled by user himself.';
|
||
die();
|
||
}
|
||
// canceling of redirection
|
||
if ($message['self_cancel'] == 1)
|
||
{
|
||
// gets ip addresses and redirection of member
|
||
$ip_query = "SELECT ip.id AS ip_address_id, ip.ip_address, ip.whitelisted,
|
||
m.id AS message_id, m.name AS message, m.type,
|
||
".$message['member_id']." AS member_id
|
||
FROM ip_addresses ip
|
||
JOIN ifaces i ON ip.iface_id = i.id
|
||
JOIN devices d ON i.device_id = d.id
|
||
JOIN users u ON d.user_id = u.id
|
||
LEFT JOIN messages_ip_addresses mip ON mip.ip_address_id = ip.id
|
||
LEFT JOIN messages m ON m.id = mip.message_id
|
||
WHERE u.member_id = ".$message['member_id'];
|
||
$ip_result = mysql_query($ip_query, $link);
|
||
$ip_id_array = array();
|
||
while($item = mysql_fetch_array($ip_result))
|
||
// cannot be canceled
|
||
if ($message['self_cancel'] == 0)
|
||
{
|
||
$ip_id_array[] = $item['ip_address_id'];
|
||
echo 'This redirection cannot be canceled by user himself.';
|
||
die();
|
||
}
|
||
$d_query = "DELETE FROM messages_ip_addresses WHERE ip_address_id IN (".implode(",",$ip_id_array).")
|
||
AND message_id = ".$message['message_id'];
|
||
mysql_query($d_query, $link);
|
||
// canceling of redirection
|
||
if ($message['self_cancel'] == 1)
|
||
{
|
||
// gets ip addresses and redirection of member
|
||
$ip_query = "SELECT ip.id AS ip_address_id, ip.ip_address, ip.whitelisted,
|
||
m.id AS message_id, m.name AS message, m.type,
|
||
".$message['member_id']." AS member_id
|
||
FROM ip_addresses ip
|
||
JOIN ifaces i ON ip.iface_id = i.id
|
||
JOIN devices d ON i.device_id = d.id
|
||
JOIN users u ON d.user_id = u.id
|
||
LEFT JOIN messages_ip_addresses mip ON mip.ip_address_id = ip.id
|
||
LEFT JOIN messages m ON m.id = mip.message_id
|
||
WHERE u.member_id = ".$message['member_id'];
|
||
$ip_result = mysql_query($ip_query, $link);
|
||
$ip_id_array = array();
|
||
while($item = mysql_fetch_array($ip_result))
|
||
{
|
||
$ip_id_array[] = $item['ip_address_id'];
|
||
}
|
||
$d_query = "DELETE FROM messages_ip_addresses WHERE ip_address_id IN (".implode(",",$ip_id_array).")
|
||
AND message_id = ".$message['message_id'];
|
||
mysql_query($d_query, $link);
|
||
}
|
||
else
|
||
{
|
||
$d_query = "DELETE FROM messages_ip_addresses WHERE ip_address_id = ".$message['ip_address_id'].
|
||
" AND message_id = ".$message['message_id'];
|
||
mysql_query($d_query, $link);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
$d_query = "DELETE FROM messages_ip_addresses WHERE ip_address_id = ".$message['ip_address_id'].
|
||
" AND message_id = ".$message['message_id'];
|
||
mysql_query($d_query, $link);
|
||
}
|
||
// message after redirection
|
||
$message_query = "SELECT * FROM messages WHERE ID = 2";
|
||
$message_result = mysql_query($message_query, $link) or die(mysql_error());
|
||
$message = mysql_fetch_array($message_result);
|
||
$content = $message['text'];
|
||
// contact information
|
||
|
||
|
||
// logo redirection url
|
||
$logo_query = "SELECT name, value FROM config WHERE name = 'redirection_logo_url'";
|
||
$logo_result = mysql_query($logo_query, $link) or die(mysql_error());
|
freenetis/branches/testing/redirection/index.php | ||
---|---|---|
if (isset($_GET['ip_address']))
|
||
{
|
||
$ip_address = $_GET['ip_address'];
|
||
$get = true;
|
||
}
|
||
// otherwise it is real redirection, we have to use ip address of remote visitor
|
||
else
|
||
{
|
||
$ip_address = $_SERVER['REMOTE_ADDR'];
|
||
$get = false;
|
||
}
|
||
// check validity of ip address
|
||
if (!preg_match ("/^((25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|[0-9])\.((25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|[0-9])\.((25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|[0-9])\.((25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|[0-9])$/", $ip_address))
|
||
... | ... | |
SELECT ms.id, ms.text, ms.self_cancel, ip.ip_address, ip.whitelisted, s.name AS subnet_name,
|
||
mm.name AS member_name, mm.id AS member_id,
|
||
mm.variable_symbol, a.balance, mip.comment
|
||
FROM messages ms
|
||
JOIN messages_ip_addresses mip ON ms.id = mip.message_id
|
||
JOIN ip_addresses ip ON ip.id = mip.ip_address_id
|
||
FROM ip_addresses ip
|
||
JOIN subnets s ON s.id = ip.subnet_id
|
||
JOIN ifaces i ON i.id = ip.iface_id
|
||
JOIN devices d ON d.id = i.device_id
|
||
JOIN users u ON u.id = d.user_id
|
||
JOIN members mm ON mm.id = u.member_id
|
||
LEFT JOIN accounts a ON a.member_id = mm.id AND mm.id <> 1
|
||
LEFT JOIN messages_ip_addresses mip ON ip.id = mip.ip_address_id
|
||
LEFT JOIN messages ms ON ms.id = mip.message_id
|
||
WHERE ip.ip_address = '$ip_address'
|
||
ORDER BY ms.self_cancel DESC, mip.datetime ASC
|
||
LIMIT 1";
|
||
$message_result = mysql_query($message_query, $link) or die(mysql_error());
|
||
$message = mysql_fetch_array($message_result);
|
||
// ip adress is found in the database
|
||
if ($message && count($message) > 0)
|
||
{
|
||
// user has not send ip address through get parameter to see preview
|
||
if (!$get)
|
||
{
|
||
// typical situation: user sees message that redirection has been canceled
|
||
// and he should wait, but he is anxious and clicks on some given link
|
||
// but no redirection is available to him, so we redirect him again
|
||
// on canceling page
|
||
$header = 'Location: http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'].'cancel.php';
|
||
//echo $header; die();
|
||
header($header);
|
||
die();
|
||
}
|
||
// two options are possible - no redirection has been set, so user just sees preview
|
||
// or it is our actual redirection which should be shown to user
|
||
$content = $message['text'];
|
||
}
|
||
// if no message found for given ip address, than it is unknown page
|
||
// or no redirection has been set for this ip address
|
||
// ip address has not been found in database
|
||
else
|
||
{
|
||
$ip_query = "
|
||
SELECT id
|
||
FROM ip_addresses
|
||
WHERE ip_address = '$ip_address'
|
||
";
|
||
$ip_result = mysql_query($ip_query, $link) or die(mysql_error());
|
||
$ip = mysql_fetch_array($ip_result);
|
||
// ip address has been found, but no redirection found for it, so empty page will be displayed
|
||
if ($ip && count($ip) > 0)
|
||
{
|
||
$content = "No redirection has been found for this IP address.";
|
||
}
|
||
// no ip address in database found
|
||
else
|
||
{
|
||
// unknown device message, we assume that this message is always installed with id 3
|
||
$message_query = "
|
||
SELECT ms.text,
|
||
(
|
||
SELECT name
|
||
FROM subnets s
|
||
WHERE inet_aton(netmask) & inet_aton('$ip_address') = inet_aton(network_address)
|
||
) AS subnet_name,
|
||
'$ip_address' AS ip_address,
|
||
'???' AS member_name,
|
||
'???' AS member_id,
|
||
'???' AS balance,
|
||
'???' AS variable_symbol,
|
||
'???' AS comment
|
||
FROM messages ms
|
||
WHERE ms.id = 3";
|
||
$message_result = mysql_query($message_query, $link) or die(mysql_error());
|
||
$message = mysql_fetch_array($message_result);
|
||
$content = $message['text'];
|
||
}
|
||
// unknown device message, we assume that this message is always installed with id 3
|
||
$message_query = "
|
||
SELECT ms.text,
|
||
(
|
||
SELECT name
|
||
FROM subnets s
|
||
WHERE inet_aton(netmask) & inet_aton('$ip_address') = inet_aton(network_address)
|
||
) AS subnet_name,
|
||
'$ip_address' AS ip_address,
|
||
'???' AS member_name,
|
||
'???' AS member_id,
|
||
'???' AS balance,
|
||
'???' AS variable_symbol,
|
||
'???' AS comment
|
||
FROM messages ms
|
||
WHERE ms.id = 3";
|
||
$message_result = mysql_query($message_query, $link) or die(mysql_error());
|
||
$message = mysql_fetch_array($message_result);
|
||
$content = $message['text'];
|
||
}
|
||
// text in left contact panel,
|
||
// it asssumed that after installation, there is always contact message with ID 1
|
||
... | ... | |
}
|
||
$logo = $logo_array['value'];
|
||
// self cancelable messages have additional anchor for self canceling placed in footer
|
||
/*
|
||
$scu_query = "SELECT name, value FROM config WHERE name = 'self_cancel_url'";
|
||
$scu_result = mysql_query($scu_query, $link) or die(mysql_error());
|
||
$scu_array = mysql_fetch_array($scu_result);
|
||
if (!$scu_array) { echo 'self_cancel_url not set'; die(mysql_error()); }
|
||
$scu = $scu_array['value'];
|
||
*/
|
||
$sct_query = "SELECT name, value FROM config WHERE name = 'self_cancel_text'";
|
||
$sct_result = mysql_query($sct_query, $link) or die(mysql_error());
|
||
$sct_array = mysql_fetch_array($sct_result);
|
||
... | ... | |
}
|
||
$sct = $sct_array['value'];
|
||
if ($message['self_cancel'] > 0)
|
||
//$footer = '<a href="'.$scu.'">'.$sct.'</a>';
|
||
$footer = '<a href="cancel.php">'.$sct.'</a>';
|
||
else
|
||
$footer = '';
|
Také k dispozici: Unified diff
predelana info stranka, chytrejsi logika pri ukonceni presmerovani, opravy chyb, upravy, predelavky presmerovani