Exemple #1
0
//	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 {