Revize 1772
Přidáno uživatelem Michal Kliment před asi 12 roky(ů)
freenetis/branches/1.1/application/i18n/cs_CZ/texts.php | ||
---|---|---|
'there are not any unassigned admins' => 'Neexistují nepřiřazení správci',
|
||
'there are not any unassigned subnets' => 'Neexistují nepřiřazené podsítě',
|
||
'there is already some vlan with this tag' => 'Již existuje nějaký VLAN s tímto tagem.',
|
||
'there is at least one ip address of subnet which not belong to subnet range' => 'Existuje alespoň jedna IP adresa podsítě, která nepatří do rozsahu podsítě.',
|
||
'third-degree certified engineers' => 'Certifikovaní technici třetího stupně',
|
||
'this account does not exist' => 'Tento účet neexistuje.',
|
||
'this approval template already contains approval type with the same priority' => 'Tato hlasovací šablona již obsahuje hlasovací typ se stejnou prioritou.',
|
freenetis/branches/1.1/application/models/ip_address.php | ||
---|---|---|
}
|
||
|
||
/**
|
||
* Deletes all IP addresses of subnet with owner
|
||
*
|
||
* @author Michal Kliment <kliment@freenetis.org>
|
||
* @param type $subnet_id
|
||
*/
|
||
public function delete_ip_addresses_of_subnet_with_owner($subnet_id)
|
||
{
|
||
$this->db->query("
|
||
DELETE FROM ip_addresses
|
||
WHERE subnet_id = ? AND member_id IS NOT NULL
|
||
", $subnet_id);
|
||
}
|
||
|
||
/**
|
||
* Sets whitelist
|
||
*
|
||
* @param ineteger $whitelist
|
||
... | ... | |
return $arr_ip;
|
||
}
|
||
|
||
/**
|
||
* Returns first IP address of subnet
|
||
*
|
||
* @author Michal Kliment <kliment@freenetis.org>
|
||
* @param type $subnet_id
|
||
* @return type
|
||
*/
|
||
public function get_first_ip_address_of_subnet($subnet_id, $without_owner = FALSE)
|
||
{
|
||
// not return IP addresses with owner
|
||
$WHERE = ($without_owner) ? "AND member_id IS NULL" : "";
|
||
|
||
$result = $this->db->query("
|
||
SELECT ip.*
|
||
FROM ip_addresses ip
|
||
WHERE subnet_id = ? $WHERE
|
||
ORDER BY INET_ATON(ip_address)
|
||
", array($subnet_id));
|
||
|
||
return ($result && $result->current()) ? $result->current() : FALSE;
|
||
}
|
||
|
||
/**
|
||
* Returns last IP address of subnet
|
||
*
|
||
* @author Michal Kliment <kliment@freenetis.org>
|
||
* @param type $subnet_id
|
||
* @return type
|
||
*/
|
||
public function get_last_ip_address_of_subnet($subnet_id, $without_owner = FALSE)
|
||
{
|
||
// not return IP addresses with owner
|
||
$WHERE = ($without_owner) ? "AND member_id IS NULL" : "";
|
||
|
||
$result = $this->db->query("
|
||
SELECT ip.*
|
||
FROM ip_addresses ip
|
||
WHERE subnet_id = ? $WHERE
|
||
ORDER BY INET_ATON(ip_address) DESC
|
||
", array($subnet_id));
|
||
|
||
return ($result && $result->current()) ? $result->current() : FALSE;
|
||
}
|
||
|
||
}
|
freenetis/branches/1.1/application/controllers/subnets.php | ||
---|---|---|
{
|
||
if ($ip->iface_id)
|
||
{
|
||
$id = $ip->id;
|
||
$member_id = $ip->iface->device->user->member_id;
|
||
$member_name = $ip->iface->device->user->member->name;
|
||
}
|
||
else
|
||
{
|
||
$id = NULL;
|
||
$member_id = $ip->member_id;
|
||
$member_name = $ip->member->name;
|
||
}
|
||
|
||
$ip_addresses[ip2long($ip->ip_address)-$network] = arr::to_object(array
|
||
(
|
||
'id' => $ip->id,
|
||
'id' => $id,
|
||
'device_id' => $ip->iface->device_id,
|
||
'device_name' => $ip->iface->device->name,
|
||
'device_type' => $enum_type_model->get_value($ip->iface->device->type),
|
||
... | ... | |
if($form->validate())
|
||
{
|
||
$form_data = $form->as_array();
|
||
|
||
if ($subnet_model->subnets_owner->member->id != $form_data['owner_id'])
|
||
|
||
$ip_address_model = new Ip_address_Model();
|
||
|
||
try
|
||
{
|
||
$ip_address_model = new Ip_address_Model();
|
||
$subnet_model->transaction_start();
|
||
|
||
$ip_address_model->delete_ip_addresses_by_subnet_member(
|
||
$subnet_id, $subnet_model->subnets_owner->member_id
|
||
);
|
||
$subnet_model->name = $form_data['name'];
|
||
$subnet_model->network_address = $form_data['network_address'];
|
||
$subnet_model->netmask = $form_data['netmask'];
|
||
$subnet_model->OSPF_area_id = $form_data['OSPF_area_id'];
|
||
$subnet_model->dhcp = $form_data['dhcp'];
|
||
$subnet_model->qos = $form_data['qos'];
|
||
|
||
if ($this->acl_check_edit('Devices_Controller', 'redirect'))
|
||
{
|
||
$subnet_model->redirect = $form_data['redirect'];
|
||
}
|
||
|
||
$subnet_model->save_throwable();
|
||
|
||
// deletes all IP addresses with owner
|
||
$ip_address_model->delete_ip_addresses_of_subnet_with_owner($subnet_model->id);
|
||
|
||
// owner has been set and will be changed
|
||
if ($subnet_model->subnets_owner->id && $subnet_model->subnets_owner->member_id != $form_data['owner_id'])
|
||
{
|
||
$member_id = $subnet_model->subnets_owner->member->id;
|
||
|
||
$count = $ip_address_model->count_all_ip_addresses_by_member_and_subnet(
|
||
$member_id, $subnet_model->id
|
||
);
|
||
|
||
if (!$count)
|
||
{
|
||
Allowed_subnets_Controller::update_enabled(
|
||
$member_id, NULL, NULL, array($subnet_model->id)
|
||
);
|
||
}
|
||
}
|
||
|
||
// owner is set
|
||
if ($form_data['owner_id'])
|
||
{
|
||
{
|
||
$subnet_model->subnets_owner->subnet_id = $subnet_model->id;
|
||
$subnet_model->subnets_owner->member_id = $form_data['owner_id'];
|
||
$subnet_model->subnets_owner->redirect = 0;
|
||
|
||
$subnet_model->subnets_owner->save();
|
||
|
||
$subnet_model->subnets_owner->save_throwable();
|
||
|
||
// find all free IP addresses
|
||
$ips = $subnet_model->get_free_ip_addresses();
|
||
|
||
$ip_address_model = new Ip_address_Model();
|
||
|
||
|
||
foreach ($ips as $ip)
|
||
{
|
||
$ip_address_model->clear();
|
||
... | ... | |
Allowed_subnets_Controller::update_enabled(
|
||
$form_data['owner_id'], array($subnet_model->id)
|
||
);
|
||
|
||
}
|
||
else
|
||
{
|
||
$subnet_model->subnets_owner->delete();
|
||
else if ($subnet_model->subnets_owner->id)
|
||
{
|
||
$subnet_model->subnets_owner->delete_throwable();
|
||
}
|
||
|
||
$member_id = $subnet_model->subnets_owner->member->id;
|
||
$count = ORM::factory('ip_address')->count_all_ip_addresses_by_member_and_subnet(
|
||
$member_id, $subnet_model->id
|
||
);
|
||
|
||
if ($subnet_model->subnets_owner->member->id && !$count)
|
||
{
|
||
Allowed_subnets_Controller::update_enabled(
|
||
$member_id, NULL, NULL, array($subnet_model->id)
|
||
);
|
||
}
|
||
$subnet_model->transaction_commit();
|
||
|
||
status::success('Subnet has been successfully updated.');
|
||
}
|
||
|
||
$subnet_model->name = $form_data['name'];
|
||
$subnet_model->network_address = $form_data['network_address'];
|
||
$subnet_model->netmask = $form_data['netmask'];
|
||
$subnet_model->OSPF_area_id = $form_data['OSPF_area_id'];
|
||
$subnet_model->dhcp = $form_data['dhcp'];
|
||
$subnet_model->qos = $form_data['qos'];
|
||
|
||
if ($this->acl_check_edit('Devices_Controller', 'redirect'))
|
||
catch (Exception $e)
|
||
{
|
||
$subnet_model->redirect = $form_data['redirect'];
|
||
$subnet_model->transaction_rollback();
|
||
|
||
status::error('Error - subnet has not been successfully updated.');
|
||
}
|
||
|
||
if ($subnet_model->save())
|
||
{
|
||
status::success('Subnet has been successfully updated.');
|
||
}
|
||
|
||
|
||
$this->redirect('subnets/show/' . $subnet_id);
|
||
|
||
}
|
||
else
|
||
{
|
||
... | ... | |
|
||
$netip = ip2long($input->value);
|
||
$mask = (int) ip2long($_POST['netmask']);
|
||
|
||
$net_start = ip2long($input->value);
|
||
$net_end = $net_start + (~ip2long($netmask) & 0xffffffff) + 1;
|
||
|
||
$ip_address_model = new Ip_address_Model();
|
||
|
||
// try to find first IP address of subnet
|
||
$first_ip_address = $ip_address_model->get_first_ip_address_of_subnet(
|
||
$this->subnet_id, TRUE
|
||
);
|
||
|
||
// first IP address exist
|
||
if ($first_ip_address)
|
||
{
|
||
// trasnsform to long
|
||
$first_ip_address = ip2long($first_ip_address->ip_address);
|
||
|
||
// first IP address is not in subnet range
|
||
if ($first_ip_address < $net_start || $first_ip_address > $net_end)
|
||
{
|
||
$input->add_error('required', __(
|
||
'There is at least one ip address of subnet which not belong to subnet range'
|
||
));
|
||
}
|
||
}
|
||
|
||
// try to find last IP address of subnet
|
||
$last_ip_address = $ip_address_model->get_last_ip_address_of_subnet(
|
||
$this->subnet_id, TRUE
|
||
);
|
||
|
||
// last IP address exist
|
||
if ($last_ip_address)
|
||
{
|
||
// trasnsform to long
|
||
$last_ip_address = ip2long($last_ip_address->ip_address);
|
||
|
||
// last IP address is not in subnet range
|
||
if ($last_ip_address < $net_start || $last_ip_address > $net_end)
|
||
{
|
||
$input->add_error('required', __(
|
||
'There is at least one ip address of subnet which not belong to subnet range'
|
||
));
|
||
}
|
||
}
|
||
|
||
// default network adress ranges are set
|
||
if (($ranges = Settings::get('address_ranges')) != '')
|
||
{
|
||
$net_start = ip2long($input->value);
|
||
$net_end = $net_start + (~ip2long($netmask) & 0xffffffff) + 1;
|
||
|
||
// transform string to array
|
||
$ranges = explode(',', $ranges);
|
||
|
freenetis/branches/1.1/application/controllers/ip_addresses.php | ||
---|---|---|
try // try to make DB transction
|
||
{
|
||
$ip_address->transaction_start();
|
||
$ip_address->delete_throwable();
|
||
|
||
if ($ip_address->subnet->subnets_owner->id)
|
||
{
|
||
$ip_address->member_id = $ip_address->subnet->subnets_owner->member->id;
|
||
$ip_address->iface_id = NULL;
|
||
|
||
$ip_address->save_throwable();
|
||
}
|
||
else
|
||
$ip_address->delete_throwable();
|
||
|
||
$ip_address->transaction_commit();
|
||
|
||
// ip address was the only one of this member
|
Také k dispozici: Unified diff
Opravy:
- #411 - Zmena velikosti podsite s vlastnikem podsite
- #413 - Rozkol IP adres a podsite pri zmene velikosti podsite - vyreseno vylepsenym validatorem