|
<?php defined('SYSPATH') or die('No direct script access.');
|
|
/*
|
|
* This file is part of open source system FreeNetIS
|
|
* and it is released under GPLv3 licence.
|
|
*
|
|
* More info about licence can be found:
|
|
* http://www.gnu.org/licenses/gpl-3.0.html
|
|
*
|
|
* More info about project can be found:
|
|
* http://www.freenetis.org/
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* Controller performs notifications actions.
|
|
* Informs user of system using redirection or email about some action or change.
|
|
*
|
|
* @package Controller
|
|
* @author Michal Kliment
|
|
*/
|
|
class Notifications_Controller extends Controller
|
|
{
|
|
// activate notification
|
|
const ACTIVATE = 1;
|
|
|
|
// keep current settings
|
|
const KEEP = 2;
|
|
|
|
// deactivate notification
|
|
const DEACTIVATE = 3;
|
|
|
|
/**
|
|
* Notification setting for member
|
|
*
|
|
* @author Michal Kliment
|
|
* @param integer $member_id
|
|
*/
|
|
public function member($member_id = NULL)
|
|
{
|
|
// bad parameter
|
|
if (!$member_id || !is_numeric($member_id))
|
|
Controller::warning(PARAMETER);
|
|
|
|
$member = new Member_Model($member_id);
|
|
|
|
// record doesn't exist
|
|
if (!$member->id)
|
|
Controller::error(RECORD);
|
|
|
|
// access control
|
|
if (!$this->acl_check_new('Messages_Controller', 'member', $member->id))
|
|
Controller::error(ACCESS);
|
|
|
|
$headline = __('Notification setting of member').' '.$member->name;
|
|
|
|
// gets all user messages
|
|
$messages = ORM::factory('message')
|
|
->find_all();
|
|
|
|
$arr_messages = array();
|
|
foreach ($messages as $message)
|
|
{
|
|
if ($message->type == Message_Model::INTERRUPTED_MEMBERSHIP_MESSAGE ||
|
|
$message->type == Message_Model::DEBTOR_MESSAGE ||
|
|
$message->type == Message_Model::PAYMENT_NOTICE_MESSAGE ||
|
|
$message->type == Message_Model::UNALLOWED_CONNECTING_PLACE_MESSAGE)
|
|
{
|
|
$arr_messages[$message->id] = __($message->name);
|
|
}
|
|
else if ($message->type == Message_Model::USER_MESSAGE)
|
|
{
|
|
$arr_messages[$message->id] = $message->name;
|
|
}
|
|
}
|
|
|
|
$arr_messages = array
|
|
(
|
|
NULL => '----- '.__('select message').' -----'
|
|
) + $arr_messages;
|
|
|
|
$form = new Forge(
|
|
url_lang::base().'notifications/member/'.$member->id, '',
|
|
'POST', array('id' => 'article_form')
|
|
);
|
|
|
|
$form->dropdown('message_id')
|
|
->label(__('Message').":")
|
|
->options($arr_messages)
|
|
->rules('required');
|
|
|
|
$form->textarea('comment')
|
|
->label(__('Comment').':');
|
|
|
|
$form->dropdown('redirection')
|
|
->label(__('Redirection').':')
|
|
->options(array
|
|
(
|
|
self::ACTIVATE => __('Activate'),
|
|
self::KEEP => __('Without change'),
|
|
self::DEACTIVATE => __('Deactivate')
|
|
))
|
|
->selected(self::KEEP);
|
|
|
|
$form->dropdown('email')
|
|
->label(__('E-mail').':')
|
|
->options(array
|
|
(
|
|
self::ACTIVATE => __('Activate'),
|
|
self::KEEP => __('Without change')
|
|
))
|
|
->selected(self::KEEP)
|
|
->callback(array($this,'valid_email'));
|
|
|
|
$form->submit('submit')
|
|
->value(__('Send'));
|
|
|
|
special::required_forge_style($form, ' *', 'required');
|
|
|
|
// for is validate
|
|
if ($form->validate())
|
|
{
|
|
$form_data = $form->as_array();
|
|
|
|
$message = new Message_Model($form_data['message_id']);
|
|
|
|
$info_messages = array();
|
|
|
|
// redirection
|
|
switch ($form_data['redirection'])
|
|
{
|
|
case self::ACTIVATE:
|
|
case self::DEACTIVATE:
|
|
|
|
$messages_ip_addresses_model = new Messages_ip_addresses_Model();
|
|
|
|
$deleted_redirections = 0;
|
|
$added_redirections = 0;
|
|
|
|
// finds all ip addresses of subnet
|
|
$ip_addresses = ORM::factory('ip_address')
|
|
->get_ip_addresses_of_member($member->id);
|
|
|
|
foreach ($ip_addresses as $ip_address)
|
|
{
|
|
// allways deletes all redirection of ip address
|
|
$deleted_redirections += $messages_ip_addresses_model
|
|
->delete_redirection_of_ip_address($message->id, $ip_address->id);
|
|
|
|
// activation => adds new redirection to ip address
|
|
if ($form_data['redirection'] == self::ACTIVATE)
|
|
{
|
|
$added_redirections += $messages_ip_addresses_model
|
|
->add_redirection_to_ip_address(
|
|
$message->id, $ip_address->id,
|
|
$form_data['comment']);
|
|
}
|
|
}
|
|
|
|
if ($added_redirections)
|
|
$info_messages[] = __('Redirection has been activated for %s IP addresses', $added_redirections).'.';
|
|
else
|
|
$info_messages[] = __('Redirection has been deactivated for %s IP addresses', $deleted_redirections).'.';
|
|
|
|
break;
|
|
}
|
|
|
|
// e-mail
|
|
switch ($form_data['email'])
|
|
{
|
|
case self::ACTIVATE:
|
|
|
|
$sent_emails = 0;
|
|
|
|
$email_queue_model = new Email_queue_Model();
|
|
$users_contacts_model = new Users_contacts_Model();
|
|
|
|
// gets all e-mails of subnet
|
|
$contacts = $users_contacts_model
|
|
->get_contacts_by_member_and_type(
|
|
$member->id, Contact_Model::TYPE_EMAIL,
|
|
$message->ignore_whitelist
|
|
);
|
|
|
|
$name = $message->name;
|
|
|
|
if ($message->type)
|
|
$name = __($message->name);
|
|
|
|
foreach ($contacts as $contact)
|
|
{
|
|
$text = $message->email_text;
|
|
foreach ($contact as $key => $value)
|
|
{
|
|
if ($key != 'email_text')
|
|
$text = str_replace('{'.$key.'}', $value, $text);
|
|
}
|
|
|
|
$email_queue_model->clear();
|
|
$email_queue_model->from = Settings::get('email_default_email');
|
|
$email_queue_model->to = $contact->value;
|
|
$email_queue_model->subject = Settings::get('email_subject_prefix').": ".$name;
|
|
$email_queue_model->body = $text;
|
|
$email_queue_model->state = Email_queue_Model::STATE_NEW;
|
|
|
|
// sends e-mail
|
|
if ($email_queue_model->save())
|
|
$sent_emails++;
|
|
}
|
|
|
|
$info_messages[] = __('E-mail has been sent for %s e-mail addresses', $sent_emails).'.';
|
|
|
|
break;
|
|
}
|
|
|
|
status::success(implode("<br />", $info_messages), FALSE);
|
|
url::redirect(url_lang::base().'members/show/'.$member->id);
|
|
}
|
|
|
|
// breadcrumbs navigation
|
|
$breadcrumbs = breadcrumbs::add()
|
|
->link('members/show_all', 'Members',
|
|
$this->acl_check_view('Members_Controller','members'))
|
|
->disable_translation()
|
|
->link('members/show/'.$member->id,
|
|
"ID $member->id - $member->name",
|
|
$this->acl_check_view(
|
|
'Members_Controller','members', $member->id
|
|
)
|
|
)
|
|
->text(__('Notification setting'));
|
|
|
|
$view = new View('main');
|
|
$view->breadcrumbs = $breadcrumbs;
|
|
$view->title = $headline;
|
|
$view->content = new View('form');
|
|
$view->content->headline = $headline;
|
|
$view->content->form = $form;
|
|
$view->render(TRUE);
|
|
}
|
|
|
|
/**
|
|
* Notification setting to subnet
|
|
*
|
|
* @author Michal Kliment
|
|
* @param integer $subnet_id
|
|
*/
|
|
public function subnet($subnet_id = NULL)
|
|
{
|
|
// bad parameter
|
|
if (!$subnet_id || !is_numeric($subnet_id))
|
|
Controller::warning(PARAMETER);
|
|
|
|
$subnet = new Subnet_Model($subnet_id);
|
|
|
|
// record doesn't exist
|
|
if (!$subnet->id)
|
|
Controller::error(RECORD);
|
|
|
|
$headline = __('Notification setting of subnet').' '.$subnet->name;
|
|
|
|
// gets all user messages
|
|
$messages = ORM::factory('message')
|
|
->find_all();
|
|
|
|
$arr_messages = array();
|
|
foreach ($messages as $message)
|
|
{
|
|
if ($message->type == Message_Model::INTERRUPTED_MEMBERSHIP_MESSAGE ||
|
|
$message->type == Message_Model::DEBTOR_MESSAGE ||
|
|
$message->type == Message_Model::PAYMENT_NOTICE_MESSAGE ||
|
|
$message->type == Message_Model::UNALLOWED_CONNECTING_PLACE_MESSAGE)
|
|
{
|
|
$arr_messages[$message->id] = __($message->name);
|
|
}
|
|
else if ($message->type == Message_Model::USER_MESSAGE)
|
|
{
|
|
$arr_messages[$message->id] = $message->name;
|
|
}
|
|
}
|
|
|
|
$arr_messages = array
|
|
(
|
|
NULL => '----- '.__('select message').' -----'
|
|
) + $arr_messages;
|
|
|
|
$form = new Forge(
|
|
url_lang::base().'notifications/subnet/'.$subnet->id, '',
|
|
'POST', array('id' => 'article_form')
|
|
);
|
|
|
|
$form->dropdown('message_id')
|
|
->label(__('Message').":")
|
|
->options($arr_messages)
|
|
->rules('required');
|
|
|
|
$form->textarea('comment')
|
|
->label(__('Comment').':');
|
|
|
|
$form->dropdown('redirection')
|
|
->label(__('Redirection').':')
|
|
->options(array
|
|
(
|
|
self::ACTIVATE => __('Activate'),
|
|
self::KEEP => __('Without change'),
|
|
self::DEACTIVATE => __('Deactivate')
|
|
))
|
|
->selected(self::KEEP);
|
|
|
|
$form->dropdown('email')
|
|
->label(__('E-mail').':')
|
|
->options(array
|
|
(
|
|
self::ACTIVATE => __('Activate'),
|
|
self::KEEP => __('Without change')
|
|
))
|
|
->selected(self::KEEP)
|
|
->callback(array($this,'valid_email'));
|
|
|
|
$form->submit('submit')
|
|
->value(__('Send'));
|
|
|
|
special::required_forge_style($form, ' *', 'required');
|
|
|
|
// for is validate
|
|
if ($form->validate())
|
|
{
|
|
$form_data = $form->as_array();
|
|
|
|
$message = new Message_Model($form_data['message_id']);
|
|
|
|
$info_messages = array();
|
|
|
|
// redirection
|
|
switch ($form_data['redirection'])
|
|
{
|
|
case self::ACTIVATE:
|
|
case self::DEACTIVATE:
|
|
|
|
$messages_ip_addresses_model = new Messages_ip_addresses_Model();
|
|
|
|
$deleted_redirections = 0;
|
|
$added_redirections = 0;
|
|
|
|
// finds all ip addresses of subnet
|
|
$ip_addresses = ORM::factory('ip_address')
|
|
->get_ip_addresses_of_subnet($subnet->id);
|
|
|
|
foreach ($ip_addresses as $ip_address)
|
|
{
|
|
// allways deletes all redirection of ip address
|
|
$deleted_redirections += $messages_ip_addresses_model
|
|
->delete_redirection_of_ip_address($message->id, $ip_address->id);
|
|
|
|
// activation => adds new redirection to ip address
|
|
if ($form_data['redirection'] == self::ACTIVATE)
|
|
{
|
|
$added_redirections += $messages_ip_addresses_model
|
|
->add_redirection_to_ip_address(
|
|
$message->id, $ip_address->id,
|
|
$form_data['comment']);
|
|
}
|
|
}
|
|
|
|
if ($added_redirections)
|
|
$info_messages[] = __('Redirection has been activated for %s IP addresses', $added_redirections).'.';
|
|
else
|
|
$info_messages[] = __('Redirection has been deactivated for %s IP addresses', $deleted_redirections).'.';
|
|
|
|
break;
|
|
}
|
|
|
|
// e-mail
|
|
switch ($form_data['email'])
|
|
{
|
|
case self::ACTIVATE:
|
|
|
|
$sent_emails = 0;
|
|
|
|
$email_queue_model = new Email_queue_Model();
|
|
$users_contacts_model = new Users_contacts_Model();
|
|
|
|
// gets all e-mails of subnet
|
|
$contacts = $users_contacts_model
|
|
->get_contacts_by_subnet_and_type(
|
|
$subnet->id, Contact_Model::TYPE_EMAIL,
|
|
$message->ignore_whitelist
|
|
);
|
|
|
|
foreach ($contacts as $contact)
|
|
{
|
|
$text = $message->email_text;
|
|
foreach ($contact as $key => $value)
|
|
{
|
|
if ($key != 'email_text')
|
|
$text = str_replace('{'.$key.'}', $value, $text);
|
|
}
|
|
|
|
$email_queue_model->clear();
|
|
$email_queue_model->from = Settings::get('email_default_email');
|
|
$email_queue_model->to = $contact->value;
|
|
$email_queue_model->subject = Settings::get('email_subject_prefix').": ".$message->name;
|
|
$email_queue_model->body = $text;
|
|
$email_queue_model->state = Email_queue_Model::STATE_NEW;
|
|
|
|
// sends e-mail
|
|
if ($email_queue_model->save())
|
|
$sent_emails++;
|
|
}
|
|
|
|
$info_messages[] = __('E-mail has been sent for %s e-mail addresses', $sent_emails).'.';
|
|
|
|
break;
|
|
}
|
|
|
|
status::success(implode("<br />", $info_messages), FALSE);
|
|
|
|
url::redirect(url_lang::base().'subnets/show/'.$subnet->id);
|
|
}
|
|
|
|
// breadcrumbs
|
|
|
|
$subnet_text = $subnet->name." ($subnet->network_address/"
|
|
.network::netmask2cidr($subnet->netmask) .")";
|
|
|
|
$breadcrumbs = breadcrumbs::add()
|
|
->link('subnets/show_all', __('Subnets'),
|
|
$this->acl_check_view('Devices_Controller','subnet'))
|
|
->disable_translation()
|
|
->link('subnets/show/'.$subnet->id, $subnet_text,
|
|
$this->acl_check_view('Devices_Controller','subnet'))
|
|
->enable_translation()
|
|
->text(__('Notification setting'))
|
|
->html();
|
|
|
|
$view = new View('main');
|
|
$view->breadcrumbs = $breadcrumbs;
|
|
$view->title = $headline;
|
|
$view->content = new View('form');
|
|
$view->content->headline = $headline;
|
|
$view->content->form = $form;
|
|
$view->render(TRUE);
|
|
}
|
|
|
|
/**
|
|
* Notification setting to cloud
|
|
*
|
|
* @author Michal Kliment
|
|
* @param integer $cloud_id
|
|
*/
|
|
public function cloud($cloud_id = NULL)
|
|
{
|
|
// bad parameter
|
|
if (!$cloud_id || !is_numeric($cloud_id))
|
|
Controller::warning(PARAMETER);
|
|
|
|
$cloud = new Cloud_Model($cloud_id);
|
|
|
|
// record doesn't exist
|
|
if (!$cloud->id)
|
|
Controller::error(RECORD);
|
|
|
|
$headline = __('Notification setting of cloud').' '.$cloud->name;
|
|
|
|
// gets all user messages
|
|
$messages = ORM::factory('message')
|
|
->find_all();
|
|
|
|
$arr_messages = array();
|
|
foreach ($messages as $message)
|
|
{
|
|
if ($message->type == Message_Model::INTERRUPTED_MEMBERSHIP_MESSAGE ||
|
|
$message->type == Message_Model::DEBTOR_MESSAGE ||
|
|
$message->type == Message_Model::PAYMENT_NOTICE_MESSAGE ||
|
|
$message->type == Message_Model::UNALLOWED_CONNECTING_PLACE_MESSAGE)
|
|
{
|
|
$arr_messages[$message->id] = __($message->name);
|
|
}
|
|
else if ($message->type == Message_Model::USER_MESSAGE)
|
|
{
|
|
$arr_messages[$message->id] = $message->name;
|
|
}
|
|
}
|
|
|
|
$arr_messages = array
|
|
(
|
|
NULL => '----- '.__('select message').' -----'
|
|
) + $arr_messages;
|
|
|
|
$form = new Forge(
|
|
url_lang::base().'notifications/cloud/'.$cloud->id, '',
|
|
'POST', array('id' => 'article_form')
|
|
);
|
|
|
|
$form->dropdown('message_id')
|
|
->label(__('Message').":")
|
|
->options($arr_messages)
|
|
->rules('required');
|
|
|
|
$form->textarea('comment')
|
|
->label(__('Comment').':');
|
|
|
|
$form->dropdown('redirection')
|
|
->label(__('Redirection').':')
|
|
->options(array
|
|
(
|
|
self::ACTIVATE => __('Activate'),
|
|
self::KEEP => __('Without change'),
|
|
self::DEACTIVATE => __('Deactivate')
|
|
))
|
|
->selected(self::KEEP);
|
|
|
|
$form->dropdown('email')
|
|
->label(__('E-mail').':')
|
|
->options(array
|
|
(
|
|
self::ACTIVATE => __('Activate'),
|
|
self::KEEP => __('Without change')
|
|
))
|
|
->selected(self::KEEP)
|
|
->callback(array($this,'valid_email'));
|
|
|
|
$form->submit('submit')
|
|
->value(__('Send'));
|
|
|
|
special::required_forge_style($form, ' *', 'required');
|
|
|
|
// form is validate
|
|
if ($form->validate())
|
|
{
|
|
$form_data = $form->as_array();
|
|
|
|
$message = new Message_Model($form_data['message_id']);
|
|
|
|
$info_messages = array();
|
|
|
|
// redirection
|
|
switch ($form_data['redirection'])
|
|
{
|
|
case self::ACTIVATE:
|
|
case self::DEACTIVATE:
|
|
|
|
$messages_ip_addresses_model = new Messages_ip_addresses_Model();
|
|
|
|
$deleted_redirections = 0;
|
|
$added_redirections = 0;
|
|
|
|
// for each subnet of cloud
|
|
foreach ($cloud->subnets as $subnet)
|
|
{
|
|
// gets all ip addresses of subnet
|
|
$ip_addresses = ORM::factory('ip_address')
|
|
->get_ip_addresses_of_subnet($subnet->id);
|
|
|
|
foreach ($ip_addresses as $ip_address)
|
|
{
|
|
// allways deletes redirection of ip address
|
|
$deleted_redirections += $messages_ip_addresses_model
|
|
->delete_redirection_of_ip_address($message->id, $ip_address->id);
|
|
|
|
// activation => adds new redirection to ip address
|
|
if ($form_data['redirection'] == self::ACTIVATE)
|
|
{
|
|
$added_redirections += $messages_ip_addresses_model
|
|
->add_redirection_to_ip_address(
|
|
$message->id, $ip_address->id,
|
|
$form_data['comment']);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
if ($added_redirections)
|
|
$info_messages[] = __('Redirection has been activated for %s IP addresses', $added_redirections).'.';
|
|
else
|
|
$info_messages[] = __('Redirection has been deactivated for %s IP addresses', $deleted_redirections).'.';
|
|
|
|
break;
|
|
}
|
|
|
|
// e-mail
|
|
switch ($form_data['email'])
|
|
{
|
|
case self::ACTIVATE:
|
|
|
|
$sent_emails = 0;
|
|
|
|
$email_queue_model = new Email_queue_Model();
|
|
$users_contacts_model = new Users_contacts_Model();
|
|
|
|
// for each subnet of cloud
|
|
foreach ($cloud->subnets as $subnet)
|
|
{
|
|
// gets all e-mails of subnet
|
|
$contacts = $users_contacts_model
|
|
->get_contacts_by_subnet_and_type(
|
|
$subnet->id, Contact_Model::TYPE_EMAIL,
|
|
$message->ignore_whitelist
|
|
);
|
|
|
|
foreach ($contacts as $contact)
|
|
{
|
|
$text = $message->email_text;
|
|
foreach ($contact as $key => $value)
|
|
{
|
|
if ($key != 'email_text')
|
|
$text = str_replace('{'.$key.'}', $value, $text);
|
|
}
|
|
|
|
$email_queue_model->clear();
|
|
$email_queue_model->from = Settings::get('email_default_email');
|
|
$email_queue_model->to = $contact->value;
|
|
$email_queue_model->subject = Settings::get('email_subject_prefix').": ".$message->name;
|
|
$email_queue_model->body = $text;
|
|
$email_queue_model->state = Email_queue_Model::STATE_NEW;
|
|
|
|
// send e-mail
|
|
if ($email_queue_model->save())
|
|
$sent_emails++;
|
|
}
|
|
}
|
|
|
|
$info_messages[] = __('E-mail has been sent for %s e-mail addresses', $sent_emails).'.';
|
|
|
|
break;
|
|
}
|
|
|
|
status::success(implode("<br />", $info_messages), FALSE);
|
|
|
|
url::redirect(url_lang::base().'clouds/show/'.$cloud->id);
|
|
}
|
|
|
|
$name = $cloud->name . ' (' . $cloud_id . ')';
|
|
|
|
// breadcrumbs
|
|
$breadcrumbs = breadcrumbs::add()
|
|
->link('clouds/show_all', __('Clouds'),
|
|
$this->acl_check_view('Clouds_Controller','clouds'))
|
|
->disable_translation()
|
|
->link('clouds/show/'.$cloud->id, $name,
|
|
$this->acl_check_view('Clouds_Controller','clouds'))
|
|
->enable_translation()
|
|
->text(__('Notification setting'))
|
|
->html();
|
|
|
|
$view = new View('main');
|
|
$view->breadcrumbs = $breadcrumbs;
|
|
$view->title = $headline;
|
|
$view->content = new View('form');
|
|
$view->content->headline = $headline;
|
|
$view->content->form = $form;
|
|
$view->render(TRUE);
|
|
}
|
|
|
|
/**
|
|
* Shows members with at least one whitelisted IP address.
|
|
*
|
|
* @author Jiri Svitak
|
|
*/
|
|
public function show_whitelisted_members(
|
|
$limit_results = 100, $order_by = 'id', $order_by_direction = 'ASC',
|
|
$page_word = null, $page = 1)
|
|
{
|
|
// access rights
|
|
if (!$this->acl_check_view('Messages_controller','message'))
|
|
Controller::error(ACCESS);
|
|
|
|
// gets new selector
|
|
if (is_numeric($this->input->get('record_per_page')))
|
|
$limit_results = (int) $this->input->get('record_per_page');
|
|
|
|
// parameters control
|
|
$allowed_order_type = array
|
|
(
|
|
'id', 'registration', 'name', 'street','redirect', 'street_number',
|
|
'town', 'quarter', 'ZIP_code', 'qos_ceil', 'qos_rate', 'entrance_fee',
|
|
'debt_payment_rate', 'current_credit', 'entrance_date', 'comment',
|
|
'balance', 'type_name', 'items_count'
|
|
);
|
|
|
|
if (!in_array(strtolower($order_by), $allowed_order_type))
|
|
$order_by = 'id';
|
|
|
|
if (strtolower($order_by_direction) != 'desc')
|
|
$order_by_direction = 'asc';
|
|
|
|
$filter_form = new Filter_form('m');
|
|
|
|
$filter_form->add('member_name')
|
|
->type('combo')
|
|
->callback('json/member_name');
|
|
|
|
$filter_form->add('type')
|
|
->type('combo')
|
|
->values(ORM::factory('enum_type')->get_values(Enum_type_Model::$member_type_id));
|
|
|
|
$filter_form->add('whitelisted')
|
|
->type('select')
|
|
->label(__('Whitelist'))
|
|
->values(array
|
|
(
|
|
Ip_address_Model::$no_whitelist => __('No whitelist'),
|
|
Ip_address_Model::$permanent_whitelist => __('Permanent whitelist'),
|
|
Ip_address_Model::$temporary_whitelist => __('Temporary whitelist')
|
|
));
|
|
|
|
$filter_form->add('balance')
|
|
->type('number');
|
|
|
|
// load members
|
|
$model_members = new Member_Model();
|
|
$total_members = $model_members->count_whitelisted_members($filter_form->as_sql());
|
|
|
|
if (($sql_offset = ($page - 1) * $limit_results) > $total_members)
|
|
$sql_offset = 0;
|
|
|
|
$query = $model_members->get_whitelisted_members(
|
|
$sql_offset, (int)$limit_results, $order_by,
|
|
$order_by_direction, $filter_form->as_sql()
|
|
);
|
|
// it creates grid to view all members
|
|
$headline = __('List of whitelisted members');
|
|
|
|
$grid = new Grid(url_lang::base().'members', null, array
|
|
(
|
|
'current' => $limit_results,
|
|
'selector_increace' => 50,
|
|
'selector_min' => 100,
|
|
'selector_max_multiplier' => 20,
|
|
'base_url' => Config::get('lang').'/members/show_all/'
|
|
. $limit_results.'/'.$order_by.'/'.$order_by_direction ,
|
|
'uri_segment' => 'page',
|
|
'total_items' => $total_members,
|
|
'items_per_page' => $limit_results,
|
|
'style' => 'classic',
|
|
'order_by' => $order_by,
|
|
'order_by_direction' => $order_by_direction,
|
|
'limit_results' => $limit_results,
|
|
'filter' => $filter_form
|
|
));
|
|
|
|
// database columns - some are commented out because of lack of space
|
|
$grid->order_field('id')
|
|
->label('ID');
|
|
|
|
$grid->order_field('type')
|
|
->label(__('Type'));
|
|
|
|
$grid->order_field('name')
|
|
->label(__('Name'));
|
|
|
|
$grid->order_callback_field('whitelisted')
|
|
->label(__('Whitelist'))
|
|
->callback('callback::whitelisted_field');
|
|
|
|
$grid->order_callback_field('items_count')
|
|
->label(__('IP address count on the list'))
|
|
->callback('callback::items_count_field');
|
|
|
|
$grid->order_callback_field('balance')
|
|
->label(__('Balance'))
|
|
->callback('callback::balance_field');
|
|
|
|
$actions = $grid->grouped_action_field();
|
|
|
|
$actions->add_action()
|
|
->icon_action('member')
|
|
->url('members/show')
|
|
->label('Show member');
|
|
|
|
$actions->add_action('aid')
|
|
->icon_action('transfer')
|
|
->url('transfers/show_by_account')
|
|
->label('Show transfers');
|
|
|
|
$grid->datasource($query);
|
|
|
|
$view = new View('main');
|
|
$view->title = $headline;
|
|
$view->breadcrumbs = $headline;
|
|
$view->content = new View('show_all');
|
|
$view->content->table = $grid;
|
|
$view->content->headline = $headline;
|
|
$view->render(TRUE);
|
|
}
|
|
|
|
/**
|
|
* Shows notification settings and enables their editing.
|
|
*
|
|
* @author Jiri Svitak
|
|
*/
|
|
public function settings()
|
|
{
|
|
// access control
|
|
if (!$this->acl_check_edit('Messages_Controller', 'message'))
|
|
Controller::error(ACCESS);
|
|
|
|
// creating of new forge
|
|
$this->form = new Forge(
|
|
url_lang::base().'notifications/settings', '',
|
|
'POST', array('id' => 'article_form')
|
|
);
|
|
|
|
$this->form->set_attr('class', 'form_class')
|
|
->set_attr('method', 'post');
|
|
|
|
$this->form->group('')
|
|
->label(__('Notification settings'));
|
|
|
|
$this->form->input('gateway')
|
|
->label(__('Gateway IP address').":")
|
|
->value($this->settings->get('gateway'));
|
|
|
|
$this->form->input('payment_notice_boundary')
|
|
->label(__('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(__('Debtor boundary')." (".
|
|
$this->settings->get('currency')."): ".
|
|
help::hint('debtor_boundary'))
|
|
->value($this->settings->get('debtor_boundary'));
|
|
|
|
$this->form->input('redirection_logo_url')
|
|
->label(__('Redirection logo URL').":")
|
|
->value($this->settings->get('redirection_logo_url'));
|
|
|
|
$this->form->input('self_cancel_text')
|
|
->label(__('Text for self cancel anchor').": ".
|
|
help::hint('self_cancel_text'))
|
|
->value($this->settings->get('self_cancel_text'));
|
|
|
|
$this->form->input('email_subject_prefix')
|
|
->label(__('E-mail subject prefix').':')
|
|
->value($this->settings->get('email_subject_prefix'));
|
|
|
|
$this->form->submit('submit')->value(__('Save'));
|
|
|
|
special::required_forge_style($this->form, ' *', 'required');
|
|
|
|
// form validate
|
|
if ($this->form->validate())
|
|
{
|
|
$form_data = $this->form->as_array();
|
|
$config_model = new Config_Model();
|
|
$issaved = true;
|
|
foreach ($form_data as $name => $value)
|
|
{
|
|
$value = addslashes($value);
|
|
// check if variable exists
|
|
if ($config_model->check_exist_variable($name))
|
|
// update of variable
|
|
$issaved = $issaved && $config_model->update_variable($name,$value);
|
|
else
|
|
// insert new variable
|
|
$issaved = $issaved && $config_model->insert_variable($name,$value);
|
|
}
|
|
|
|
if ($issaved)
|
|
{ // if all action were succesfull
|
|
status::success('Notification settings have been successfully updated.');
|
|
}
|
|
else
|
|
{ // if not
|
|
status::error('Notification settings have not been updated.');
|
|
}
|
|
|
|
url::redirect(url_lang::base().'notifications/settings');
|
|
}
|
|
// create view for this template
|
|
$view = new View('main');
|
|
$view->title = __('Notification settings');
|
|
$view->breadcrumbs = __('Notification settings');
|
|
$view->content = new View('form');
|
|
$view->content->form = $this->form->html();
|
|
$view->content->headline = __('Notification settings');
|
|
$view->render(TRUE);
|
|
}
|
|
|
|
/**
|
|
* Sets whitelist type to all IP addresses of member.
|
|
*
|
|
* @author Jiri Svitak
|
|
* @param integer $member_id
|
|
*/
|
|
public function set_whitelist($member_id = NULL)
|
|
{
|
|
// access rights
|
|
if (!$this->acl_check_edit('Messages_Controller', 'member'))
|
|
Controller::error(ACCESS);
|
|
|
|
if (!$member_id)
|
|
Controller::warning(PARAMETER);
|
|
|
|
$member = new Member_Model($member_id);
|
|
|
|
if (!$member || !$member->id)
|
|
Controller::error(RECORD);
|
|
|
|
$whitelist_array[Ip_address_Model::$no_whitelist] = __('No whitelist');
|
|
$whitelist_array[Ip_address_Model::$permanent_whitelist] = __('Permanent whitelist');
|
|
$whitelist_array[Ip_address_Model::$temporary_whitelist] = __('Temporary whitelist');
|
|
|
|
// form
|
|
$form = new Forge(
|
|
url_lang::base().'notifications/set_whitelist/'.$member_id, '',
|
|
'POST', array('id' => 'article_form')
|
|
);
|
|
|
|
$form->set_attr('class', 'form_class')
|
|
->set_attr('method', 'post');
|
|
|
|
$form->dropdown('whitelist')
|
|
->label(__('Whitelist').':')
|
|
->options($whitelist_array);
|
|
|
|
$form->submit('submit')
|
|
->value(__('Edit'));
|
|
|
|
if ($form->validate())
|
|
{
|
|
if (!$this->acl_check_edit('Messages_Controller', 'member'))
|
|
Controller::error(ACCESS);
|
|
|
|
$form_data = $form->as_array();
|
|
$ip_model = new Ip_address_Model();
|
|
$ips = $ip_model->get_ip_addresses_of_member($member_id);
|
|
|
|
foreach($ips as $ip)
|
|
{
|
|
$ip = new Ip_address_Model($ip->id);
|
|
$ip->whitelisted = $form_data['whitelist'];
|
|
$ip->save();
|
|
}
|
|
|
|
$users_contacts_model = new Users_contacts_Model();
|
|
$users_contacts_model->set_whitelist_by_member_and_type(
|
|
$form_data['whitelist'], $member_id, Contact_Model::TYPE_EMAIL);
|
|
|
|
// set flash message
|
|
status::success('Whitelist setting has been successfully set.');
|
|
url::redirect(url_lang::base().'members/show/'.$member_id);
|
|
}
|
|
else
|
|
{
|
|
$headline = __('Whitelist');
|
|
// breadcrumbs navigation
|
|
$breadcrumbs = breadcrumbs::add()
|
|
->link('members/show_all', 'Members',
|
|
$this->acl_check_view('Members_Controller' ,'members'))
|
|
->disable_translation()
|
|
->link('members/show/'.$member->id,
|
|
"ID $member->id - $member->name",
|
|
$this->acl_check_view(
|
|
'Members_Controller' ,'members', $member->id
|
|
)
|
|
)
|
|
->text($headline);
|
|
// view
|
|
$view = new View('main');
|
|
$view->title = $headline;
|
|
$view->breadcrumbs = $breadcrumbs->html();
|
|
$view->content = new View('form');
|
|
$view->content->headline = $headline;
|
|
$view->content->form = $form->html();
|
|
$view->render(TRUE);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Callback function to validate e-mail notification
|
|
*
|
|
* @author Michal Kliment
|
|
* @param type $input
|
|
*/
|
|
public function valid_email ($input)
|
|
{
|
|
$email = $input->value;
|
|
|
|
if ($email == self::ACTIVATE)
|
|
{
|
|
$message = new Message_Model($this->input->post('message_id'));
|
|
|
|
if ($message->type != Message_Model::DEBTOR_MESSAGE &&
|
|
$message->type != Message_Model::PAYMENT_NOTICE_MESSAGE &&
|
|
$message->type != Message_Model::USER_MESSAGE)
|
|
{
|
|
$input->add_error('required', __('It is not possible activate e-mail notification for this message.'));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
?>
|