Пример #1
0
 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);
         }
     }
 }
Пример #2
0
 /**
  * 
  * 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();
             }
         }
     }
 }