|
<?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 actions over IP adresses of network.
|
|
* Each IP address belongs to subnet and correspondes to subnet mask.
|
|
*
|
|
* @package Controller
|
|
*/
|
|
class Ip_addresses_Controller extends Controller
|
|
{
|
|
/**
|
|
* Form of app
|
|
*
|
|
* @var Forge
|
|
*/
|
|
protected $form;
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $arr_mask_by_id;
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $arr_net_by_id;
|
|
|
|
/**
|
|
* IP address ID
|
|
*
|
|
* @var integer
|
|
*/
|
|
protected $ip_address_id;
|
|
|
|
/**
|
|
* Index redirects to show all
|
|
*/
|
|
public function index()
|
|
{
|
|
url::redirect(url_lang::base() . 'ip_addresses/show_all');
|
|
}
|
|
|
|
/**
|
|
* Shows all ip addresses.
|
|
*
|
|
* @param integer $limit_results ip addresses per page
|
|
* @param string $order_by sorting column
|
|
* @param string $order_by_direction sorting direction
|
|
*/
|
|
public function show_all(
|
|
$limit_results = 500, $order_by = 'ip_address',
|
|
$order_by_direction = 'asc', $page_word = null, $page = 1)
|
|
{
|
|
if (!$this->acl_check_view('Devices_Controller','ip_address'))
|
|
Controller::error(ACCESS);
|
|
|
|
$ip_model = new Ip_address_Model();
|
|
|
|
// get new selector
|
|
if (is_numeric($this->input->get('record_per_page')))
|
|
$limit_results = (int) $this->input->get('record_per_page');
|
|
|
|
$filter_form = new Filter_form('ip');
|
|
|
|
$filter_form->add('ip_address')
|
|
->type('network_address')
|
|
->class(array
|
|
(
|
|
Filter_form::OPER_IS => 'ip_address',
|
|
Filter_form::OPER_IS_NOT => 'ip_address',
|
|
Filter_form::OPER_NETWORK_IS_IN => 'cidr',
|
|
Filter_form::OPER_NETWORK_IS_NOT_IN => 'cidr',
|
|
));
|
|
|
|
$filter_form->add('subnet_name')
|
|
->type('combo')
|
|
->callback('json/subnet_name');
|
|
|
|
$filter_form->add('device_name')
|
|
->callback('json/device_name');
|
|
|
|
$filter_form->add('gateway')
|
|
->type('select')
|
|
->values(array
|
|
(
|
|
1 => __('Yes'),
|
|
0 => __('No')
|
|
));
|
|
|
|
$filter_form->add('service')
|
|
->type('select')
|
|
->values(array
|
|
(
|
|
1 => __('Yes'),
|
|
0 => __('No')
|
|
));
|
|
|
|
$total_ip = $ip_model->count_all_ip_addresses($filter_form->as_sql());
|
|
|
|
if (($sql_offset = ($page - 1) * $limit_results) > $total_ip)
|
|
$sql_offset = 0;
|
|
|
|
$query = $ip_model->get_all_ip_addresses(
|
|
$sql_offset, (int)$limit_results, $order_by,
|
|
$order_by_direction, $filter_form->as_sql()
|
|
);
|
|
|
|
$grid = new Grid(url_lang::base().'ip_addresses', '', array
|
|
(
|
|
'current' => $limit_results,
|
|
'selector_increace' => 500,
|
|
'selector_min' => 500,
|
|
'selector_max_multiplier' => 20,
|
|
'base_url' => Config::get('lang').'/ip_addresses/show_all/'
|
|
. $limit_results.'/'.$order_by.'/'.$order_by_direction ,
|
|
'uri_segment' => 'page',
|
|
'total_items' => $total_ip,
|
|
'items_per_page' => $limit_results,
|
|
'style' => 'classic',
|
|
'order_by' => $order_by,
|
|
'order_by_direction' => $order_by_direction,
|
|
'limit_results' => $limit_results,
|
|
'filter' => $filter_form
|
|
));
|
|
|
|
if ($this->acl_check_new('Devices_Controller','ip_address'))
|
|
{
|
|
$grid->add_new_button(
|
|
url_lang::base().'ip_addresses/add',
|
|
__('Add new IP address')
|
|
);
|
|
}
|
|
|
|
$grid->order_callback_field('ip_address')
|
|
->label(__('IP address'))
|
|
->callback('callback::ip_address_field');
|
|
|
|
$grid->order_callback_field('subnet_name')
|
|
->label(__('Subnet name'))
|
|
->callback('callback::subnet_field');
|
|
|
|
$grid->order_callback_field('device_name')
|
|
->label(__('Device name'))
|
|
->callback('callback::device_field');
|
|
|
|
$actions = $grid->grouped_action_field();
|
|
|
|
if ($this->acl_check_edit('Devices_Controller','ip_address'))
|
|
{
|
|
$actions->add_action('id')
|
|
->icon_action('edit')
|
|
->url('ip_addresses/edit');
|
|
}
|
|
|
|
if ($this->acl_check_delete('Devices_Controller','ip_address'))
|
|
{
|
|
$actions->add_action('id')
|
|
->icon_action('delete')
|
|
->url('ip_addresses/delete')
|
|
->class('delete_link');
|
|
}
|
|
|
|
$grid->datasource( $query );
|
|
|
|
$view = new View('main');
|
|
$view->title = __('IP addresses list');
|
|
$view->breadcrumbs = __('IP addresses');
|
|
$view->content = new View('show_all');
|
|
$view->content->table = $grid;
|
|
$view->content->headline = __('IP addresses list');
|
|
$view->render(TRUE);
|
|
} // end of show_all function
|
|
|
|
|
|
|
|
/**
|
|
* Shows details of ip address.
|
|
*
|
|
* @param integer $ip_address_id id of ip address to show
|
|
*/
|
|
public function show($ip_address_id = null)
|
|
{
|
|
if (!isset($ip_address_id))
|
|
Controller::warning(PARAMETER);
|
|
|
|
$ip_address = new Ip_address_Model($ip_address_id);
|
|
|
|
if (!$ip_address->id)
|
|
Controller::error(RECORD);
|
|
|
|
if ($ip_address->iface_id)
|
|
{
|
|
$member_id = $ip_address->iface->device->user->member_id;
|
|
$device_id = $ip_address->iface->device_id;
|
|
$iface_id = $ip_address->iface_id;
|
|
$vlan_iface = null;
|
|
}
|
|
else
|
|
{
|
|
$member_id = $ip_address->vlan_iface->iface->device->user->member_id;
|
|
$device_id = $ip_address->vlan_iface->iface->device_id;
|
|
$iface_id = $ip_address->vlan_iface->iface_id;
|
|
$vlan_iface = new Vlan_iface_Model($ip_address->vlan_iface_id);
|
|
}
|
|
|
|
if (!$this->acl_check_view('Devices_Controller','ip_address',$member_id))
|
|
Controller::error(ACCESS);
|
|
|
|
$member = new Member_Model($member_id);
|
|
$device = new Device_Model($device_id);
|
|
$iface = new Iface_Model($iface_id);
|
|
|
|
// whitelist types
|
|
$whitelist_types = array
|
|
(
|
|
Ip_address_Model::$no_whitelist => __('No whitelist'),
|
|
Ip_address_Model::$permanent_whitelist => __('Permanent whitelist'),
|
|
Ip_address_Model::$temporary_whitelist => __('Temporary whitelist')
|
|
);
|
|
|
|
if ($ip_address->member_id)
|
|
{
|
|
// breadcrumbs menu
|
|
$breadcrumbs = breadcrumbs::add()
|
|
->link('members/show_all', 'Members',
|
|
$this->acl_check_view(
|
|
'Members_Controller', 'members'))
|
|
->disable_translation()
|
|
->link('members/show/'.$ip_address->member_id,
|
|
"ID ".$ip_address->member->id." - ".$ip_address->member->name,
|
|
$this->acl_check_view(
|
|
'Members_Controller', 'members', $ip_address->member_id))
|
|
->text($ip_address->ip_address . ' (' . $ip_address->id . ')');
|
|
}
|
|
else
|
|
{
|
|
if (url_lang::current(TRUE) == 'devices')
|
|
{
|
|
if ($ip_address->iface_id)
|
|
$iface = $ip_address->iface;
|
|
else
|
|
$iface = $ip_address->vlan_iface->iface;
|
|
|
|
$device_name = $iface->device->name;
|
|
|
|
if ($device_name == '')
|
|
{
|
|
$device_name = ORM::factory ('enum_type')
|
|
->get_value($device->type);
|
|
}
|
|
|
|
if ($iface->name != '')
|
|
$iface_name = $iface->name." (".$iface->mac.")";
|
|
else
|
|
$iface_name = $iface->mac;
|
|
|
|
// breadcrumbs menu
|
|
$breadcrumbs = breadcrumbs::add()
|
|
->link('members/show_all', 'Members',
|
|
$this->acl_check_view('Members_Controller','members'))
|
|
->disable_translation()
|
|
->link('members/show/' .
|
|
$iface->device->user->member->id,
|
|
'ID ' . $iface->device->user->member->id .
|
|
' - ' . $iface->device->user->member->name,
|
|
$this->acl_check_view(
|
|
'Members_Controller',
|
|
'members',
|
|
$iface->device->user->member->id)
|
|
)
|
|
->enable_translation()
|
|
->link('users/show_by_member/' .
|
|
$iface->device->user->member->id, 'Users',
|
|
$this->acl_check_view(
|
|
'Users_Controller', 'users',
|
|
$iface->device->user->member->id)
|
|
)
|
|
->disable_translation()
|
|
->link('users/show/' . $iface->device->user->id,
|
|
$iface->device->user->name .
|
|
' ' . $iface->device->user->surname .
|
|
' (' . $iface->device->user->login . ')',
|
|
$this->acl_check_view(
|
|
'Users_Controller', 'users',
|
|
$iface->device->user->member_id)
|
|
)
|
|
->enable_translation()
|
|
->link(
|
|
'devices/show_by_user/'.$iface->device->user_id,
|
|
'Devices',
|
|
$this->acl_check_view(
|
|
'Devices_Controller',
|
|
'devices',
|
|
$iface->device->user->member_id
|
|
)
|
|
)
|
|
->link(
|
|
'devices/show/'.$iface->device_id,
|
|
$device_name,
|
|
$this->acl_check_view(
|
|
'Devices_Controller',
|
|
'devices',
|
|
$iface->device->user->member_id
|
|
)
|
|
)
|
|
->link(
|
|
'devices/show_iface/'.$iface_id,
|
|
$iface_name,
|
|
$this->acl_check_view(
|
|
'Devices_Controller',
|
|
'iface',
|
|
$iface->device->user->member_id
|
|
)
|
|
);
|
|
|
|
if ($ip_address->vlan_iface_id)
|
|
{
|
|
$breadcrumbs->link(
|
|
'devices/show_vlan_iface/'.$ip_address->vlan_iface->id,
|
|
$ip_address->vlan_iface->name,
|
|
$this->acl_check_view(
|
|
'Devices_Controller',
|
|
'vlan_iface',
|
|
$iface->device->user->member_id
|
|
)
|
|
);
|
|
}
|
|
|
|
$breadcrumbs->disable_translation()
|
|
->text($ip_address->ip_address);
|
|
}
|
|
else
|
|
{
|
|
// breadcrumbs menu
|
|
$breadcrumbs = breadcrumbs::add()
|
|
->link('ip_addresses/show_all', 'IP addresses',
|
|
$this->acl_check_view('Devices_Controller', 'ip_address'))
|
|
->disable_translation()
|
|
->text($ip_address->ip_address . ' (' . $ip_address->id . ')');
|
|
}
|
|
|
|
}
|
|
|
|
$view = new View('main');
|
|
$view->title = __('IP address detail').
|
|
' - '.$ip_address->ip_address;
|
|
$view->breadcrumbs = $breadcrumbs->html();
|
|
$view->content = new View('ip_addresses_show');
|
|
$view->content->ip_address = $ip_address;
|
|
$view->content->member = $member;
|
|
$view->content->device = $device;
|
|
$view->content->iface = $iface;
|
|
$view->content->vlan_iface = $vlan_iface;
|
|
$view->content->whitelist_types = $whitelist_types;
|
|
$view->content->grid = '';
|
|
$view->content->headline = __('IP address detail').
|
|
' - '.$ip_address->ip_address;
|
|
$view->render(TRUE);
|
|
} // end of show function
|
|
|
|
|
|
/**
|
|
* Adds new ip address to current interface.
|
|
*
|
|
* @param integer $device_id
|
|
*/
|
|
public function add($device_id = NULL)
|
|
{
|
|
if (!$this->acl_check_new('Devices_Controller', 'ip_address'))
|
|
Controller::error(ACCESS);
|
|
|
|
$vlan_iface_model = new Vlan_iface_Model();
|
|
|
|
if ($device_id)
|
|
{
|
|
if (!is_numeric($device_id))
|
|
Controller::warning(PARAMETER);
|
|
|
|
$device = new Device_Model($device_id);
|
|
|
|
if (!$device->id)
|
|
Controller::error(RECORD);
|
|
|
|
$arr_ifaces = array();
|
|
$arr_vlan_ifaces = array();
|
|
|
|
$arr_ifaces[0] = '----- '.__('select interface').' -----';
|
|
$arr_vlan_ifaces[0] = '----- '.__('select vlan interface').' -----';
|
|
|
|
$ifaces = $device->ifaces;
|
|
|
|
foreach ($ifaces as $iface) {
|
|
$arr_ifaces[$iface->id] = $iface->name;
|
|
}
|
|
|
|
$vlan_ifaces = $vlan_iface_model->get_all_vlan_ifaces_by_device_id(
|
|
$device->id
|
|
);
|
|
|
|
foreach ($vlan_ifaces as $vlan_iface)
|
|
{
|
|
$arr_vlan_ifaces[$vlan_iface->id] = $vlan_iface->name;
|
|
}
|
|
|
|
$title = __('Add new IP address to device').' '.$device->name;
|
|
$link_back_url = url_lang::base().'devices/show/'.$device->id;
|
|
$link_back = html::anchor(
|
|
$link_back_url,
|
|
__('Back to the device')
|
|
);
|
|
}
|
|
else
|
|
{
|
|
$arr_ifaces = array
|
|
(
|
|
NULL => '----- '.__('select interface').' -----'
|
|
) + ORM::factory('iface')->select_list('id', 'name');
|
|
|
|
$arr_vlan_ifaces = array
|
|
(
|
|
NULL => '----- '.__('select vlan interface').' -----'
|
|
) + ORM::factory('vlan_iface')->select_list('id', 'name');
|
|
|
|
$title = __('Add new IP address');
|
|
$link_back_url = url_lang::base().'ip_addresses/show_all';
|
|
|
|
$link_back = html::anchor(
|
|
$link_back_url,
|
|
__('Back to IP addresses list')
|
|
);
|
|
}
|
|
|
|
$this->form = new Forge(
|
|
url::base(TRUE).url::current(TRUE), '',
|
|
'POST', array('id' => 'article_form')
|
|
);
|
|
|
|
$this->form->set_attr('class', 'form_class')
|
|
->set_attr('method', 'post');
|
|
|
|
$arr_subnets = array
|
|
(
|
|
NULL => '----- '.__('select subnet').' -----'
|
|
) + ORM::factory('subnet')->select_list_by_net();
|
|
|
|
$arr_bool = array
|
|
(
|
|
'0'=> __('No'),
|
|
'1'=> __('Yes')
|
|
);
|
|
|
|
$this->form->dropdown('iface_id')
|
|
->label(__('Interface name').':')
|
|
->options($arr_ifaces);
|
|
|
|
$this->form->dropdown('vlan_iface_id')
|
|
->label(__('VLAN interface name').':')
|
|
->options($arr_vlan_ifaces)
|
|
->callback(array($this, 'check_ifaces'));
|
|
|
|
$this->form->input('ip_address')
|
|
->label(__('IP address').':')
|
|
->rules('required|valid_ip_address')
|
|
->callback(array($this, 'valid_ip'));
|
|
|
|
$this->form->dropdown('subnet_id')
|
|
->label(__('Select subnet name').':')
|
|
->options($arr_subnets)
|
|
->rules('required')->add_button('subnets');
|
|
|
|
$this->form->dropdown('gateway')
|
|
->label(__('Gateway').': '.help::hint('gateway'))
|
|
->options($arr_bool)
|
|
->selected('0');
|
|
|
|
$this->form->dropdown('service')
|
|
->label(__('Service').': '.help::hint('service'))
|
|
->options($arr_bool)
|
|
->selected('0');
|
|
|
|
$this->form->submit('submit')
|
|
->value(__('Save'));
|
|
|
|
special::required_forge_style($this->form, ' *', 'required');
|
|
|
|
|
|
|
|
// validate form and save data
|
|
if ($this->form->validate())
|
|
{
|
|
$form_data = $this->form->as_array();
|
|
|
|
foreach ($form_data as $key => $value)
|
|
{
|
|
$form_data[$key] = htmlspecialchars($value);
|
|
}
|
|
|
|
$ip = new ip_address_Model();
|
|
|
|
$ip->delete_ip_address_with_member($form_data['ip_address']);
|
|
|
|
if ($form_data['iface_id'])
|
|
{
|
|
$iface = new Iface_Model($form_data['iface_id']);
|
|
$member_id = $iface->device->user->member->id;
|
|
$ip->iface_id = $form_data['iface_id'];
|
|
}
|
|
else
|
|
{
|
|
$vlan_iface = new Vlan_iface_Model($form_data['vlan_iface_id']);
|
|
$member_id = $vlan_iface->iface->device->user->member->id;
|
|
$ip->vlan_iface_id = $form_data['vlan_iface_id'];
|
|
}
|
|
|
|
$ip->ip_address = $form_data['ip_address'];
|
|
$ip->subnet_id = $form_data['subnet_id'];
|
|
$ip->gateway = $form_data['gateway'];
|
|
$ip->service = $form_data['service'];
|
|
$ip->whitelisted = Ip_address_Model::$no_whitelist;
|
|
unset($form_data);
|
|
|
|
if ($ip->save())
|
|
{
|
|
status::success('IP address is successfully saved.');
|
|
Allowed_subnets_Controller::update_enabled(
|
|
$member_id, array($ip->subnet_id)
|
|
);
|
|
}
|
|
|
|
url::redirect($link_back_url);
|
|
}
|
|
|
|
// breadcrumbs menu
|
|
$breadcrumbs = breadcrumbs::add()
|
|
->link('ip_addresses/show_all', 'IP addresses',
|
|
$this->acl_check_view('Devices_Controller', 'ip_address'))
|
|
->disable_translation()
|
|
->text($title);
|
|
|
|
$view = new View('main');
|
|
$view->title = $title;
|
|
$view->breadcrumbs = $breadcrumbs->html();
|
|
$view->content = new View('form');
|
|
$view->content->form = $this->form->html();
|
|
$view->content->headline = $title;
|
|
$view->render(TRUE);
|
|
} // end of add function
|
|
|
|
|
|
/**
|
|
* Adds new IP address to some iface
|
|
*
|
|
* @author Michal Kliment
|
|
* @param integer $iface_id id of iface to add new IP address
|
|
*/
|
|
public function add_to_iface($iface_id = NULL)
|
|
{
|
|
if (!$iface_id)
|
|
Controller::warning(PARAMETER);
|
|
|
|
$iface = new Iface_Model($iface_id);
|
|
|
|
if (!$iface->id)
|
|
Controller::error(RECORD);
|
|
|
|
$this->form = new Forge(
|
|
url_lang::base()."ip_addresses/add_to_iface/".$iface_id, '',
|
|
'POST', array('id' => 'article_form')
|
|
);
|
|
|
|
$this->form->set_attr('class', 'form_class')
|
|
->set_attr('method', 'post');
|
|
|
|
$arr_ifaces = array();
|
|
|
|
$member_id = $iface->device->user->member_id;
|
|
|
|
if (!$this->acl_check_new('Devices_Controller', 'ip_address', $member_id))
|
|
Controller::error(ACCESS);
|
|
|
|
$arr_ifaces[$iface->id] = $iface->name;
|
|
|
|
$subnet_model = new Subnet_Model();
|
|
|
|
$arr_subnets = array(
|
|
NULL => '----- '.__('select subnet').' -----'
|
|
) + $subnet_model->select_list_by_net();
|
|
|
|
$arr_bool = array
|
|
(
|
|
'0'=> __('No'),
|
|
'1'=> __('Yes')
|
|
);
|
|
|
|
$this->form->dropdown('iface_id')
|
|
->label(__('Interface name').':')
|
|
->options($arr_ifaces);
|
|
|
|
$this->form->input('ip_address')
|
|
->label(__('IP address').':')
|
|
->rules('required|valid_ip_address')
|
|
->callback(array($this, 'valid_ip'));
|
|
|
|
|
|
$this->form->dropdown('subnet_id')
|
|
->label(__('Select subnet name').':')
|
|
->options($arr_subnets)
|
|
->rules('required')
|
|
->add_button('subnets');
|
|
|
|
$this->form->dropdown('gateway')
|
|
->label(__('Gateway'))
|
|
->options($arr_bool)
|
|
->selected('0');
|
|
|
|
$this->form->dropdown('service')
|
|
->label(__('Service'))
|
|
->options($arr_bool)
|
|
->selected('0');
|
|
|
|
$this->form->submit('submit')
|
|
->value(__('Save'));
|
|
|
|
special::required_forge_style($this->form, ' *', 'required');
|
|
|
|
// validate form and save data
|
|
if ($this->form->validate())
|
|
{
|
|
$form_data = $this->form->as_array();
|
|
|
|
foreach ($form_data as $key => $value)
|
|
{
|
|
$form_data[$key] = htmlspecialchars($value);
|
|
}
|
|
|
|
$ip = new ip_address_Model();
|
|
|
|
$ip->delete_ip_address_with_member($form_data['ip_address']);
|
|
|
|
$ip->iface_id = $form_data['iface_id'];
|
|
$ip->ip_address = $form_data['ip_address'];
|
|
$ip->subnet_id = $form_data['subnet_id'];
|
|
$ip->gateway = $form_data['gateway'];
|
|
$ip->service = $form_data['service'];
|
|
$ip->whitelisted = Ip_address_Model::$no_whitelist;
|
|
unset($form_data);
|
|
|
|
if ($ip->save())
|
|
{
|
|
status::success('IP address is successfully saved.');
|
|
Allowed_subnets_Controller::update_enabled(
|
|
$iface->device->user->member_id, array($ip->subnet_id)
|
|
);
|
|
}
|
|
|
|
if (Path::instance()->previous()->uri()->current(0,1) == 'devices')
|
|
url::redirect(url_lang::base() . 'devices/show_ip_address/' . $ip->id);
|
|
else
|
|
url::redirect(url_lang::base() . 'ip_addresses/show/' . $ip->id);
|
|
}
|
|
|
|
if (Path::instance()->previous()->uri()->current(0,1) == 'devices')
|
|
{
|
|
if ($iface->name != '')
|
|
$iface_name = $iface->name." (".$iface->mac.")";
|
|
else
|
|
$iface_name = $iface->mac;
|
|
|
|
$breadcrumbs = breadcrumbs::add()
|
|
->link(
|
|
'members/show_all',
|
|
'Members',
|
|
$this->acl_check_view('Members_Controller','members')
|
|
)
|
|
->link(
|
|
'members/show/'.$iface->device->user->member_id,
|
|
'ID '.$iface->device->user->member->id.' - '.$iface->device->user->member->name,
|
|
$this->acl_check_view(
|
|
'Members_Controller',
|
|
'members',
|
|
$iface->device->user->member_id
|
|
)
|
|
)
|
|
->link(
|
|
'users/show_by_member/'.$iface->device->user->member_id,
|
|
"Users",
|
|
$this->acl_check_view(
|
|
'Users_Controller',
|
|
'users',$iface->device->user->member_id
|
|
)
|
|
)
|
|
->link(
|
|
'users/show/'.$iface->device->user_id,
|
|
$iface->device->user->name.' '.$iface->device->user->surname.' ('.$iface->device->user->login.')',
|
|
$this->acl_check_view(
|
|
'Users_Controller',
|
|
'users',
|
|
$iface->device->user->member_id
|
|
)
|
|
)
|
|
->link(
|
|
'devices/show_by_user/'.$iface->device->user_id,
|
|
'Devices',
|
|
$this->acl_check_view(
|
|
'Devices_Controller',
|
|
'devices',
|
|
$iface->device->user->member_id
|
|
)
|
|
)
|
|
->link(
|
|
'devices/show/'.$iface->device_id,
|
|
$iface->device->name,
|
|
$this->acl_check_view(
|
|
'Devices_Controller',
|
|
'devices',
|
|
$iface->device->user->member_id
|
|
)
|
|
)
|
|
->link(
|
|
'devices/show_iface/'.$iface->id,
|
|
$iface_name,
|
|
$this->acl_check_view(
|
|
'Devices_Controller',
|
|
'iface',
|
|
$iface->device->user->member_id
|
|
)
|
|
);
|
|
}
|
|
else
|
|
{
|
|
|
|
// breadcrumbs menu
|
|
if ($iface->name != '')
|
|
$name = "$iface->name ($iface->mac)";
|
|
else
|
|
$name = $iface->mac;
|
|
|
|
$breadcrumbs = breadcrumbs::add()
|
|
->link('ifaces/show_all', 'Interfaces',
|
|
$this->acl_check_view('Devices_Controller','iface'))
|
|
->link('ifaces/show/' . $iface_id, $name,
|
|
$this->acl_check_view(
|
|
'Devices_Controller', 'iface',
|
|
$iface->device->user->member_id
|
|
));
|
|
}
|
|
|
|
$breadcrumbs->text('Add new IP address');
|
|
|
|
// view
|
|
$view = new View('main');
|
|
$view->title = __('Add new IP address');
|
|
$view->breadcrumbs = $breadcrumbs->html();
|
|
$view->content = new View('form');
|
|
$view->content->form = $this->form->html();
|
|
$view->content->headline = __('Add new IP address');
|
|
$view->render(TRUE);
|
|
} // end of add function
|
|
|
|
/**
|
|
* Adds ...
|
|
*
|
|
* @param integer $vlan_iface_id
|
|
*/
|
|
public function add_to_vlan_iface($vlan_iface_id = NULL)
|
|
{
|
|
if (!$vlan_iface_id)
|
|
Controller::warning(PARAMETER);
|
|
|
|
$vlan_iface = new Vlan_iface_Model($vlan_iface_id);
|
|
|
|
if (!$vlan_iface->id)
|
|
Controller::error(RECORD);
|
|
|
|
$this->form = new Forge(
|
|
url_lang::base().'ip_addresses/add_to_vlan_iface/'.$vlan_iface_id,
|
|
'', 'POST', array('id' => 'article_form')
|
|
);
|
|
|
|
$this->form->set_attr('class', 'form_class')
|
|
->set_attr('method', 'post');
|
|
|
|
$arr_vlan_ifaces = array();
|
|
|
|
$member_id = $vlan_iface->iface->device->user->member_id;
|
|
|
|
if (!$this->acl_check_new('Devices_Controller', 'ip_address', $member_id))
|
|
Controller::error(ACCESS);
|
|
|
|
$arr_vlan_ifaces[$vlan_iface->id] = $vlan_iface->name;
|
|
|
|
$subnet_model = new Subnet_Model();
|
|
|
|
$arr_subnets = array(
|
|
NULL => '----- '.__('select subnet').' -----'
|
|
) + $subnet_model->select_list_by_net();
|
|
|
|
$arr_bool = array
|
|
(
|
|
'0'=> __('No'),
|
|
'1'=> __('Yes')
|
|
);
|
|
|
|
$this->form->dropdown('vlan_iface_id')
|
|
->label(__('VLAN interface name').':')
|
|
->options($arr_vlan_ifaces);
|
|
|
|
$this->form->input('ip_address')
|
|
->label(__('IP address').':')
|
|
->rules('required|valid_ip_address')
|
|
->callback(array($this, 'valid_ip'));
|
|
|
|
|
|
$this->form->dropdown('subnet_id')
|
|
->label(__('Select subnet name').':')
|
|
->options($arr_subnets)
|
|
->rules('required')
|
|
->add_button('subnets');
|
|
|
|
$this->form->dropdown('gateway')
|
|
->label(__('Gateway'))
|
|
->options($arr_bool)
|
|
->selected('0');
|
|
|
|
$this->form->dropdown('service')
|
|
->label(__('Service'))
|
|
->options($arr_bool)
|
|
->selected('0');
|
|
|
|
$this->form->submit('submit')
|
|
->value(__('Save'));
|
|
|
|
special::required_forge_style($this->form, ' *', 'required');
|
|
|
|
// validate form and save data
|
|
if ($this->form->validate())
|
|
{
|
|
$form_data = $this->form->as_array();
|
|
|
|
foreach ($form_data as $key => $value)
|
|
{
|
|
$form_data[$key] = htmlspecialchars($value);
|
|
}
|
|
|
|
$ip = new ip_address_Model();
|
|
|
|
$ip->delete_ip_address_with_member($form_data['ip_address']);
|
|
|
|
$ip->vlan_iface_id = $form_data['vlan_iface_id'];
|
|
$ip->ip_address = $form_data['ip_address'];
|
|
$ip->subnet_id = $form_data['subnet_id'];
|
|
$ip->gateway = $form_data['gateway'];
|
|
$ip->service = $form_data['service'];
|
|
$ip->whitelisted = Ip_address_Model::$no_whitelist;
|
|
unset($form_data);
|
|
|
|
if ($ip->save())
|
|
{
|
|
status::success('IP address is successfully saved.');
|
|
Allowed_subnets_Controller::update_enabled(
|
|
$vlan_iface->iface->device->user->member_id,
|
|
array($ip->subnet_id)
|
|
);
|
|
}
|
|
|
|
if (Path::instance()->previous()->uri()->current(0,1) == 'devices')
|
|
url::redirect(url_lang::base() . 'devices/show_ip_address/' . $ip->id);
|
|
else
|
|
url::redirect(url_lang::base() . 'ip_addresses/show/' . $ip->id);
|
|
}
|
|
|
|
if (Path::instance()->previous()->uri()->current(0,1) == 'devices')
|
|
{
|
|
if ($vlan_iface->iface->name != '')
|
|
$iface_name = $vlan_iface->iface->name." (".$vlan_iface->iface->mac.")";
|
|
else
|
|
$iface_name = $vlan_iface->iface->mac;
|
|
|
|
$breadcrumbs = breadcrumbs::add()
|
|
->link(
|
|
'members/show_all',
|
|
'Members',
|
|
$this->acl_check_view('Members_Controller','members')
|
|
)
|
|
->link(
|
|
'members/show/'.$vlan_iface->iface->device->user->member_id,
|
|
'ID '.$vlan_iface->iface->device->user->member->id.' - '.$vlan_iface->iface->device->user->member->name,
|
|
$this->acl_check_view(
|
|
'Members_Controller',
|
|
'members',
|
|
$vlan_iface->iface->device->user->member_id
|
|
)
|
|
)
|
|
->link(
|
|
'users/show_by_member/'.$vlan_iface->iface->device->user->member_id,
|
|
"Users",
|
|
$this->acl_check_view(
|
|
'Users_Controller',
|
|
'users',$vlan_iface->iface->device->user->member_id
|
|
)
|
|
)
|
|
->link(
|
|
'users/show/'.$vlan_iface->iface->device->user_id,
|
|
$vlan_iface->iface->device->user->name.' '.$vlan_iface->iface->device->user->surname.' ('.$vlan_iface->iface->device->user->login.')',
|
|
$this->acl_check_view(
|
|
'Users_Controller',
|
|
'users',
|
|
$vlan_iface->iface->device->user->member_id
|
|
)
|
|
)
|
|
->link(
|
|
'devices/show_by_user/'.$vlan_iface->iface->device->user_id,
|
|
'Devices',
|
|
$this->acl_check_view(
|
|
'Devices_Controller',
|
|
'devices',
|
|
$vlan_iface->iface->device->user->member_id
|
|
)
|
|
)
|
|
->link(
|
|
'devices/show/'.$vlan_iface->iface->device_id,
|
|
$vlan_iface->iface->device->name,
|
|
$this->acl_check_view(
|
|
'Devices_Controller',
|
|
'devices',
|
|
$vlan_iface->iface->device->user->member_id
|
|
)
|
|
)
|
|
->link(
|
|
'devices/show_iface/'.$vlan_iface->iface->id,
|
|
$iface_name,
|
|
$this->acl_check_view(
|
|
'Devices_Controller',
|
|
'iface',
|
|
$vlan_iface->iface->device->user->member_id
|
|
)
|
|
)
|
|
->link(
|
|
'devices/show_vlan_iface/'.$vlan_iface->id,
|
|
$vlan_iface->name,
|
|
$this->acl_check_view(
|
|
'Devices_Controller',
|
|
'vlan_iface',
|
|
$vlan_iface->iface->device->user->member_id
|
|
)
|
|
);
|
|
}
|
|
else
|
|
{
|
|
|
|
// breadcrumbs
|
|
$breadcrumbs = breadcrumbs::add()
|
|
->link('vlan_ifaces/show_all', 'VLAN Interfaces',
|
|
$this->acl_check_view('Devices_Controller','vlan_iface'))
|
|
->link('vlan_ifaces/show/' . $vlan_iface_id,
|
|
$vlan_iface->name . ' (' . $vlan_iface->id . ')',
|
|
$this->acl_check_view(
|
|
'Devices_Controller', 'vlan_iface', $member_id
|
|
));
|
|
}
|
|
|
|
$breadcrumbs->text('Add new IP address');
|
|
|
|
// view
|
|
$view = new View('main');
|
|
$view->title = __('Add new IP address');
|
|
$view->breadcrumbs = $breadcrumbs->html();
|
|
$view->content = new View('form');
|
|
$view->content->form = $this->form->html();
|
|
$view->content->headline = __('Add new IP address');
|
|
$view->render(TRUE);
|
|
} // end of add function
|
|
|
|
/**
|
|
* Edits IP address
|
|
*
|
|
* @param integer $ip_address_id
|
|
*/
|
|
public function edit($ip_address_id = NULL)
|
|
{
|
|
if (!$ip_address_id)
|
|
Controller::warning(PARAMETER);
|
|
|
|
$ip_address = new ip_address_Model($ip_address_id);
|
|
|
|
if (!$ip_address->id)
|
|
Controller::error(RECORD);
|
|
|
|
$member_id = ($ip_address->iface_id) ?
|
|
$ip_address->iface->device->user->member_id :
|
|
$ip_address->vlan_iface->iface->device->user->member_id;
|
|
|
|
if (!$this->acl_check_edit('Devices_Controller', 'ip_address',$member_id))
|
|
Controller::error(ACCESS);
|
|
|
|
$this->form = new Forge(
|
|
url_lang::base().'ip_addresses/edit/'.$ip_address_id, '',
|
|
'POST', array('id' => 'article_form')
|
|
);
|
|
|
|
$this->form->set_attr('class', 'form_class')
|
|
->set_attr('method', 'post');
|
|
|
|
$iface_model = new Iface_Model();
|
|
$vlan_iface_model = new Vlan_iface_Model();
|
|
|
|
$this->ip_address_id = $ip_address_id;
|
|
|
|
$arr_ifaces = array();
|
|
$arr_vlan_ifaces = array();
|
|
|
|
if ($ip_address->iface_id)
|
|
{
|
|
$arr_ifaces = $iface_model
|
|
->where('id', $ip_address->iface_id)
|
|
->select_list();
|
|
}
|
|
else
|
|
{
|
|
$arr_vlan_ifaces = $vlan_iface_model
|
|
->where('id', $ip_address->vlan_iface_id)
|
|
->select_list();
|
|
}
|
|
|
|
$subnet_model = new Subnet_Model();
|
|
|
|
$arr_subnets = $subnet_model->select_list_by_net();
|
|
|
|
$arr_bool = array
|
|
(
|
|
'0'=> __('No'),
|
|
'1'=> __('Yes')
|
|
);
|
|
|
|
$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');
|
|
|
|
if (count($arr_ifaces))
|
|
{
|
|
$this->form->dropdown('iface_id')
|
|
->label(__('Interface name').':')
|
|
->options($arr_ifaces)
|
|
->selected($ip_address->iface_id);
|
|
}
|
|
|
|
if (count($arr_vlan_ifaces))
|
|
{
|
|
$this->form->dropdown('vlan_iface_id')
|
|
->label(__('VLAN interface name').':')
|
|
->options($arr_vlan_ifaces)
|
|
->selected($ip_address->vlan_iface_id)
|
|
->callback(array($this, 'check_ifaces'));
|
|
}
|
|
|
|
$this->form->input('ip_address')
|
|
->label(__('IP address').':')
|
|
->rules('required|valid_ip_address')
|
|
->value($ip_address->ip_address)
|
|
->callback(array($this, 'valid_ip'));
|
|
|
|
|
|
$this->form->dropdown('subnet_id')
|
|
->label(__('Select subnet name').':')
|
|
->options($arr_subnets)
|
|
->selected($ip_address->subnet_id)
|
|
->rules('required')
|
|
->add_button('subnets');
|
|
|
|
$this->form->dropdown('gateway')
|
|
->label(__('Gateway').': '.help::hint('gateway'))
|
|
->options($arr_bool)
|
|
->selected($ip_address->gateway);
|
|
|
|
$this->form->dropdown('service')
|
|
->label(__('Service').': '.help::hint('service'))
|
|
->options($arr_bool)
|
|
->selected($ip_address->service);
|
|
|
|
$this->form->dropdown('whitelisted')
|
|
->label(__('Whitelist').': '.help::hint('whitelist'))
|
|
->options($whitelist_array)
|
|
->selected($ip_address->whitelisted);
|
|
|
|
$this->form->submit('submit')
|
|
->value(__('Save'));
|
|
|
|
special::required_forge_style($this->form, ' *', 'required');
|
|
|
|
// validation
|
|
if ($this->form->validate())
|
|
{
|
|
$form_data = $this->form->as_array();
|
|
|
|
foreach ($form_data as $key => $value)
|
|
{
|
|
$form_data[$key] = htmlspecialchars($value);
|
|
}
|
|
|
|
$saved = TRUE;
|
|
|
|
$ip = new ip_address_Model($ip_address_id);
|
|
|
|
$ip->delete_ip_address_with_member($form_data['ip_address']);
|
|
|
|
$old_subnet_id = $ip->subnet_id;
|
|
|
|
if (isset($form_data['iface_id']) && (int) $form_data['iface_id'])
|
|
{
|
|
$ip->iface_id = $form_data['iface_id'];
|
|
$ip->vlan_iface_id = null;
|
|
}
|
|
else
|
|
{
|
|
$ip->iface_id = null;
|
|
$ip->vlan_iface_id = $form_data['vlan_iface_id'];
|
|
}
|
|
|
|
$ip->ip_address = $form_data['ip_address'];
|
|
$ip->subnet_id = $form_data['subnet_id'];
|
|
$ip->gateway = $form_data['gateway'];
|
|
$ip->service = $form_data['service'];
|
|
$ip->whitelisted = $form_data['whitelisted'];
|
|
|
|
$saved = $saved && $ip->save();
|
|
|
|
// subnet has been changed and ip address was the only one of this member
|
|
// from this subnet -> deletes subnet from allowed subnets of member
|
|
if ($old_subnet_id != $ip->subnet_id &&
|
|
!$ip->count_all_ip_addresses_by_member_and_subnet($member_id, $old_subnet_id))
|
|
{
|
|
Allowed_subnets_Controller::update_enabled(
|
|
$member_id, NULL, NULL, array($old_subnet_id)
|
|
);
|
|
}
|
|
|
|
Allowed_subnets_Controller::update_enabled($member_id, array($ip->subnet_id));
|
|
|
|
if ($saved)
|
|
{
|
|
status::success('IP address is successfully updated.');
|
|
}
|
|
|
|
if (Path::instance()->previous()->uri()->current(0,1) == 'devices')
|
|
url::redirect(url_lang::base() . 'devices/show_ip_address/' . $ip_address_id);
|
|
else
|
|
url::redirect(url_lang::base() . 'ip_addresses/show/' . $ip_address_id);
|
|
|
|
}
|
|
|
|
if (Path::instance()->previous()->uri()->current(0,1) == 'devices')
|
|
{
|
|
if ($ip_address->iface_id)
|
|
$iface = $ip_address->iface;
|
|
else
|
|
$iface = $ip_address->vlan_iface->iface;
|
|
|
|
if ($iface->name != '')
|
|
$iface_name = "$iface->name ($iface->mac)";
|
|
else
|
|
$iface_name = $iface->mac;
|
|
|
|
$breadcrumbs = breadcrumbs::add()
|
|
->link(
|
|
'members/show_all',
|
|
'Members',
|
|
$this->acl_check_view('Members_Controller','members')
|
|
)
|
|
->link(
|
|
'members/show/'.$iface->device->user->member_id,
|
|
'ID '.$iface->device->user->member->id.' - '.$iface->device->user->member->name,
|
|
$this->acl_check_view(
|
|
'Members_Controller',
|
|
'members',
|
|
$iface->device->user->member_id
|
|
)
|
|
)
|
|
->link(
|
|
'users/show_by_member/'.$iface->device->user->member_id,
|
|
"Users",
|
|
$this->acl_check_view(
|
|
'Users_Controller',
|
|
'users',$iface->device->user->member_id
|
|
)
|
|
)
|
|
->link(
|
|
'users/show/'.$iface->device->user_id,
|
|
$iface->device->user->name.' '.$iface->device->user->surname.' ('.$iface->device->user->login.')',
|
|
$this->acl_check_view(
|
|
'Users_Controller',
|
|
'users',
|
|
$iface->device->user->member_id
|
|
)
|
|
)
|
|
->link(
|
|
'devices/show_by_user/'.$iface->device->user_id,
|
|
'Devices',
|
|
$this->acl_check_view(
|
|
'Devices_Controller',
|
|
'devices',
|
|
$iface->device->user->member_id
|
|
)
|
|
)
|
|
->link(
|
|
'devices/show/'.$iface->device_id,
|
|
$iface->device->name,
|
|
$this->acl_check_view(
|
|
'Devices_Controller',
|
|
'devices',
|
|
$iface->device->user->member_id
|
|
)
|
|
)
|
|
->link(
|
|
'devices/show_iface/'.$iface->id,
|
|
$iface_name,
|
|
$this->acl_check_view(
|
|
'Devices_Controller',
|
|
'iface',
|
|
$iface->device->user->member_id
|
|
)
|
|
);
|
|
|
|
if ($ip_address->vlan_iface_id)
|
|
{
|
|
$breadcrumbs->link(
|
|
'devices/show_vlan_iface/'.$ip_address->vlan_iface->id,
|
|
$ip_address->vlan_iface->name,
|
|
$this->acl_check_view(
|
|
'Devices_Controller',
|
|
'vlan_iface',
|
|
$iface->device->user->member_id
|
|
)
|
|
);
|
|
}
|
|
|
|
$breadcrumbs->disable_translation()
|
|
->link(
|
|
'devices/show_ip_address/'.$ip_address->id,
|
|
$ip_address->ip_address,
|
|
$this->acl_check_view(
|
|
'Devices_Controller',
|
|
'vlan_iface',
|
|
$iface->device->user->member_id
|
|
)
|
|
)
|
|
->enable_translation()
|
|
->text('Edit IP address');
|
|
}
|
|
else
|
|
{
|
|
|
|
// breadcrumbs menu
|
|
$breadcrumbs = breadcrumbs::add();
|
|
|
|
if ($ip_address->vlan_iface_id)
|
|
{
|
|
$breadcrumbs->link(
|
|
'vlan_ifaces/show_all', 'VLAN Interfaces',
|
|
$this->acl_check_view('Devices_Controller','vlan_iface'))
|
|
->link('vlan_ifaces/show/' . $ip_address->vlan_iface_id,
|
|
$ip_address->vlan_iface->name . ' (' . $ip_address->vlan_iface->id . ')',
|
|
$this->acl_check_view(
|
|
'Devices_Controller', 'vlan_iface', $member_id
|
|
));
|
|
}
|
|
elseif ($ip_address->iface_id)
|
|
{
|
|
if (empty($ip_address->iface->name))
|
|
{
|
|
$name = $ip_address->iface->mac;
|
|
}
|
|
else
|
|
{
|
|
$name = $ip_address->iface->name . ' (' . $ip_address->iface->mac . ')';
|
|
}
|
|
|
|
$breadcrumbs->link(
|
|
'ifaces/show_all', 'Interfaces',
|
|
$this->acl_check_view('Devices_Controller','iface'))
|
|
->link('ifaces/show/' . $ip_address->iface_id, $name,
|
|
$this->acl_check_view(
|
|
'Devices_Controller', 'iface',
|
|
$ip_address->iface->device->user->member_id
|
|
));
|
|
}
|
|
else
|
|
{
|
|
$breadcrumbs->link(
|
|
'ip_addresses/show_all', 'IP addresses',
|
|
$this->acl_check_view('Devices_Controller', 'ip_address')
|
|
)->disable_translation()
|
|
->link('ip_addresses/show/' . $ip_address->id,
|
|
$ip_address->ip_address . ' (' . $ip_address->id . ')',
|
|
$this->acl_check_view('Devices_Controller', 'ip_address'));
|
|
}
|
|
|
|
$breadcrumbs->disable_translation()
|
|
->link('ip_addresses/show/' . $ip_address_id,
|
|
$ip_address->ip_address . ' (' . $ip_address->id . ')',
|
|
$this->acl_check_view(
|
|
'Devices_Controller', 'ip_address', $member_id
|
|
))
|
|
->enable_translation()
|
|
->text('Edit IP address');
|
|
|
|
}
|
|
|
|
// view
|
|
$view = new View('main');
|
|
$view->title = __('Edit IP address') . ' - '.$ip_address->ip_address;
|
|
$view->breadcrumbs = $breadcrumbs->html();
|
|
$view->content = new View('form');
|
|
$view->content->form = $this->form->html();
|
|
$view->content->headline = __('Edit IP address').' - '.$ip_address->ip_address;
|
|
$view->render(TRUE);
|
|
} // end of add function
|
|
|
|
/**
|
|
* Function deletes given ip address.
|
|
*
|
|
* @param integer $ip_address_id
|
|
*/
|
|
public function delete($ip_address_id = NULL)
|
|
{
|
|
if (!isset($ip_address_id))
|
|
Controller::warning(PARAMETER);
|
|
|
|
$ip_address = new ip_address_Model($ip_address_id);
|
|
|
|
if ($ip_address->vlan_iface_id)
|
|
$link_back = url_lang::base() . 'vlan_ifaces/show/' . $ip_address->vlan_iface_id;
|
|
elseif ($ip_address->iface_id)
|
|
$link_back = url_lang::base() . 'ifaces/show/' . $ip_address->iface_id;
|
|
else
|
|
$link_back = url_lang::base() . 'ip_addresses/show_all';
|
|
|
|
if (!$ip_address->id)
|
|
Controller::error(RECORD);
|
|
|
|
// identify the owner of ip_address
|
|
if ($ip_address->iface_id)
|
|
$member_id = $ip_address->iface->device->user->member_id;
|
|
else
|
|
$member_id = $ip_address->vlan_iface->iface->device->user->member_id;
|
|
|
|
if (!$this->acl_check_delete('Devices_Controller', 'ip_address', $member_id))
|
|
Controller::error(ACCESS);
|
|
|
|
$ip_address_string = $ip_address->ip_address;
|
|
$subnet_id = $ip_address->subnet_id;
|
|
|
|
// success
|
|
if ($ip_address->delete())
|
|
{
|
|
// ip address was the only one of this member
|
|
// from this subnet -> deletes subnet from allowed subnets of member
|
|
if (!$ip_address->count_all_ip_addresses_by_member_and_subnet($member_id, $subnet_id))
|
|
{
|
|
Allowed_subnets_Controller::update_enabled(
|
|
$member_id, NULL, NULL, array($subnet_id)
|
|
);
|
|
}
|
|
|
|
status::success('IP address has been successfully deleted.');
|
|
|
|
// delete is successful, let's delete redirections and static html redirection page, if exists
|
|
Database::instance()->delete('messages_ip_addresses', array('ip_address_id' => $ip_address_id));
|
|
|
|
@unlink("static/$ip_address_string.html");
|
|
}
|
|
else
|
|
{
|
|
status::error('Error - cant delete ip address.');
|
|
}
|
|
|
|
if (url::slice(url_lang::uri(Path::instance()->previous()->current()),0,2) == 'ip_addresses/show')
|
|
url::redirect(Path::instance()->previous()->previous()->current());
|
|
else
|
|
url::redirect(Path::instance()->previous()->current());
|
|
}
|
|
|
|
/**
|
|
* Checks validity of ip address.
|
|
*
|
|
* @param object $input
|
|
*/
|
|
public function valid_ip($input)
|
|
{
|
|
$method = $this->form->ip_address->method; // <FORM> method = POST, GET, ...
|
|
$ip = ip2long($this->input->$method('ip_address')); // Submitted values;
|
|
|
|
|
|
if ($ip === FALSE || $ip == -1)
|
|
{ // invalid IP adress
|
|
$input->add_error('required', __('Invalid IP address'));
|
|
return false;
|
|
}
|
|
|
|
$subnet_id = $this->input->$method('subnet_id');
|
|
$subnet_model = new Subnet_Model($subnet_id);
|
|
$subnet = $subnet_model->get_net_and_mask_of_subnet();
|
|
|
|
if ($subnet && $subnet->id)
|
|
{
|
|
$this->check_ip($ip, 0 + $subnet->net, $subnet->mask, $input);
|
|
}
|
|
else
|
|
{
|
|
$input->add_error('required', __('Invalid subnet'));
|
|
}
|
|
|
|
|
|
// checks if exists this ip
|
|
$ip_model = new ip_address_Model();
|
|
|
|
$ips = $ip_model->where(array('ip_address' => $input->value, 'member_id' => NULL))->find_all();
|
|
|
|
foreach ($ips as $ip)
|
|
{
|
|
// only for edit: check if ip_address is not still same
|
|
if ($this->ip_address_id != $ip->id)
|
|
{
|
|
$input->add_error('required', __('IP address already exists.'));
|
|
}
|
|
}
|
|
} // end of valid_ip
|
|
|
|
/**
|
|
* Checks ip address if matches subnet and mask.
|
|
*
|
|
* @param string $ip
|
|
* @param integer $net
|
|
* @param string $mask
|
|
* @param object $input
|
|
*/
|
|
public function check_ip($ip, $net, $mask, $input)
|
|
{
|
|
$mask = 0xffffffff << (32 - $mask) & 0xffffffff;
|
|
// printf(" ip=%lx, net=%lx, mask=%lx, AND=%lx", $ip, 0+$net, $mask, $ip & $mask);
|
|
if (($ip & $mask) != (int) $net)
|
|
{
|
|
$input->add_error('required', __(
|
|
'IP address does not match the subnet/mask.'
|
|
));
|
|
}
|
|
else if ($ip == $net || ($ip == ($net | ~$mask)) && ~$mask != 0)
|
|
{
|
|
$input->add_error('required', __('Invalid IP address'));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Check ifaces
|
|
*
|
|
* @param object $input
|
|
*/
|
|
public function check_ifaces($input)
|
|
{
|
|
$method = $this->form->ip_address->method; // <FORM> method = POST, GET, ...
|
|
$iface_id = $this->input->$method('iface_id');
|
|
$vlan_iface_id = $input->value;
|
|
|
|
if ($iface_id && $vlan_iface_id)
|
|
{
|
|
$input->add_error('required', __('Select only one type of iface.'));
|
|
}
|
|
else if (!$iface_id && !$vlan_iface_id)
|
|
{
|
|
$input->add_error('required', __('Interface has not been selected.'));
|
|
}
|
|
}
|
|
|
|
}
|