<?php
/**
* Module mapping
* @package Broker
*/
if (! $authentication->accessBasedOnLogin ()) {
$authentication->logout ();
header ( "Location: " . $configuration->url ( "login", "settings" ) );
exit ();
} else {
if (isset ( $_GET ["suboperation"] ) && is_string ( $_GET ["suboperation"] ) && trim ( $_GET ["suboperation"] ) != "") {
if (strtolower ( trim ( $_GET ["suboperation"] ) ) == "api") {
if (strtoupper ( $_SERVER ['REQUEST_METHOD'] ) == "POST") {
$response = array ();
header ( "Content-Type: application/json" );
if ($mappingRequest = json_decode ( file_get_contents ( "php://input" ) )) {
$response ["status"] = "ok";
if (! isset ( $mappingRequest->action ) || ! is_string ( $mappingRequest->action )) {
$response ["status"] = "error";
$response ["error"] = "no (valid) action in request";
} else {
if ($mappingRequest->action == "info") {
$response ["configurations"] = array ();
foreach ( $configuration->config ["solr"] as $configItem => $value ) {
if (isset ( $configuration->solr [$configItem] ) && isset ( $configuration->solr [$configItem] ["mtas"] ) && count ( $configuration->solr [$configItem] ["mtas"] ) > 0) {
$coreUrl = $configuration->config ["solr"] [$configItem] ["url"];
$ch = curl_init ( $coreUrl . "mtas?wt=json&action=files" );
$options = array (
CURLOPT_RETURNTRANSFER => true
);
curl_setopt_array ( $ch, $options );
$result = curl_exec ( $ch );
if (($data = json_decode ( $result )) && isset ( $data->files )) {
$response ["configurations"] [$configItem] = array (
"files" => $data->files
);
} else {
$response ["status"] = "error";
$response ["error"] = "problem with configuration " . $configItem;
}
}
}
} else if ($mappingRequest->action == "file") {
if (! isset ( $mappingRequest->file ) || ! is_string ( $mappingRequest->file )) {
$response ["status"] = "error";
$response ["error"] = "no (valid) file in request";
} else if (! isset ( $mappingRequest->configuration ) || ! is_string ( $mappingRequest->configuration )) {
$response ["status"] = "error";
$response ["error"] = "no (valid) configuration in request";
} else {
$configItem = $mappingRequest->configuration;
if (isset ( $configuration->config ["solr"] [$configItem] ) && isset ( $configuration->solr [$configItem] ["mtas"] ) && count ( $configuration->solr [$configItem] ["mtas"] ) > 0) {
$coreUrl = $configuration->config ["solr"] [$configItem] ["url"];
$ch = curl_init ( $coreUrl . "mtas?wt=json&action=file&file=" . urlencode ( $mappingRequest->file ) );
$options = array (
CURLOPT_RETURNTRANSFER => true
);
curl_setopt_array ( $ch, $options );
$result = curl_exec ( $ch );
if (($data = json_decode ( $result )) && isset ( $data->file )) {
$response ["data"] = $data->file;
} else {
$response ["status"] = "error";
$response ["error"] = "problem with configuration " . $configItem;
}
}
}
} else if ($mappingRequest->action == "mapping") {
if (($configItem = $mappingRequest->configuration) && is_string ( $configItem )) {
if (isset ( $configuration->config ["solr"] [$configItem] ) && isset ( $configuration->solr [$configItem] ["mtas"] ) && count ( $configuration->solr [$configItem] ["mtas"] ) > 0) {
$coreUrl = $configuration->config ["solr"] [$configItem] ["url"];
if (($mapping = $mappingRequest->mapping) && is_string ( $mapping )) {
if (($url = $mappingRequest->url) && is_string ( $url )) {
$data = array (
"configuration" => $mapping,
"url" => $url
);
} else if (($document = $mappingRequest->document) && is_string ( $document )) {
$data = array (
"configuration" => $mapping,
"document" => $document
);
} else {
$response ["status"] = "error";
$response ["error"] = "no url or document";
}
if($response["status"]=="ok") {
$ch = curl_init ( $coreUrl . "mtas?wt=json&action=mapping" );
$options = array (
CURLOPT_HTTPHEADER => array (
"Content-Type: application/json; charset=utf-8"
),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode ( $data )
);
curl_setopt_array ( $ch, $options );
$dataString = curl_exec ( $ch );
if (is_object ( $dataString ) || trim ( $dataString ) == "") {
$response ["status"] = "error";
$response ["error"] = "no (valid) response";
} else if ($data = json_decode ( $dataString )) {
$mappingResult = array();
if(isset($data->mapping)) {
$mappingResult["mapping"] = $data->mapping;
}
$response ["data"] = $mappingResult;
} else {
$response ["status"] = "error";
$response ["error"] = "couldn't decode response";
}
}
} else {
$response ["status"] = "error";
$response ["error"] = "no (valid) mapping provided";
}
} else {
$response ["status"] = "error";
$response ["error"] = "problem with configuration " . $configItem;
}
} else {
$response ["status"] = "error";
$response ["error"] = "no (valid) configuration provided";
}
} else {
$response ["status"] = "error";
$response ["error"] = "unrecognized action " . $mappingRequest->action;
}
}
} else {
$response ["status"] = "error";
$response ["error"] = "no valid json";
}
echo json_encode ( $response );
} else {
// only allow post
header ( "Location: " . $configuration->url ( "mapping" ) );
}
exit ();
} else {
// default
}
}
}
?>