public function action_ports() { if ($_POST) { $val = \Validation::forge(); $val->add_field('dev', 'Device id', 'required|min_length[1]|max_length[20]'); $val->add_field('type', 'Port type', 'required|min_length[1]|max_length[20]'); if ($val->run()) { $network = Model_Device_Network::find()->where('deviceID', $val->validated('dev'))->get_one(); if ($network) { $m = $network->device->cat; $out = array('status' => 'ok', 'cables' => array(), 'ports' => array()); switch ($network->device->cat) { case 2: //switch //switch case 8: //FC switch //FC switch case 3: //router /* * get data from macs * */ $macs = $network->mac; foreach ($macs as $mac) { array_push($out['ports'], array('id' => $mac->id)); } $cabels = Model_Cable::find()->where('type', 1)->where('dev1', $network->deviceID)->or_where('dev2', $network->deviceID)->get(); break; case 5: $macs = $network->mac; foreach ($macs as $mac) { if ($mac->type == $val->validated('type')) { array_push($out['ports'], array('id' => $mac->id)); } } if ($val->validated('type') == 3) { $portType = 4; } else { $portType = $val->validated('type'); } $cabels = Model_Cable::query()->where('type', $portType)->and_where_open()->where('dev1', '=', $val->validated('dev'))->or_where('dev2', '=', $val->validated('dev'))->and_where_close()->get(); break; default: $ips = $network->ip; foreach ($ips as $ip) { array_push($out['ports'], array('id' => $ip->id, 'type' => $ip->type)); } $cabels = Model_Cable::find()->where('type', 1)->where('dev1', $network->deviceID)->or_where('dev2', $network->deviceID)->get(); break; } //$out['ports']=$ports; foreach ($cabels as $cab) { array_push($out['cables'], array('id' => $cab->id, 'dev1' => $cab->dev1, 'port1' => $cab->port1, 'dev2' => $cab->dev2, 'port2' => $cab->port2, 'name1' => $cab->name1, 'name2' => $cab->name2)); } } else { $out = array('status' => 'nop'); } echo json_encode($out); } } }
/** * * Update database insert/remove mac rows * @param unknown_type $new_size * @param unknown_type $total * @param unknown_type $type */ private function fix_MACfields($new_size, $total, $type) { $panel = $type; if ($new_size < $total) { $dif = $total - $new_size; } else { $dif = $new_size - $total; } if ($total > $new_size) { //delete overage fileds if ($this->tmpl) { // split for patch panels if ($panel == 3) { $ext = Model_Device_Template_Network_Mac::find()->where('tempnetID', $this->field->network->id)->where('type', 3)->limit($dif / 2, $dif / 2)->order_by('id', 'desc')->get(); $int = Model_Device_Template_Network_Mac::find()->where('tempnetID', $this->field->network->id)->where('type', 1)->limit($dif / 2, $dif / 2)->order_by('id', 'desc')->get(); $mac_data = array_merge($ext, $int); } else { $mac_data = Model_Device_Template_Network_Mac::find()->where('tempnetID', $this->field->network->id)->where('type', $type)->limit($dif)->order_by('id', 'desc')->get(); } foreach ($mac_data as $mac) { $mac->delete(); } } else { if ($panel == 3) { $ext = Model_Network_Mac::find()->where('networkID', $this->field->network->id)->where('type', 3)->limit($dif / 2, $dif / 2)->order_by('id', 'desc')->get(); $int = Model_Network_Mac::find()->where('networkID', $this->field->network->id)->where('type', 1)->limit($dif / 2, $dif / 2)->order_by('id', 'desc')->get(); $mac_data = array_merge($ext, $int); } else { $mac_data = Model_Network_Mac::find()->where('networkID', $this->field->network->id)->where('type', $type)->limit($dif)->order_by('id', 'desc')->get(); } foreach ($mac_data as $mac) { $cabels = Model_Cable::query()->where('dev1', $mac->net->deviceID)->where('port1', $mac->id)->and_where_open()->where('type', '=', 1)->or_where('type', '=', 3)->and_where_close()->get(); foreach ($cabels as $cab) { $c = Model_Cable::find(cab - id); $c->delete(); } $cabels = Model_Cable::query()->where('dev2', $mac->net->deviceID)->where('port2', $mac->id)->and_where_open()->where('type', '=', 1)->or_where('type', '=', 3)->and_where_close()->get(); foreach ($cabels as $cab) { $c = Model_Cable::find($cab - id); $c->delete(); } //error if not set on 0, for existing vlan $mac->vlan = 0; $mac->vlans = false; $mac->delete(); } } } else { //add new empty fields (diference) if ($total < $new_size) { for ($i = 0; $i < $dif; $i++) { //split for patch panel if ($panel == 3) { if ($i < $dif / 2) { $type = 1; } else { $type = 3; } } if ($this->tmpl) { $prop = array('tempnetID' => $this->field->network->id, 'mac_address' => '', 'conn_device' => 0, 'vlan' => 0, 'type' => $type); $mac = new Model_Device_Template_Network_Mac($prop); } else { $prop = array('networkID' => $this->field->network->id, 'mac_address' => '', 'conn_device' => 0, 'vlan' => 0, 'type' => $type); $mac = new Model_Network_Mac($prop); } $mac->save(); } } } }