Commit 3b2d3832 authored by Σταύρος Παπαδάκης's avatar Σταύρος Παπαδάκης

Merge branch 'develop' into 'master'

Draft version of swagger client PHP app

See merge request !1
parents 1eaedf21 8dfbac78
swagger-generated-php-client.zip
swagger.json
swagger.yaml
......
<?php
return [
'username' => 'test',
'password' => '123456'
];
Βιβλιοθήκη και πρόγραμμα κατανάλωσης
====================================
# Οδηγίες
Αντιγράψτε το αρχείο `settings.php.dist` σε ένα νέο αρχείο `settings.php` και
τροποποιήστε αναλόγως, για παράδειγμα εισάγοντας το όνομα χρήστη που σας έχει
αποδοθεί.
# Πρόγραμμα επίδειξης
Για την επίδειξη των διαθέσιμων λειτουργιών έχει αναπτυχθεί πρόγραμμα
[index.php](index.php) που μπορείτε να εκτελέσετε από τη γραμμή εντολών.
Το πρόγραμμα δέχεται τις παρακάτω παραμέτρους:
```
Χρήση: index.php [--list] [--listshow] [--send <file>] [--show <hashid>] [--get <hashid>] [--save <hashid>]
list: λίστα hashids των εγγράφων
listshow: λίστα αρχείων
send <file>: καταχώρηση πρωτοκόλλου με αποστολή του αρχείου file
show <hash>: αναλυτικές πληροφορίες αρχείου με δεδομένο hashid
get <hash>: λήψη αρχείου με δεδομένο hashid
save <hash>: λήψη και αποθήκευση αρχείου με δεδομένο hashid
στον τρέχοντα φάκελο και με το όνομα αρχείου που επιστρέφεται
```
Το πρόγραμμα χρησιμοποιεί τη δοκιμαστική βιβλιοθήκη επίδειξης
[Gr\Gov\Minedu\Osteam\App](src/App.php).
# Βιβλιοθήκη
Η κλάση [Gr\Gov\Minedu\Osteam\App](src/App.php) αποτελεί τη δοκιμαστική
βιβλιοθήκη επίδειξςη η οποία καταναλώνει λειτουργίες που έχουν παραχθεί από το
[swagger-codegen](https://github.com/swagger-api/swagger-codegen), βασισμένες
στο σχετικό [swagger documentation](https://protocoltest.minedu.gov.gr/openpapyros/).
>>>
Η δοκιμαστική βιβλιοθήκη επίδειξης περιλαμβάνει παραδείγματα αξιοποίησης όλων
των REST API κλήσεων του [minedu OpenApi της ΠΑΠΥΡΟΣ](https://git.minedu.gov.gr/itminedu/minedu-OpenApi-PapyrosDrivers)
σε καμία περίπτωση όμως δεν αποτελεί πλήρως λειτουργική βιβλιοθήκη ή πλήρως
λειτουργική εφαρμογή.
>>>
## Παραδείγματα κλήσης
### Λίστα εγγράφων
```sh
$ php index.php --list
Ανάκτηση API key...
Το API key είναι: ---------------------
Ανάκτηση λίστας εγγράφων...
Λίστα εγγράφων:
Bl5BEZPKGztl2lcmtEWMgQ%3D%3D
r%2BhOqWinF8U%2FPKM6RDn45g%3D%3D
ai2nYtQPsm5iWacd1NEEYw%3D%3D
69t%2FYlgsEJjQMiWkPUFpFQ%3D%3D
XJL2Whs6%2FBsu6ObQ%2FpeMlw%3D%3D
QiQ8VaRYeItETkqP%2FKjTVQ%3D%3D
ELTKEUX%2B0FLyivlIm%2Bm0uw%3D%3D
OrDAz8L9tF0AGSGutQ0Hxw%3D%3D
lmyplemnNoaMR0W6TU0uqg%3D%3D
%2F%2FvoXi7pZMVHdFvVlTTLGQ%3D%3D
GHotM8CWL%2FvGPjabwzHhqg%3D%3D
NU6CEaLymbOjqzla1iSuyQ%3D%3D
22UMz%2B55qhqJhy2AL0Ihtg%3D%3D
vhX1LPAxgI8VTHpXrXzNIQ%3D%3D
Done.
```
### Πρωτοκόλληση εγγράφου
```sh
$ php index.php --send /tmp/test-file.pdf
Έλεγχος για το αρχείο /tmp/test-file.pdf... OK
Ανάκτηση API key...
Το API key είναι: ---------------------
Αποστολή εγγράφου...
Η αποστολή ολοκληρώθηκε με ΑΡ.Π.: 180034
Αναλυτικά: Array
(
[doc_id] => abcdefghijk%2Bhauqejdhqq%3D%3D
[protocol_year] => 2016
[protocol_date] => 22/12/2016
[protocol_number] => 180034
[attachments] => Array
(
)
)
Done.
```
### Λεπτομέρειες πρωτοκόλλου
```sh
$ php index.php --show "abcdefghijk%2Bhauqejdhqq%3D%3D"
Ανάκτηση API key...
Το API key είναι: ---------------------
Λεπτομέρειες εγγράφου:
Array
(
[id] => abcdefghijk%2Bhauqejdhqq%3D%3D
[protocol_number] => 180034
[protocol_date] => 22/12/2016
[doc_type] => 7
[sender] => 100000001
[sender_protocol] =>
[sender_date_protocol] =>
[doc_category] => 20
[theme] => ΔΟΚΙΜΗ: Αυτοματοποιημένο κείμενο της 2016-12-22T10:51:52+02:00
[ada] =>
[attached_docs_descr] => ΔΟΚΙΜΗ: Αυτοματοποιημένο κείμενο περιγραφής 20161222101251
[director] => ΔΟΚΙΜΗ: Αυτοματοποιημένο κείμενο περιγραφής 20161222101251
[attached_id] => Array
(
)
)
Done.
```
### Πληροφορίες αρχείου
```sh
$ php index.php --get "abcdefghijk%2Bhauqejdhqq%3D%3D"
Ανάκτηση API key...
Το API key είναι: ---------------------
Λεπτομέρειες εγγράφου:
Swagger\Client\Model\DocumentDto Object
(
[container:protected] => Array
(
[document] => Swagger\Client\Model\Document Object
(
[container:protected] => Array
(
[base64] => go=
)
)
[file_name] => test-file.pdf
[description] => ΕΙΣ - 180034 - 2016
)
)
Done.
```
### Λήψη αρχείου
```sh
$ php index.php --save "abcdefghijk%2Bhauqejdhqq%3D%3D"
Ανάκτηση API key...
Το API key είναι: ---------------------
Λεπτομέρειες αποθήκευσης εγγράφου:
Array
(
[file_name] => test-file.pdf
[description] => ΕΙΣ - 180034 - 2016
[save] => Αποθηκεύτηκε
)
Done.
```
και το αρχείο έχει αποθηκευτεί στο `test-file.pdf`
<?php
$autoloader = require(__DIR__ . '/swagger-generated-php-client/SwaggerClient-php/vendor/autoload.php');
$autoloader->addPsr4('Gr\\Gov\\Minedu\\Osteam\\', __DIR__ . '/src/');
$autoloader->addPsr4('Swagger\\Client\\', __DIR__ . '/swagger-generated-php-client/SwaggerClient-php/lib/');
use Gr\Gov\Minedu\Osteam\App;
use Swagger\Client\Model\DocumentDto;
use Swagger\Client\Model\Document;
$settings = require(__DIR__ . '/settings.php');
$app = new App($settings);
$app->setDebug(true);
/**
* Λήψη παραμέτρων καθορισμού λειτουργίας από τη γραμμή εντολών
*/
$options = getopt('', ['send:', 'list', 'listshow', 'show:', 'get:', 'save:']); // s for send file, l for list protocols
$send = isset($options['send']);
$list = isset($options['list']) || isset($options['listshow']);
$listdetails = isset($options['listshow']);
$show = isset($options['show']);
$get = isset($options['get']) || isset($options['save']);
$save = isset($options['save']);
/**
* Έλεγχος παραμέτρων
*/
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,
" send <file>: καταχώρηση πρωτοκόλλου με αποστολή του αρχείου file", PHP_EOL,
" show <hash>: αναλυτικές πληροφορίες αρχείου με δεδομένο hashid", PHP_EOL,
" get <hash>: λήψη αρχείου με δεδομένο hashid", PHP_EOL,
" save <hash>: λήψη και αποθήκευση αρχείου με δεδομένο hashid", PHP_EOL,
" στον τρέχοντα φάκελο και με το όνομα αρχείου που επιστρέφεται", PHP_EOL,
exit(0);
}
if ($send) {
echo "Έλεγχος για το αρχείο {$options['send']}... ";
if (is_readable($options['send'])) {
$file = base64_encode(file_get_contents($options['send']));
if ($file === false) {
echo PHP_EOL, "ΛΑΘΟΣ: Αδυναμία κωδικοποίησης του αρχείου.", PHP_EOL;
}
echo "OK", PHP_EOL;
} else {
echo PHP_EOL, "ΛΑΘΟΣ: Το αρχείο δεν είναι αναγνώσιμο.", PHP_EOL;
exit(-1);
}
}
/**
* If any work is to be done, an api key is required
*/
echo "Ανάκτηση API key...", PHP_EOL;
try {
$apikey = $app->getApiKey();
echo "Το API key είναι: ", $apikey, PHP_EOL;
} catch (\Exception $e) {
echo 'ΛΑΘΟΣ: Αδυναμία ανάκτησης API key. ', PHP_EOL, $e->getMessage(), PHP_EOL;
exit(-1);
}
/**
* Αποστολή αρχείου για πρωτοκόλληση
*/
if ($send) {
echo "Αποστολή εγγράφου...", PHP_EOL;
try {
$submission_data = [
'theme' => 'ΔΟΚΙΜΗ: Αυτοματοποιημένο κείμενο της ' . date('c'),
'description' => 'ΔΟΚΙΜΗ: Αυτοματοποιημένο κείμενο περιγραφής ' . date('Ymdhmi'),
'doc_category' => 20,
'main_doc' => new DocumentDto([
'document' => new Document([
"base64" => $file
]
),
'file_name' => $options['send'],
'description' => "ΔΟΚΙΜΗ: Αποστολή δοκιμαστικού αρχείου {$options['send']}"
]
)
// το παράδειγμα δεν περιλαμβάνει συνημμένα αρχεία
// και ορισμένες επιπλέον παραμέτρους
];
$doc_info = $app->submit($submission_data, $apikey);
echo "Η αποστολή ολοκληρώθηκε με ΑΡ.Π.: ", $doc_info->getProtocolNumber(), PHP_EOL;
echo "Αναλυτικά: ", print_r($app->apiResultObjAsArray($doc_info), true), PHP_EOL;
} catch (\Exception $e) {
echo 'ΛΑΘΟΣ: Αδυναμία αποστολής εγγράφου. ', PHP_EOL, $e->getMessage(), PHP_EOL;
exit(1);
}
}
/**
* Λειτουργία λήψης λίστας των καταχωρημένων πρωτοκόλλων.
* Εάν έχει ζητηθεί επιστρέφονται και οι αναλυτικές πληροφορίες των εγγράφων.
*/
if ($list) {
echo "Ανάκτηση λίστας εγγράφων...", PHP_EOL;
try {
$doc_hash_ids = $app->searchDocuments($apikey);
if ($listdetails) {
$doc_details = array_map(function ($hashid) use ($app, $apikey) {
return [
$app->apiResultObjAsArray($app->getDocData($hashid, $apikey))
];
}, $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) {
$doc_details = $app->apiResultObjAsArray($app->getDocData($options['show'], $apikey));
echo "Λεπτομέρειες εγγράφου: ", PHP_EOL, print_r($doc_details, true), PHP_EOL;
}
/**
* Λειτουργία λήψης αρχείου με δεδομένο hash id $options['get']
*/
if ($get) {
if ($save) {
$doc_details = $app->savePdf($options['save'], $apikey);
echo "Λεπτομέρειες αποθήκευσης εγγράφου: ", PHP_EOL, print_r($doc_details, true), PHP_EOL;
} else {
$doc_details = $app->getPdf($options['get'], $apikey);
echo "Λεπτομέρειες εγγράφου: ", PHP_EOL, print_r($doc_details, true), PHP_EOL;
}
}
echo "Done.", PHP_EOL;
exit(0);
<?php
return [
// username and password to authenticate
'username' => 'test',
'password' => '123456',
// sender id for test lookups
'sender_id' => 100000001
];
<?php
//
namespace Gr\Gov\Minedu\Osteam;
use Swagger\Client\ApiClient;
use Swagger\Client\Api\DefaultApi;
use Swagger\Client\Api\IdApi;
use Swagger\Client\Model\Credentials;
use Swagger\Client\ApiException;
use Swagger\Client\Model\SearchModel;
use Swagger\Client\Model\Protocolin;
use Swagger\Client\Model\DocumentDto;
use Swagger\Client\Model\Document;
use Swagger\Client\Model\DocumentDataDto;
use Swagger\Client\Model\ProtocolNumber;
/**
* Description of app
*
* @author spapad
*/
class App
{
private $_settings = [];
private $_defaultApi = null;
private $_idApi = null;
private $_debug = false;
/**
*
* @param array $settings is an array of configuration parameters
*/
function __construct($settings = [])
{
$this->_settings = array_merge($this->_settings, $settings);
}
protected function getDefaultApi()
{
return $this->_defaultApi ? $this->_defaultApi : ($this->_defaultApi = new DefaultApi());
}
protected function getIdApi()
{
return $this->_idApi ? $this->_idApi : ($this->_idApi = new IdApi());
}
/**
*
* @return string The api key
* @throws \Swagger\Client\ApiException
*/
public function getApiKey()
{
$api_instance = $this->getDefaultApi();
$apiClient = $api_instance->getApiClient();
$apiClient->getConfig()->setDebug($this->_debug);
$body = new Credentials($this->_settings);
$result = $api_instance->pauth($body);
return $result->getApiKey();
}
public function searchDocuments($apikey = null)
{
$submission_data = [
// 'doc_type' => 20,
// 'start_date' => "2016-12-21T06:04:35.911Z",
// 'end_date' => "2015-12-01T06:04:35.911Z"
];
$api_instance = $this->getDefaultApi();
$apiClient = $api_instance->getApiClient();
$apiClient->getConfig()->setDebug($this->_debug);
$apiClient->getConfig()->addDefaultHeader('api_key', $apikey === null ? $this->getApiKey() : $apikey);
$body = new SearchModel(array_merge($this->_settings, $submission_data));
$result = $api_instance->searchDocuments($body);
return $result;
}
public function getDocData($hashid, $apikey = null)
{
$api_instance = $this->getDefaultApi();
$apiClient = $api_instance->getApiClient();
$apiClient->getConfig()->setDebug($this->_debug);
$apiClient->getConfig()->addDefaultHeader('api_key', $apikey === null ? $this->getApiKey() : $apikey);
$result = $api_instance->getDocData($hashid);
return $result;
}
public function submit($submission_data, $apikey = null)
{
$api_instance = $this->getIdApi();
$apiClient = $api_instance->getApiClient();
$apiClient->getConfig()->setDebug($this->_debug);
$apiClient->getConfig()->addDefaultHeader('api_key', $apikey === null ? $this->getApiKey() : $apikey);
$body = new Protocolin(array_merge($this->_settings, $submission_data));
$result = $api_instance->postProtocol($body);
return $result;
}
public function getPdf($hashid, $apikey = null)
{
$api_instance = $this->getDefaultApi();
$apiClient = $api_instance->getApiClient();
$apiClient->getConfig()->setDebug($this->_debug);
$apiClient->getConfig()->addDefaultHeader('api_key', $apikey === null ? $this->getApiKey() : $apikey);
$result = $api_instance->getPdf($hashid);
return $result;
}
public function savePdf($hashid, $apikey = null)
{
$result = $this->getPdf($hashid, $apikey = null);
$save = file_put_contents($result->getFileName(), base64_decode($result->getDocument()->getBase64()));
return [
'file_name' => $result->getFileName(),
'description' => $result->getDescription(),
'save' => ($save ? 'Αποθηκεύτηκε' : 'ΔΕΝ αποθηκεύθηκε')
];
}
/**
* Try to return the object fields in a hash array
*
* @param object $resultobj The object
* @return type
*/
public function apiResultObjAsArray($resultobj)
{
$result = [];
if (method_exists($resultobj, 'getters')) {
$getters = $resultobj->getters();
foreach ($getters as $property => $callfunc) {
$result[$property] = $resultobj->$callfunc();
}
}
return $result;
}
public function setDebug($debug = true)
{
$this->_debug = ($debug === true);
return;
}
}
......@@ -442,6 +442,7 @@ class DefaultApi
'string[]',
'/search/documents'
);
var_export($response);
// return [$this->apiClient->getSerializer()->deserialize($response, '\Swagger\Client\Model\ProtocolNumber[]', $httpHeader), $statusCode, $httpHeader];
return [$this->apiClient->getSerializer()->deserialize($response, 'string[]', $httpHeader), $statusCode, $httpHeader];
} catch (ApiException $e) {
......
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