From 5b99fc1e27eb05c7372e1832089f1f56a2050ab8 Mon Sep 17 00:00:00 2001 From: Laurent Giovannoni <laurent.giovannoni@maarch.org> Date: Tue, 14 Mar 2017 11:00:53 +0100 Subject: [PATCH] new insert method for res --- apps/maarch_entreprise/services/Table.php | 9 +- core/Controllers/ResController.php | 281 ++++++++++++++++++++++ 2 files changed, 288 insertions(+), 2 deletions(-) diff --git a/apps/maarch_entreprise/services/Table.php b/apps/maarch_entreprise/services/Table.php index 3c3dc39e943..7044b296a76 100644 --- a/apps/maarch_entreprise/services/Table.php +++ b/apps/maarch_entreprise/services/Table.php @@ -200,9 +200,14 @@ class Apps_Table_Service extends Core_Abstract_Service { $queryExtJokers = []; $queryExtValues = []; foreach ($aData as $key => $value) { + if ($value == 'SYSDATE' || + $value == 'CURRENT_TIMESTAMP') { + $queryExtJokers[] = $value; + } else { + $queryExtJokers[] = '?'; + $queryExtValues[] = $value; + } $queryExtFields[] = $key; - $queryExtJokers[] = '?'; - $queryExtValues[] = $value; } $queryExt = 'INSERT INTO '.$table.'('.implode(',', $queryExtFields).')values('.implode(',', $queryExtJokers).')'; //echo "the query " . $queryExt . PHP_EOL;var_export($queryExtFields). PHP_EOL;var_export($queryExtValues). PHP_EOL; diff --git a/core/Controllers/ResController.php b/core/Controllers/ResController.php index 60c147692e1..3705692c8b5 100644 --- a/core/Controllers/ResController.php +++ b/core/Controllers/ResController.php @@ -18,10 +18,15 @@ namespace Core\Controllers; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; use Respect\Validation\Validator; +use Core\Models\DocserverModel; +use Core\Models\DocserverTypeModel; use Core\Models\UserModel; use Core\Models\ResModel; use Entities\Models\EntitiesModel; use Core\Controllers\DocserverController; +use Core\Controllers\DocserverToolsController; + +require_once 'core/class/class_db_pdo.php'; class ResController { @@ -138,6 +143,20 @@ class ResController $data = $this->prepareStorage($aArgs); unlink($Fnm); + + $aArgs = [ + 'table' => $table, + 'path' => $storeResult['destination_dir'], + 'filename' => $storeResult['file_destination_name'], + 'docserverPath' => $storeResult['path_template'], + 'docserverId' => $storeResult['docserver_id'], + 'docserverPath' => $storeResult['path_template'], + 'data' => $data, + ]; + + $resId = $this->loadIntoDb($aArgs); + var_dump($resId); + exit; require_once 'core/class/class_resource.php'; $resource = new \resource(); @@ -166,6 +185,268 @@ class ResController } } + /** + * Inserts the Resource Object data into the data base + * + * @param $table string Resource table where to insert + * @param $path string Resource path in the docserver + * @param $filename string Resource file name + * @param $docserverPath string Docserver path + * @param $docserverId string Docserver identifier + * @param $data array Data array + */ + public function loadIntoDb($aArgs) + { + $db = new \Database(); + if (empty($aArgs['table'])) { + return ['errors' => 'table ' . _EMPTY]; + } + + if (empty($aArgs['path'])) { + return ['errors' => 'path ' . _EMPTY]; + } + + if (empty($aArgs['filename'])) { + return ['errors' => 'filename ' . _EMPTY]; + } + + if (empty($aArgs['docserverPath'])) { + return ['errors' => 'docserverPath ' . _EMPTY]; + } + + if (empty($aArgs['docserverId'])) { + return ['errors' => 'docserverId ' . _EMPTY]; + } + + if (empty($aArgs['data'])) { + return ['errors' => 'data ' . _EMPTY]; + } + $table = $aArgs['table']; + $path = $aArgs['path']; + $filename = $aArgs['filename']; + $docserverPath = $aArgs['docserverPath']; + $docserverId = $aArgs['docserverId']; + $data = $aArgs['data']; + + $filetmp = $docserverPath; + $tmp = $path; + $tmp = str_replace('#', DIRECTORY_SEPARATOR, $tmp); + $filetmp .= $tmp; + $filetmp .= $filename; + + $docserver = DocserverModel::getById([ + 'id' => $docserverId + ]); + $docserverType = DocserverTypeModel::getById([ + 'id' => $docserver[0]['docserver_type_id'] + ]); + + $fingerprint = DocserverToolsController::doFingerprint( + [ + 'path' => $filetmp, + 'fingerprintMode' => $docserverType[0]['fingerprint_mode'], + ] + ); + + $filesize = filesize($filetmp); + array_push( + $data, + array( + 'column' => "fingerprint", + 'value' => $fingerprint['fingerprint'], + 'type' => "string" + ) + ); + array_push( + $data, + array( + 'column' => "filesize", + 'value' => $filesize, + 'type' => "int" + ) + ); + array_push( + $data, + array( + 'column' => "path", + 'value' => $path, + 'type' => "string" + ) + ); + array_push( + $data, + array( + 'column' => "filename", + 'value' => $filename, + 'type' => "string" + ) + ); + array_push( + $data, + array( + 'column' => 'creation_date', + 'value' => $db->current_datetime(), + 'type' => "function" + ) + ); + $testBasicFields = $this->checkBasicFields($data); + + if (!$testBasicFields['status']) { + return ['error' => $testBasicFields['error']]; + } else { + $prepareData = []; + $countD = count($data); + for ($i = 0; $i < $countD; $i++) { + //COLUMN + $data[$i]['column'] = strtolower($data[$i]['column']); + //VALUE + $prepareData[$data[$i]['column']] = $data[$i]['value']; + } + var_dump($prepareData); + + $resInsert = ResModel::create([ + 'table' => 'res_letterbox', + 'data' => $prepareData + ]); + var_dump($resInsert); + + exit; + + if (!$this->insert($table, $data, $_SESSION['config']['databasetype'])) { + if (!$calledByWs) { + $this->error = _INDEXING_INSERT_ERROR."<br/>".$this->show(); + } + return false; + } else { + $db2 = new Database(); + $stmt = $db2->query( + "select res_id from " . $table + . " where docserver_id = ? and path = ? and filename= ? order by res_id desc ", + array( + $docserverId, + $path, + $filename + ) + ); + $res = $stmt->fetchObject(); + return $res->res_id; + } + } + } + + /** + * Checks the mininum fields required for an insert into the database + * + * @param $data array Array of the fields to insert into the database + * @return error $error + */ + private function checkBasicFields($data) + { + $error = ''; + $db = new \Database(); + $find_format = false; + $find_typist = false; + $find_creation_date = false; + $find_docserver_id = false; + $find_path = false; + $find_filename = false; + $find_offset = false; + $find_logical_adr = false; + $find_fingerprint = false; + $find_filesize = false; + $find_status = false; + for ($i=0; $i < count($data); $i++) { + if ($data[$i]['column'] == 'format') { + $find_format = true; + // must be tested in the file_index.php file (module = indexing_searching) + } elseif ($data[$i]['column'] == 'typist') { + $find_typist = true; + } elseif ($data[$i]['column'] == 'creation_date') { + $find_creation_date = true; + if ($data[$i]['value'] <> $db->current_datetime()) { + $error .= _CREATION_DATE_ERROR; + } + } elseif ($data[$i]['column'] == 'docserver_id') { + $find_docserver_id = true; + } elseif ($data[$i]['column'] == 'path') { + $find_path = true; + if (empty($data[$i]['value'])) { + $error .= _PATH_ERROR; + } + } elseif ($data[$i]['column'] == 'filename') { + $find_filename = true; + if (!preg_match( + "/^[\w-.]+.([a-zA-Z-0-9][a-zA-Z-0-9][a-zA-Z-0-9][a-zA-Z-0-9]?|maarch)$/", + $data[$i]['value'] + ) + ) { + $error .= _FILENAME_ERROR . ' ' . $data[$i]['value'] . '<br/>'; + } + } elseif ($data[$i]['column'] == "offset_doc") { + $find_offset = true; + } elseif ($data[$i]['column'] == 'logical_adr') { + $find_logical_adr = true; + } elseif ($data[$i]['column'] == 'fingerprint') { + $find_fingerprint = true; + if (!preg_match("/^[0-9A-Fa-f]+$/", $data[$i]['value'])) { + $error .= _FINGERPRINT_ERROR; + } + } elseif ($data[$i]['column'] == 'filesize') { + $find_filesize = true; + if ($data[$i]['value'] <= 0) { + $error .= _FILESIZE_ERROR; + } + } elseif ($data[$i]['column'] == 'status') { + $find_status = true; + } + } + + if ($find_format == false) { + $error .= _MISSING_FORMAT; + } + if ($find_typist == false) { + $error .= _MISSING_TYPIST; + } + if ($find_creation_date == false) { + $error .= _MISSING_CREATION_DATE; + } + if ($find_docserver_id == false) { + $error .= _MISSING_DOCSERVER_ID; + } + if ($find_path == false) { + $error .= _MISSING_PATH; + } + if ($find_filename == false) { + $error .= _MISSING_FILENAME; + } + if ($find_offset == false) { + $error .= _MISSING_OFFSET; + } + if ($find_logical_adr == false) { + $error .= _MISSING_LOGICAL_ADR; + } + if ($find_fingerprint == false) { + $error .= _MISSING_FINGERPRINT; + } + if ($find_filesize == false) { + $error .= _MISSING_FILESIZE; + } + if ($find_status == false) { + $error .= _MISSING_STATUS; + } + + if (!empty($error)) { + $status = false; + } else { + $status = true; + } + + return [ + 'status' => $status, + 'error' => $error + ]; + } + /** * Prepares storage on database. * @param $data array -- GitLab