// Returns: record as created // $app->put('/devicetemplate/:templateid/slot/:slotnum', function ($templateid, $slotnum) use($app, $person) { $s = new Slot(); foreach ($app->request->put() as $prop => $val) { $s->{$prop} = $val; } // This should be in the commit data but if we get a smartass saying it's in the URL $s->TemplateID = $templateid; $s->Position = $slotnum; if (!$person->WriteAccess) { $response['error'] = true; $response['errorcode'] = 403; $response['message'] = __("Unauthorized"); } else { if (!$s->CreateSlot()) { $response['error'] = true; $response['errorcode'] = 404; $response['message'] = __("Device template slot creation failed"); } else { $response['error'] = false; $response['errorcode'] = 200; $response['powerport'] = $s; } } echoResponse(200, $response); }); // // URL: /api/v1/manufacturer/:name // Method: PUT // Params: none
function ImportTemplate($file) { $result = array(); $result["status"] = ""; $result["log"] = array(); $ierror = 0; //validate xml template file with openDCIMdevicetemplate.xsd libxml_use_internal_errors(true); $xml = new XMLReader(); $xml->open($file); $resp = $xml->setSchema("openDCIMdevicetemplate.xsd"); while (@$xml->read()) { } // empty loop $errors = libxml_get_errors(); if (count($errors) > 0) { $result["status"] = __("No valid file"); foreach ($errors as $error) { $result["log"][$ierror++] = $error->message; } return $result; } libxml_clear_errors(); $xml->close(); //read xml template file $xmltemplate = simplexml_load_file($file); //manufacturer $manufacturer = new Manufacturer(); $manufacturer->Name = transform($xmltemplate->ManufacturerName); if (!$manufacturer->GetManufacturerByName()) { //New Manufacturer $manufacturer->CreateManufacturer(); } $template = new DeviceTemplate(); $template->ManufacturerID = $manufacturer->ManufacturerID; $template->Model = transform($xmltemplate->TemplateReg->Model); $template->Height = $xmltemplate->TemplateReg->Height; $template->Weight = $xmltemplate->TemplateReg->Weight; $template->Wattage = $xmltemplate->TemplateReg->Wattage; $template->DeviceType = $xmltemplate->TemplateReg->DeviceType; $template->PSCount = $xmltemplate->TemplateReg->PSCount; $template->NumPorts = $xmltemplate->TemplateReg->NumPorts; $template->Notes = trim($xmltemplate->TemplateReg->Notes); $template->Notes = $template->Notes == "<br>" ? "" : $template->Notes; $template->FrontPictureFile = $xmltemplate->TemplateReg->FrontPictureFile; $template->RearPictureFile = $xmltemplate->TemplateReg->RearPictureFile; $template->SNMPVersion = $xmltemplate->TemplateReg->SNMPVersion; $template->ChassisSlots = $template->DeviceType == "Chassis" ? $xmltemplate->TemplateReg->ChassisSlots : 0; $template->RearChassisSlots = $template->DeviceType == "Chassis" ? $xmltemplate->TemplateReg->RearChassisSlots : 0; //Check if picture files exist if ($template->FrontPictureFile != "" && file_exists("pictures/" . $template->FrontPictureFile)) { $result["status"] = __("Import Error"); $result["log"][0] = __("Front picture file already exists"); return $result; } if ($template->RearPictureFile != "" && file_exists("pictures/" . $template->RearPictureFile)) { $result["status"] = __("Import Error"); $result["log"][0] = __("Rear picture file already exists"); return $result; } //create the template if (!$template->CreateTemplate()) { $result["status"] = __("Import Error"); $result["log"][0] = __("An error has occurred creating the template.<br>Possibly there is already a template of the same manufacturer and model"); return $result; } //get template to this object $this->TemplateID = $template->TemplateID; $this->GetTemplateByID(); //slots foreach ($xmltemplate->SlotReg as $xmlslot) { $slot = new Slot(); $slot->TemplateID = $this->TemplateID; $slot->Position = intval($xmlslot->Position); $slot->BackSide = intval($xmlslot->BackSide); $slot->X = intval($xmlslot->X); $slot->Y = intval($xmlslot->Y); $slot->W = intval($xmlslot->W); $slot->H = intval($xmlslot->H); if ($slot->Position <= $this->ChassisSlots && !$slot->BackSide || $slot->Position <= $this->RearChassisSlots && $slot->BackSide) { if (!$slot->CreateSlot()) { $result["status"] = __("Import Warning"); $result["log"][$ierror++] = sprintf(__("An error has occurred creating the slot %s"), $slot->Position . "-" . $slot->BackSide ? __("Rear") : __("Front")); } } else { $result["status"] = __("Import Warning"); $result["log"][$ierror++] = sprintf(__("Ignored slot %s"), $slot->Position . "-" . $slot->BackSide ? __("Rear") : __("Front")); } } //ports foreach ($xmltemplate->PortReg as $xmlport) { //media type $mt = new MediaTypes(); $mt->MediaType = transform($xmlport->PortMedia); if (!$mt->GetTypeByName()) { //New media type $mt->CreateType(); } //color $cc = new ColorCoding(); $cc->Name = transform($xmlport->PortColor); if (!$cc->GetCodeByName()) { //New color $cc->CreateCode(); } $tport = new TemplatePorts(); $tport->TemplateID = $this->TemplateID; $tport->PortNumber = intval($xmlport->PortNumber); $tport->Label = $xmlport->Label; $tport->MediaID = $mt->MediaID; $tport->ColorID = $cc->ColorID; $tport->PortNotes = $xmlport->PortNotes; if ($tport->PortNumber <= $this->NumPorts) { if (!$tport->CreatePort()) { $result["status"] = __("Import Warning"); $result["log"][$ierror++] = sprintf(__("An error has occurred creating the port %s"), $tport->PortNumber); } } else { $result["status"] = __("Import Warning"); $result["log"][$ierror++] = sprintf(__("Ignored port %s"), $tport->PortNumber); } } //files if ($this->FrontPictureFile != "") { $im = base64_decode($xmltemplate->FrontPicture); file_put_contents("pictures/" . $this->FrontPictureFile, $im); } if ($this->RearPictureFile != "" && $this->RearPictureFile != $this->FrontPictureFile) { $im = base64_decode($xmltemplate->RearPicture); file_put_contents("pictures/" . $this->RearPictureFile, $im); } return $result; }
function UpdateSlotsPorts($template, $status) { //Update slots $template->DeleteSlots(); for ($i = 1; $i <= $template->ChassisSlots; $i++) { $slot = new Slot(); $slot->TemplateID = $template->TemplateID; $slot->Position = $i; $slot->BackSide = False; $slot->X = isset($_POST["XF" . $i]) ? $_POST["XF" . $i] : 0; $slot->Y = isset($_POST["YF" . $i]) ? $_POST["YF" . $i] : 0; $slot->W = isset($_POST["WF" . $i]) ? $_POST["WF" . $i] : 0; $slot->H = isset($_POST["HF" . $i]) ? $_POST["HF" . $i] : 0; $status = $slot->CreateSlot() ? $status : __("Error updating front slots"); } for ($i = 1; $i <= $template->RearChassisSlots; $i++) { $slot = new Slot(); $slot->TemplateID = $template->TemplateID; $slot->Position = $i; $slot->BackSide = True; $slot->X = isset($_POST["XR" . $i]) ? $_POST["XR" . $i] : 0; $slot->Y = isset($_POST["YR" . $i]) ? $_POST["YR" . $i] : 0; $slot->W = isset($_POST["WR" . $i]) ? $_POST["WR" . $i] : 0; $slot->H = isset($_POST["HR" . $i]) ? $_POST["HR" . $i] : 0; $status = $slot->CreateSlot() ? $status : __("Error updating rear slots"); } //update template ports $template->DeletePorts(); for ($i = 1; $i <= $template->NumPorts; $i++) { $tport = new TemplatePorts(); $tport->TemplateID = $template->TemplateID; $tport->PortNumber = $i; $tport->Label = isset($_POST["label" . $i]) ? $_POST["label" . $i] : ""; $tport->MediaID = isset($_POST["mt" . $i]) && $_POST["mt" . $i] > 0 ? $_POST["mt" . $i] : 0; $tport->ColorID = isset($_POST["cc" . $i]) && $_POST["cc" . $i] > 0 ? $_POST["cc" . $i] : 0; $tport->PortNotes = isset($_POST["portnotes" . $i]) ? $_POST["portnotes" . $i] : ""; $status = $tport->CreatePort() ? $status : __("Error updating template ports"); } $template->DeletePowerPorts(); //update template power connections for ($i = 1; $i <= $template->PSCount; $i++) { $tport = new TemplatePowerPorts(); $tport->TemplateID = $template->TemplateID; $tport->PortNumber = $i; $tport->Label = isset($_POST["powerlabel" . $i]) ? $_POST["powerlabel" . $i] : ""; $tport->PortNotes = isset($_POST["powerportnotes" . $i]) ? $_POST["powerportnotes" . $i] : ""; $status = $tport->CreatePort() ? $status : __("Error updating template power connections"); } return $status; }
} $ct->TemplateID = $t->TemplateID; if (!$updating) { $ct->CreateTemplate($t->TemplateID); } else { $ct->UpdateTemplate(); } } if ($t->DeviceType == "Chassis" && is_array(@$tem->slots)) { foreach ($tem->slots as $sl) { foreach ($sl as $prop => $val) { $cs->{$prop} = $val; } $cs->TemplateID = $t->TemplateID; if (!$updating) { $cs->CreateSlot(); } else { $cs->UpdateSlot(); } } } if ($t->DeviceType == "Sensor" && is_object(@$t->sensortemplate)) { $sen->ManufacturerID = $t->ManufacturerID; $sen->Model = $t->Model; foreach ($t->sensortemplate as $prop => $val) { $sen->{$prop} = $val; } $sen->TemplateID = $t->TemplateID; if (!$updating) { $sen->CreateTemplate($t->TemplateID); } else {