Revize 482
Přidáno uživatelem Michal Kliment před asi 15 roky(ů)
freenetis/trunk/kohana/application/controllers/devices.php | ||
---|---|---|
$ip_address_model = new Ip_address_Model();
|
||
$user_model = new User_Model();
|
||
$subnet_model = new Subnet_Model();
|
||
$enum_type_model = new Enum_type_Model();
|
||
|
||
// ID of member is set up
|
||
if ($member_id)
|
||
{
|
||
$member = new Member_Model($member_id);
|
||
... | ... | |
|
||
$ip_address = $ip_address_model->where('ip_address',$device->address)->find();
|
||
|
||
// ip adress already exists
|
||
if ($ip_address->id)
|
||
{
|
||
//mac address is different
|
||
if ($device->mac_address != $ip_address->iface->mac)
|
||
{
|
||
$ip_address->iface->segment_id = $ip_address->subnet->segment_id;
|
||
$ip_address->iface->mac = $device->mac_address;
|
||
$ip_address->save();
|
||
$ip_address->iface->save();
|
||
}
|
||
// owner of device is different
|
||
if ($user->id != $ip_address->iface->device->user_id)
|
||
{
|
||
$ip_address->iface->device->user_id = $user->id;
|
||
$ip_address->save();
|
||
$ip_address->iface->device->name = $user->login."_pc";
|
||
$ip_address->iface->device->save();
|
||
}
|
||
}
|
||
// ip address doesn't exist'
|
||
else
|
||
{
|
||
$iface = $iface_model->where('mac',$device->mac_address)->find();
|
||
|
||
// mac address already exists
|
||
if ($iface->id)
|
||
{
|
||
$ip_addresses = $iface->find_related_ip_addresses();
|
||
$ip_address = $ip_addresses->current();
|
||
|
||
if (!is_array($ip_addresses))
|
||
{
|
||
$ip_address = $ip_addresses->current();
|
||
|
||
if (!$ip_address->id)
|
||
$ip_address->clear();
|
||
if (!$ip_address->id)
|
||
$ip_address->clear();
|
||
}
|
||
else
|
||
$ip_address = new Ip_address_model();
|
||
|
||
$ip = ip2long($device->address);
|
||
$subnets = $subnet_model
|
||
... | ... | |
"inet_aton(network_address) as net",
|
||
"32-log2((~inet_aton(netmask) & 0xffffffff) + 1) as mask")
|
||
->find_all();
|
||
|
||
$arr_subnets = array();
|
||
foreach($subnets as $subnet)
|
||
{
|
||
... | ... | |
$ip_address->subnet_id = $subnet_id;
|
||
$ip_address->ip_address = $device->address;
|
||
$ip_address->iface_id = $iface->id;
|
||
$ip_address->save();
|
||
|
||
if ($user->id != $ip_address->iface->device->user_id)
|
||
{
|
||
$ip_address->iface->device->user_id = $user->id;
|
||
$ip_address->save();
|
||
$ip_address->iface->device->name = $user->login."_pc";
|
||
$ip_address->iface->device->save();
|
||
}
|
||
|
||
}
|
||
// mac address doesn't exist, create new device
|
||
else
|
||
{
|
||
$ip = ip2long($device->address);
|
||
$subnets = $subnet_model
|
||
->select("id","name","network_address as net_str",
|
||
"inet_aton(network_address) as net",
|
||
"32-log2((~inet_aton(netmask) & 0xffffffff) + 1) as mask")
|
||
->find_all();
|
||
|
||
$arr_subnets = array();
|
||
foreach($subnets as $subnet)
|
||
{
|
||
$mask = 0xffffffff << (32-$subnet->mask) & 0xffffffff;
|
||
if (($ip & $mask) == $subnet->net)
|
||
$arr_subnets[] = $subnet;
|
||
}
|
||
// remote ip address belongs to some subnet
|
||
$subnet_id = count($arr_subnets) ? $arr_subnets[0]->id : NULL;
|
||
$subnet = new Subnet_Model($subnet_id);
|
||
|
||
$device_model->clear();
|
||
$device_model->user_id = $user->id;
|
||
$device_model->address_point_id = $member->address_point_id;
|
||
$device_model->name = $user->login."_pc";
|
||
$device_model->type = $enum_type_model->get_type_id('pc');
|
||
$device_model->comment = 'Import';
|
||
$device_model->save();
|
||
|
||
$iface_model->clear();
|
||
$iface_model->device_id = $device_model->id;
|
||
$iface_model->segment_id = $subnet->segment_id;
|
||
$iface_model->mac = $device->mac_address;
|
||
$iface_model->name = $user->login."_pc";
|
||
$iface_model->save();
|
||
|
||
$ip_address_model->clear();
|
||
$ip_address_model->iface_id = $iface_model->id;
|
||
$ip_address_model->subnet_id = $subnet->id;
|
||
$ip_address_model->ip_address = $device->address;
|
||
$ip_address_model->save();
|
||
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
echo "Clen nenalezen - (".$device->comment.")<br />";
|
||
}
|
||
|
||
}
|
||
|
||
public static function get_ID_from_comment($comment = '')
|
Také k dispozici: Unified diff
Synchronizacni skript Mikrotik -> Freenetis by mel nyni fungovat. Moje
testy na lokale dopadly bezchybne, nutno zkusit na nejakem realnem AP...