Revize 917
Přidáno uživatelem Jiří Sviták před více než 13 roky(ů)
freenetis/branches/redirection/application/i18n/cs_CZ/texts.php | ||
---|---|---|
'redirection has been successfully update' => 'Přesměrování bylo úspěšně upraveno.',
|
||
'redirection has been successfully set' => 'Přesměrování bylo úspěšně nastaveno.',
|
||
'redirection logs' => 'Logy přesměrování',
|
||
'redirection "%s" for %d ip addresses have been activated' => 'Přesměrování "%s" pro %d IP adres bylo aktivováno.',
|
||
'redirection records' => 'Záznamy přesměrování',
|
||
'redirection settings' => 'Nastavení přesměrování',
|
||
'redirection settings have been successfully updated' => 'Nastavení přesměrování bylo úspěšně upraveno.',
|
||
... | ... | |
'updated' => 'Upraveno',
|
||
'upload bank transfers listing' => 'Nahrát bankovní výpis',
|
||
'url addresses without index' => 'URL adresy bez index.php.',
|
||
'url for self cancel possibility' => 'URL pro možnost samozrušení',
|
||
'url settings' => 'Nastavení URL',
|
||
'user' => 'Uživatel',
|
||
'user acceptation' => 'Potvrzení uživatelem',
|
freenetis/branches/redirection/application/i18n/cs_CZ/help.php | ||
---|---|---|
'recalculate_account_balances' => 'Primárním zdrojem o stavu financí v systému jsou převody. Zůstatky na účtech byly dříve pokaždé počítány na požádání z převodů. Nyní si každý účet ukládá svůj zůstatek kvůli vyšší rychlosti. Tuto funkci použijete v případě přechodu na verzi systému, která tuto optimalizaci obsahuje.',
|
||
'recalculate_fees' => 'Pro primární strhávání členských příspěvků používejte funkci pro globální strhávání členských příspěvků v Účetním deníku. Tuto funkci používejte opatrně a to jen v případě, že máte správně strženy všechny členské příspěvky pro všechny členy od založení sdružení až po současné datum. Pak můžete tomuto členovi přepočítat stržení členských příspěvků v případě, že u něj došlo k nutnosti je přepočítat, např. chybné datum vstupu, vznikla nutnost přidat přerušení členství apod.',
|
||
'recalculate_entrance_fees' => 'Pro primární strhávání vstupních příspěvků používejte funkci pro globální strhávání v účetním deníku. Tuto funkci používejte jen v případě, že došlo k nějakému omylu, například, že měl zaplatit vstupní a pak se ukázalo, že nemusel.',
|
||
'self_cancel_url' => 'URL, která bude v odkazu pro zrušení přesměrování, které si může člen zrušit sám. Typicky je to adresa na centrální bráně, na které běží lighthttpd web server, který má na této adrese HTTP temporary redirect, který směřuje na stránku Freenetisu, která informuje člena o ukončení přesměrování. Ovšem kam bude směřovat tento temporary redirect si můžete na stránce nastavit sami.',
|
||
'service' => 'Je-li pro tuto IP adresu zapnuta služba, pak je tato IP adresa využívána pro Radius. Typicky jde o IP adresy aktivních síťových prvků, na které je se možné pomocí Radiusu přihlásit.',
|
||
'set_whitelist_to_member' => 'Trvalá bílá listina je seznam takových IP adres, pro které neplatí přesměrování. Jde například o důležitou partnerskou instituci zapojenou do sítě, například městský úřad apod. Všechna systémová přesměrování tedy nemohou ve výchozím stavu obtěžovat počítače s IP adresou na bílé listině. Lze ovšem vytvořit takové zprávy, které budou ignorovat tuto listinu, např. informování o nadcházejícím výpadku. Pro dočasnou bílou listinu platí to samé, ale IP adresy v ní jsou po určeném čase z této listiny mazány. Např. uživatel byl přesměrován kvůli neplacení a chceme mu umožnit krátkodobý přístup na internet do internetového bankovnictví.',
|
||
'unidentified_transfers' => 'Neidentifikované platby jsou všechny příchozí bankovní platby, které nebyl náš systém schopen z různých důvodů automaticky rozpoznat. Typicky se jedná o platby s chybným variabilním symbolem. Pokud zde svoji platbu najdete, pak kontaktujte hospodáře sdružení pro její správné přiřazení.',
|
freenetis/branches/redirection/application/models/ip_address.php | ||
---|---|---|
function get_ip_addresses_of_debtors($debtor_boundary)
|
||
{
|
||
return $this->db->query("
|
||
SELECT ip.id, ip.ip_address, ip.whitelisted
|
||
SELECT DISTINCT ip.id, ip.ip_address, ip.whitelisted
|
||
FROM ip_addresses ip
|
||
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 m ON m.id = u.member_id
|
||
JOIN account_balances ab ON ab.member_id = m.id AND m.id <> 1
|
||
WHERE ab.balance < $debtor_boundary
|
||
JOIN accounts a ON a.member_id = m.id AND m.id <> 1
|
||
WHERE a.balance < $debtor_boundary
|
||
");
|
||
}
|
||
|
||
... | ... | |
");
|
||
}
|
||
|
||
/**
|
||
* Returns ip addresses from database including their additional information.
|
||
* Ip addresses are selected by their string form saved in array. This
|
||
* array was received by HTTP POST from central gateway.
|
||
* @author Jiri Svitak
|
||
* @param <type> $ip_address_array
|
||
* @return <type>
|
||
*/
|
||
function get_ip_addresses_from_array($ip_address_array)
|
||
{
|
||
$ips_cancelable_by_member = $this->db->query("
|
||
SELECT * FROM
|
||
(
|
||
SELECT * FROM
|
||
(
|
||
SELECT ip.id AS ip_address_id, m.self_cancel, m2.id AS member_id
|
||
FROM ip_addresses ip
|
||
JOIN messages_ip_addresses mip ON mip.ip_address_id = ip.id
|
||
JOIN messages m ON m.id = mip.message_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 m2 ON m.id = u.member_id
|
||
WHERE ip.ip_address IN (".implode(',', $ip_address_array).")
|
||
ORDER BY m.self_cancel DESC, mip.datetime ASC
|
||
) q
|
||
GROUP BY q.ip_address_id
|
||
) p
|
||
WHERE p.self_cancel = ".Message_Model::$self_cancel_member."
|
||
");
|
||
$member_array = array();
|
||
foreach($ips_cancelable_by_member as $ip)
|
||
{
|
||
$member_array[] = $ip->member_id;
|
||
}
|
||
$ips = $this->db->query("
|
||
SELECT DISTINCT q.ip_address_id FROM
|
||
(
|
||
SELECT ip.id AS ip_address_id
|
||
FROM ip_addresses ip
|
||
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 m ON m.id = u.member_id
|
||
WHERE m.id IN (".implode(',', $member_array).")
|
||
UNION
|
||
SELECT ip.id AS ip_address_id
|
||
FROM ip_addresses ip
|
||
WHERE ip.ip_address IN (".implode(',', $ip_address_array).")
|
||
) q
|
||
");
|
||
return $ips;
|
||
}
|
||
|
||
|
||
/**
|
||
* Deletes all redirections containing IP address in array from redirection junction table.
|
||
* @author Jiri Svitak
|
||
* @param <type> $ip_id_array
|
||
* @return <type>
|
||
*/
|
||
function delete_ip_addresses_from_array($ip_id_array)
|
||
{
|
||
return $this->db->query("
|
||
DELETE FROM messages_ip_addresses WHERE ip_address_id IN (".implode(',',$ip_id_array).")");
|
||
}
|
||
|
||
/**
|
||
* Gets ip adddresses and their redirections by given array of ip address ids.
|
||
* @author Jiri Svitak
|
||
* @param <type> $ip_id_array
|
||
*/
|
||
function get_redirected_ip_addresses_from_ids($ip_id_array)
|
||
{
|
||
return $this->db->query("
|
||
SELECT ip.id AS ip_address_id, ip.ip_address, m.text
|
||
FROM ip_addresses ip
|
||
JOIN messages_ip_addresses mip ON mip.ip_address_id = ip.id
|
||
JOIN messages m ON m.id = mip.message_id
|
||
WHERE ip.id IN (".implode(',', $ip_id_array).")
|
||
");
|
||
}
|
||
|
||
}
|
||
|
||
?>
|
freenetis/branches/redirection/application/controllers/web_interface.php | ||
---|---|---|
{
|
||
echo "$range->subnet_range\n";
|
||
}
|
||
|
||
}
|
||
|
||
/**
|
||
... | ... | |
*/
|
||
function already_seen()
|
||
{
|
||
print_r($_POST);
|
||
die();
|
||
//print_r($_POST); die();
|
||
// IP address to cancel redirection
|
||
$ip_string = $_POST['self_cancelable'];
|
||
$ip_array = explode(";", $ip_string);
|
||
$db = new Database();
|
||
foreach ($ip_array as $ip_address)
|
||
$ip_address_array = explode(";", $ip_string);
|
||
// select ids of received ip addresses
|
||
$ip_model = new Ip_address_Model();
|
||
$ips = $ip_model->get_ip_addresses_from_array($ip_address_array);
|
||
// deleting redirection
|
||
$ip_id_array = array();
|
||
foreach ($ips as $ip)
|
||
{
|
||
// gets currently active redirection for IP address
|
||
$message = self::get_current_message($ip_address);
|
||
// deletes this redirection
|
||
$db->delete('messages_ip_addresses', array('message_id' => $message->message_id, 'ip_address_id' => $message->ip_address_id));
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Generates static html page with name of IP address. Redirection is done by redirecting to this html page.
|
||
* More redirections at the same time may be set. This function determines current active redirection.
|
||
* @param $ip_address
|
||
* @return unknown_type
|
||
*/
|
||
function redirect_content($ip_address = null)
|
||
{
|
||
// load contact information from database
|
||
$contact = '';
|
||
$contact_information = ORM::factory('message')->where(array('type' => Message_Model::$contact_information))->find();
|
||
if ($contact_information)
|
||
{
|
||
$contact = $contact_information->text;
|
||
$ip_id_array[] = $ip->ip_address_id;
|
||
}
|
||
// load message
|
||
$content = '';
|
||
$footer = '';
|
||
// special html page for unknown device message
|
||
if ($ip_address == 'unknown_device_message')
|
||
$ip_model->delete_ip_addresses_from_array($ip_id_array);
|
||
// get new redirections for these ip addresses and generate new pages
|
||
$contact_message = ORM::factory('message')->where(array('type' => Message_Model::$contact_information))->find();
|
||
$contact = $contact_message->text;
|
||
$ips = $ip_model->get_redirected_ip_addresses_from_ids($ip_id_array);
|
||
foreach ($ips as $ip)
|
||
{
|
||
$message = ORM::factory('message')->where(array('type' => Message_Model::$unknown_device_message))->find();
|
||
$ip_address = server::remote_addr();
|
||
$cancel_link = $ip->self_cancel > 0 ? html::anchor($this->settings->get('self_cancel_url'), url_lang::lang('texts.I accept this message and I want to cancel this redirection')) : '';
|
||
redirect::update($ip->ip_address, $contact, $ip->text, $cancel_link);
|
||
}
|
||
// special html page for cancel message
|
||
elseif ($ip_address == 'cancel_message')
|
||
{
|
||
$message = ORM::factory('message')->where(array('type' => Message_Model::$cancel_message))->find();
|
||
$ip_address = server::remote_addr();
|
||
}
|
||
// html page with current message for given IP address
|
||
else
|
||
{
|
||
$message = self::get_current_message($ip_address);
|
||
}
|
||
|
||
// has been active redirection message found for current ip address?
|
||
if ($message)
|
||
{
|
||
$content = $message->text;
|
||
// has been set personal comment from administrator?
|
||
if (isset($message->comment))
|
||
{
|
||
$content = $content."<br />\n<h2>".url_lang::lang('texts.Personal comment from administrator')."</h2>\n".$message->comment;
|
||
}
|
||
// has been set possibility of self-canceling message?
|
||
if (isset($message->self_cancel))
|
||
{
|
||
// is self-cancel truly enabled?
|
||
if ($message->self_cancel == Message_Model::$self_cancel_ip ||
|
||
$message->self_cancel == Message_Model::$self_cancel_member)
|
||
{
|
||
$footer = html::anchor(url_lang::base().'static/self_cancel', url_lang::lang('texts.I accept this message and I want to cancel this redirection.'));
|
||
}
|
||
}
|
||
}
|
||
else
|
||
// no redirection set? this may happen, so redirection page will inform user that redirection has been already canceled
|
||
{
|
||
$message = ORM::factory('message')->where(array('type' => Message_Model::$cancel_message))->find();
|
||
$content = $message->text;
|
||
}
|
||
// replace contact and content
|
||
$contact = Redirect_Controller::replace($contact, $ip_address);
|
||
$content = Redirect_Controller::replace($content, $ip_address);
|
||
// view
|
||
$view = new View('redirect_content');
|
||
$view->title = url_lang::lang('texts.Redirection');
|
||
$view->contact = $contact;
|
||
$view->content = $content;
|
||
$view->footer = $footer;
|
||
$view->render(true);
|
||
}
|
||
|
||
/**
|
||
* Gets message current redirection message for given IP address.
|
||
* @author Jiri Svitak
|
||
* @param unknown_type $ip_address
|
||
*/
|
||
static function get_current_message($ip_address)
|
||
{
|
||
$db = new Database();
|
||
return $db->query("
|
||
SELECT m.text, mip.message_id, mip.ip_address_id, mip.comment, m.self_cancel,
|
||
FROM messages m
|
||
JOIN messages_ip_addresses mip ON mip.message_id = m.id
|
||
JOIN ip_addresses ip ON mip.ip_address_id = ip.id
|
||
WHERE ip.ip_address = '$ip_address'
|
||
ORDER BY m.self_cancel DESC, mip.datetime ASC
|
||
LIMIT 1
|
||
")->current();
|
||
}
|
||
|
||
|
||
|
||
/**
|
freenetis/branches/redirection/application/controllers/messages.php | ||
---|---|---|
$ip_model = new Ip_address_Model();
|
||
$user_id = $this->session->get('user_id');
|
||
$datetime = date('Y-m-d H:i:s');
|
||
$db = new Message_Model();
|
||
$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
|
||
{
|
||
//$db->transaction_start();
|
||
//$message_model->transaction_start();
|
||
// choose which message to update
|
||
switch($message->type)
|
||
{
|
||
... | ... | |
redirect::update('unknown_device_message', $contact, $content, '');
|
||
break;
|
||
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
|
||
... | ... | |
redirect::update($ip->ip_address, $contact, $content, '');
|
||
// insert values
|
||
$values[] = "($message->id, $ip->id, $user_id, '', '$datetime')";
|
||
$ip_count++;
|
||
}
|
||
}
|
||
$sql_insert .= implode(",", $values);
|
||
... | ... | |
url::redirect(url_lang::base().'messages/show_all');
|
||
}
|
||
// delete old redirections
|
||
$db->delete('messages_ip_addresses', array('message_id' => $message_id));
|
||
$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
|
||
... | ... | |
redirect::update($ip->ip_address, $contact, $content, '');
|
||
// insert values
|
||
$values[] = "($message->id, $ip->id, $user_id, '', '$datetime')";
|
||
$ip_count++;
|
||
}
|
||
}
|
||
$sql_insert .= implode(",", $values);
|
||
... | ... | |
url::redirect(url_lang::base().'messages/show_all');
|
||
}
|
||
// delete old redirections
|
||
$db->delete('messages_ip_addresses', array('message_id' => $message_id));
|
||
$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($payment_notice_boundary);
|
||
// first sql for inserting transfers
|
||
... | ... | |
{
|
||
$content = str_replace('{'.$key.'}', $value, $content);
|
||
}
|
||
redirect::update($ip->ip_address, $contact, $content, '');
|
||
$cancel_link = html::anchor($this->settings->get('self_cancel_url'), url_lang::lang('texts.I accept this message and I want to cancel this redirection'));
|
||
redirect::update($ip->ip_address, $contact, $content, $cancel_link);
|
||
// insert values
|
||
$values[] = "($message->id, $ip->id, $user_id, '', '$datetime')";
|
||
$ip_count++;
|
||
}
|
||
}
|
||
$sql_insert .= implode(",", $values);
|
||
... | ... | |
default:
|
||
Controller::warning(PARAMETER);
|
||
}
|
||
//$db->transaction_commit();
|
||
$this->session->set_flash('message', url_lang::lang('texts.All IP adresses.'));
|
||
//$message_model->transaction_commit();
|
||
$this->session->set_flash('message', url_lang::lang('texts.Redirection "%s" for %d IP addresses have been activated.', array(0=>url_lang::lang('texts.'.$message->name), 1=>$ip_count)));
|
||
url::redirect(url_lang::base().'messages/show_all');
|
||
}
|
||
/*
|
||
catch (Exception $e)
|
||
{
|
||
$db->transaction_rollback();
|
||
$message_model->transaction_rollback();
|
||
$this->session->set_flash('message', url_lang::lang('texts.Error - cannot set redirection.'));
|
||
url::redirect(url_lang::base().'messages/show_all');
|
||
}
|
freenetis/branches/redirection/application/controllers/redirect.php | ||
---|---|---|
$this->form->input('gateway')->label(url_lang::lang('texts.Gateway IP address').":")->value($this->settings->get('gateway'));
|
||
$this->form->input('payment_notice_boundary')->label(url_lang::lang('texts.Payment notice boundary')." (".$this->settings->get('currency')."): ".help::hint('payment_notice_boundary'))->value($this->settings->get('payment_notice_boundary'));
|
||
$this->form->input('debtor_boundary')->label(url_lang::lang('texts.Debtor boundary')." (".$this->settings->get('currency')."): ".help::hint('debtor_boundary'))->value($this->settings->get('debtor_boundary'));
|
||
$this->form->input('self_cancel_url')->label(url_lang::lang('texts.URL for self cancel possibility').": ".help::hint('self_cancel_url'))->value($this->settings->get('self_cancel_url'));
|
||
$this->form->submit('submit')->value(url_lang::lang('texts.Save'));
|
||
special::required_forge_style($this->form, ' *', 'required');
|
||
// form validate
|
Také k dispozici: Unified diff
Prace na novem presmerovani, zejmena presmerovani, ktere si muze clen sam zrusit.