List, Show and Listshow functions

parent a6914a10
......@@ -16,13 +16,13 @@ use Gr\Gov\Minedu\Osteam\App;
$settings = require(__DIR__ . '/settings.php');
$app = new App($settings);
$app->setDebug(true);
/**
* Λήψη παραμέτρων καθορισμού λειτουργίας από τη γραμμή εντολών
* v = verbose output
* i = incoming file type
* o = outgoing file type
*/
$options = getopt('', ['send:', 'list', 'listshow', 'show:', 'get:', 'save:']);
$options = getopt('vio', ['send:', 'list', 'listshow', 'show:', 'get:', 'save:']);
$send = isset($options['send']);
$list = isset($options['list']) || isset($options['listshow']);
......@@ -30,14 +30,25 @@ $listdetails = isset($options['listshow']);
$show = isset($options['show']);
$get = isset($options['get']) || isset($options['save']);
$save = isset($options['save']);
$incoming_only = isset($options['i']);
$outgoing_only = isset($options['o']);
/**
* Αρχικοποίηση εφαρμογής
*/
$app = new App($settings);
$app->setDebug(isset($options['v']));
/**
* Έλεγχος παραμέτρων
*/
if (!$send && !$list && !$show && !$get) {
echo "Χρήση: {$argv[0]} [--list] [--listshow] [--send <file>] [--show <hashid>] [--get <hashid>] [--save <hashid>]", PHP_EOL,
" list: λίστα hashids των εγγράφων", PHP_EOL,
" listshow: λίστα αρχείων", PHP_EOL,
echo "Χρήση: {$argv[0]} [-v] [--list] [--listshow] [-i|-o] [--send <file>] [--show <hashid>] [--get <hashid>] [--save <hashid>]", PHP_EOL,
" v: παραγωγή μηνυμάτων παρακολούθησης εκτέλεσης", PHP_EOL,
" list: λίστα hashids των εγγράφων (των τελευταίων 5 ημερών)", PHP_EOL,
" listshow: λίστα αρχείων (των τελευταίων 5 ημερών)", PHP_EOL,
" i: να συμπεριληφθούν μόνο τα εισερχόμενα στη λίστα αρχείων", PHP_EOL,
" ο: να συμπεριληφθούν μόνο τα εξερχόμενα στη λίστα αρχείων", PHP_EOL,
" send <file>: καταχώρηση πρωτοκόλλου με αποστολή του αρχείου file", PHP_EOL,
" show <hash>: αναλυτικές πληροφορίες αρχείου με δεδομένο hashid", PHP_EOL,
" get <hash>: λήψη αρχείου με δεδομένο hashid", PHP_EOL,
......@@ -71,5 +82,53 @@ try {
exit(-1);
}
/**
* Λειτουργία λήψης λίστας των καταχωρημένων πρωτοκόλλων.
* Εάν έχει ζητηθεί επιστρέφονται και οι αναλυτικές πληροφορίες των εγγράφων.
*/
if ($list) {
echo "Ανάκτηση λίστας εγγράφων...", PHP_EOL;
try {
$now = date(DATE_W3C);
$fivedaysbefore = date(DATE_W3C, mktime(0, 0, 0, date("m"), date("d") - 5, date("Y")));
$doc_type = ($incoming_only ? App::DOCUMENT_INCOMING : null);
$doc_type = ($incoming_only ? App::DOCUMENT_OUTGOING : $doc_type);
$doc_hash_ids = $app->searchDocuments(null, $fivedaysbefore, $now, $doc_type, $apikey);
if ($listdetails) {
$doc_details = array_map(function ($hashid) use ($app, $apikey) {
try {
$details = $app->getDocData($hashid, $apikey);
} catch (Exception $ex) {
return [
'id' => $hashid,
'error' => $ex->getCode()
];
}
return $details;
}, $doc_hash_ids);
echo "Λεπτομέρειες εγγράφων: ", PHP_EOL, print_r($doc_details, true), PHP_EOL;
} else {
echo "Λίστα εγγράφων: ", PHP_EOL, implode(PHP_EOL, $doc_hash_ids), PHP_EOL;
}
} catch (\Exception $e) {
echo 'ΛΑΘΟΣ: Αδυναμία ανάκτησης λίστας εγγράφων. ', PHP_EOL, $e->getMessage(), PHP_EOL;
exit(1);
}
}
/**
* Λειτουργία ανάκτησης πληροφοριών αρχείου με δεδομένο hash id $options['show']
*/
if ($show) {
try {
$doc_details = $app->getDocData($options['show'], $apikey);
echo "Λεπτομέρειες εγγράφου: ", PHP_EOL, print_r($doc_details, true), PHP_EOL;
} catch (\Exception $e) {
echo 'ΛΑΘΟΣ: Αδυναμία ανάκτησης λεπτομερειών εγγράφων. ', PHP_EOL, $e->getMessage(), PHP_EOL;
exit(1);
}
}
echo "Done.", PHP_EOL;
exit(0);
......@@ -12,6 +12,11 @@ use Gr\Gov\Minedu\Osteam\Client;
class App
{
// Εισερχόμενο
const DOCUMENT_INCOMING = 1;
// Εξερχόμενο
const DOCUMENT_OUTGOING = 2;
private $client = null;
private $_settings = [];
private $_debug = false;
......@@ -34,31 +39,72 @@ class App
}
/**
* Λήψη κλειδιού πιστοποίησης.
*
* @return string The api key
* @throws \Swagger\Client\ApiException
* @throws \Exception
*/
public function getApiKey()
{
// debug?
$payload = json_encode([
'username' => $this->setting('username'),
'password' => $this->setting('password')
]);
if ($this->_debug) {
echo "getApiKey :: payload: {$payload}", PHP_EOL;
}
$response = json_decode($this->client->pauth($payload));
return $response->apiKey;
}
public function searchDocuments($apikey = null)
/**
* Αναζήτηση εγγράφων.
*
* @param int $sender_id Κωδικός αποστολέα, π.χ. 10000001
* Η προκαθορισμένη τιμή του senderId προέρχεται από τα settings
* @param date $date_from Ημερομηνία αναζήτησης - Από
* @param date $date_to Ημερομηνία αναζήτησης - Έως
* @param int $doc_type Δείτε App::DOCUMENT_INCOMING, App::DOCUMENT_OUTGOING
* @param type $apikey Κλειδί αυθεντικόποίησης
* @return string[] Πίνακας με hashids
* @throws \Exception
*/
public function searchDocuments($sender_id = null, $date_from = null, $date_to = null, $doc_type = null, $apikey = null)
{
$payload = json_encode([
'senderId' => $sender_id === null ? $this->setting('sender_id') : null,
'docType' => $doc_type,
'startDate' => $date_from,
'endDate' => $date_to
]
);
if ($this->_debug) {
echo "searchDocuments :: payload: {$payload}", PHP_EOL;
}
$response = json_decode($this->client->searchDocuments($payload, $apikey === null ? $this->getApiKey() : $apikey));
return $response;
}
/**
* Ανάκτηση πληροφοριών εγγράφου.
*
* @param type $hashid Το μοναδικό hashid του εγγράφου
* @param type $apikey Κλειδί αυθεντικόποίησης
* @return string[]
* @throws \Exception
*/
public function getDocData($hashid, $apikey = null)
{
if ($this->_debug) {
echo "getDocData:: hash id: {$hashid}", PHP_EOL;
}
$response = json_decode($this->client->getDocData($hashid, $apikey === null ? $this->getApiKey() : $apikey), true);
return $response;
}
public function submit($submission_data, $apikey = null)
......@@ -97,6 +143,7 @@ class App
public function setDebug($debug = true)
{
$this->_debug = ($debug === true);
$this->client->setDebug($debug);
return;
}
}
......@@ -34,6 +34,28 @@ class Client
return $result;
}
public function searchDocuments($payload, $apikey)
{
$result = $this->post("{$this->_settings['base_uri']}/search/documents", $payload, [
"api_key: {$apikey}",
"Content-Type: application/json",
"Accept: application/json",
]
);
return $result;
}
public function getDocData($hashid, $apikey)
{
$result = $this->get("{$this->_settings['base_uri']}/document/data/{$hashid}", [], [
"api_key: {$apikey}",
"Content-Type: text/plain",
"Accept: application/json",
]
);
return $result;
}
protected function setCommonCurlOptions($ch, $uri, $headers)
{
curl_setopt($ch, CURLOPT_URL, $uri);
......@@ -76,17 +98,47 @@ class Client
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $uri);
$this->setCommonCurlOptions($ch, $uri, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
echo "Error posting to {$uri}. Curl error: " . curl_error($ch) . " Curl info: ", var_export(curl_getinfo($ch), true);
if (curl_errno($ch)) {
throw new Exception("Error posting to {$uri}. Curl error: " . curl_error($ch) . " Curl info: ", var_export(curl_getinfo($ch), true));
throw new Exception("Λάθος κατά την κλήση του {$uri}. Curl error: " . curl_error($ch) . " Curl info: ", var_export(curl_getinfo($ch), true));
}
if (intval(($http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE)) / 100) != 2) {
// πραγματοποιήθηκε κλήση αλλά δεν ήταν "επιτυχής"
throw new Exception("Αποτυχημένη κλήση. HTTP STATUS {$http_code}. Η απάντηση ήταν: {$result}", $http_code);
}
curl_close($ch);
return $result;
}
public function get($uri, $params = [], $headers = [])
{
$ch = curl_init();
if (is_array($params) && count($params) > 0) {
$qs = '?' . http_build_query($params);
} else {
$qs = '';
}
$this->setCommonCurlOptions($ch, "{$uri}{$qs}", $headers);
// curl_setopt($ch, CURLOPT_HTTPGET, true); // default
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
if (curl_errno($ch)) {
throw new Exception("Λάθος κατά την κλήση του {$uri}. Curl error: " . curl_error($ch) . " Curl info: ", var_export(curl_getinfo($ch), true));
}
if (intval(($http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE)) / 100) != 2) {
// πραγματοποιήθηκε κλήση αλλά δεν ήταν "επιτυχής"
throw new Exception("Αποτυχημένη κλήση. HTTP STATUS {$http_code}. Η απάντηση ήταν: {$result}", $http_code);
}
curl_close($ch);
return $result;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment