From 5013fb154c42addea423010ba5e4ec2e30d40f81 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 20 Dec 2017 11:22:16 +0100 Subject: [PATCH 01/17] do not htmlspecialchars() keywords, check attributes before setting them --- restapi/index.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/restapi/index.php b/restapi/index.php index da9bb0fff..d64a7ec26 100644 --- a/restapi/index.php +++ b/restapi/index.php @@ -314,10 +314,12 @@ function createFolder($id) { /* {{{ */ $comment = $app->request()->post('comment'); $attributes = $app->request()->post('attributes'); $newattrs = array(); - foreach($attributes as $attrname=>$attrvalue) { - $attrdef = $dms->getAttributeDefinitionByName($attrname); - if($attrdef) { - $newattrs[$attrdef->getID()] = $attrvalue; + if($attributes) { + foreach($attributes as $attrname=>$attrvalue) { + $attrdef = $dms->getAttributeDefinitionByName($attrname); + if($attrdef) { + $newattrs[$attrdef->getID()] = $attrvalue; + } } } if($folder = $parent->addSubFolder($name, $comment, $userobj, 0, $newattrs)) { @@ -469,7 +471,7 @@ function getDocument($id) { /* {{{ */ 'version'=>$lc->getVersion(), 'orig_filename'=>$lc->getOriginalFileName(), 'size'=>$lc->getFileSize(), - 'keywords'=>htmlspecialchars($document->getKeywords()), + 'keywords'=>$document->getKeywords(), ); $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); From be112427d6fcff831a73e513994352c42ffffebb Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 20 Dec 2017 11:24:40 +0100 Subject: [PATCH 02/17] remove white space, expand tabs --- restapi/index.php | 1714 ++++++++++++++++++++++----------------------- 1 file changed, 857 insertions(+), 857 deletions(-) diff --git a/restapi/index.php b/restapi/index.php index d64a7ec26..2e8b901d8 100644 --- a/restapi/index.php +++ b/restapi/index.php @@ -13,46 +13,46 @@ require_once "SeedDMS/Preview.php"; //$dms = new SeedDMS_Core_DMS($db, $settings->_contentDir.$settings->_contentOffsetDir); if(USE_PHP_SESSION) { - session_start(); - $userobj = null; - if(isset($_SESSION['userid'])) - $userobj = $dms->getUser($_SESSION['userid']); - elseif($settings->_enableGuestLogin) - $userobj = $dms->getUser($settings->_guestID); - else - exit; - $dms->setUser($userobj); + session_start(); + $userobj = null; + if(isset($_SESSION['userid'])) + $userobj = $dms->getUser($_SESSION['userid']); + elseif($settings->_enableGuestLogin) + $userobj = $dms->getUser($settings->_guestID); + else + exit; + $dms->setUser($userobj); } else { - require_once("../inc/inc.ClassSession.php"); - $session = new SeedDMS_Session($db); - if (isset($_COOKIE["mydms_session"])) { - $dms_session = $_COOKIE["mydms_session"]; - if(!$resArr = $session->load($dms_session)) { - /* Delete Cookie */ - setcookie("mydms_session", $dms_session, time()-3600, $settings->_httpRoot); - if($settings->_enableGuestLogin) - $userobj = $dms->getUser($settings->_guestID); - else - exit; - } + require_once("../inc/inc.ClassSession.php"); + $session = new SeedDMS_Session($db); + if (isset($_COOKIE["mydms_session"])) { + $dms_session = $_COOKIE["mydms_session"]; + if(!$resArr = $session->load($dms_session)) { + /* Delete Cookie */ + setcookie("mydms_session", $dms_session, time()-3600, $settings->_httpRoot); + if($settings->_enableGuestLogin) + $userobj = $dms->getUser($settings->_guestID); + else + exit; + } - /* Load user data */ - $userobj = $dms->getUser($resArr["userID"]); - if (!is_object($userobj)) { - /* Delete Cookie */ - setcookie("mydms_session", $dms_session, time()-3600, $settings->_httpRoot); - if($settings->_enableGuestLogin) - $userobj = $dms->getUser($settings->_guestID); - else - exit; - } - if($userobj->isAdmin()) { - if($resArr["su"]) { - $userobj = $dms->getUser($resArr["su"]); - } - } - $dms->setUser($userobj); - } + /* Load user data */ + $userobj = $dms->getUser($resArr["userID"]); + if (!is_object($userobj)) { + /* Delete Cookie */ + setcookie("mydms_session", $dms_session, time()-3600, $settings->_httpRoot); + if($settings->_enableGuestLogin) + $userobj = $dms->getUser($settings->_guestID); + else + exit; + } + if($userobj->isAdmin()) { + if($resArr["su"]) { + $userobj = $dms->getUser($resArr["su"]); + } + } + $dms->setUser($userobj); + } } @@ -61,702 +61,702 @@ require "vendor/autoload.php"; #\Slim\Slim::registerAutoloader(); function doLogin() { /* {{{ */ - global $app, $dms, $userobj, $session, $settings; + global $app, $dms, $userobj, $session, $settings; - $username = $app->request()->post('user'); - $password = $app->request()->post('pass'); + $username = $app->request()->post('user'); + $password = $app->request()->post('pass'); - $userobj = $dms->getUserByLogin($username); - if(!$userobj || md5($password) != $userobj->getPwd()) { - if(USE_PHP_SESSION) { - unset($_SESSION['userid']); - } else { - setcookie("mydms_session", $session->getId(), time()-3600, $settings->_httpRoot); - } - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'Login failed', 'data'=>'')); - } else { - if(USE_PHP_SESSION) { - $_SESSION['userid'] = $userobj->getId(); - } else { - if(!$id = $session->create(array('userid'=>$userobj->getId(), 'theme'=>$userobj->getTheme(), 'lang'=>$userobj->getLanguage()))) { - exit; - } + $userobj = $dms->getUserByLogin($username); + if(!$userobj || md5($password) != $userobj->getPwd()) { + if(USE_PHP_SESSION) { + unset($_SESSION['userid']); + } else { + setcookie("mydms_session", $session->getId(), time()-3600, $settings->_httpRoot); + } + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'Login failed', 'data'=>'')); + } else { + if(USE_PHP_SESSION) { + $_SESSION['userid'] = $userobj->getId(); + } else { + if(!$id = $session->create(array('userid'=>$userobj->getId(), 'theme'=>$userobj->getTheme(), 'lang'=>$userobj->getLanguage()))) { + exit; + } - // Set the session cookie. - if($settings->_cookieLifetime) - $lifetime = time() + intval($settings->_cookieLifetime); - else - $lifetime = 0; - setcookie("mydms_session", $id, $lifetime, $settings->_httpRoot); - $dms->setUser($userobj); - } - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$userobj->getId())); - } + // Set the session cookie. + if($settings->_cookieLifetime) + $lifetime = time() + intval($settings->_cookieLifetime); + else + $lifetime = 0; + setcookie("mydms_session", $id, $lifetime, $settings->_httpRoot); + $dms->setUser($userobj); + } + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$userobj->getId())); + } } /* }}} */ function doLogout() { /* {{{ */ - global $app, $dms, $userobj, $session, $settings; + global $app, $dms, $userobj, $session, $settings; - if(USE_PHP_SESSION) { - unset($_SESSION['userid']); - } else { - setcookie("mydms_session", $session->getId(), time()-3600, $settings->_httpRoot); - } - $userobj = null; - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>'')); + if(USE_PHP_SESSION) { + unset($_SESSION['userid']); + } else { + setcookie("mydms_session", $session->getId(), time()-3600, $settings->_httpRoot); + } + $userobj = null; + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>'')); } /* }}} */ function setFullName() { /* {{{ */ - global $app, $dms, $userobj; + global $app, $dms, $userobj; - if(!$userobj) { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); - } - $userobj->setFullName($app->request()->put('fullname')); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$userobj->getFullName())); + if(!$userobj) { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); + } + $userobj->setFullName($app->request()->put('fullname')); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$userobj->getFullName())); } /* }}} */ function setEmail($id) { /* {{{ */ - global $app, $dms, $userobj; + global $app, $dms, $userobj; - if(!$userobj) { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); - } - $userobj->setEmail($app->request()->put('fullname')); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$userid)); + if(!$userobj) { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); + } + $userobj->setEmail($app->request()->put('fullname')); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$userid)); } /* }}} */ function getLockedDocuments() { /* {{{ */ - global $app, $dms, $userobj; + global $app, $dms, $userobj; - if(false !== ($documents = $dms->getDocumentsLockedByUser($userobj))) { - $documents = SeedDMS_Core_DMS::filterAccess($documents, $userobj, M_READ); - foreach($documents as $document) { - $lc = $document->getLatestContent(); - $recs[] = array( - 'type'=>'document', - 'id'=>$document->getId(), - 'date'=>$document->getDate(), - 'name'=>$document->getName(), - 'mimetype'=>$lc->getMimeType(), - 'version'=>$lc->getVersion(), - 'size'=>$lc->getFileSize(), - 'comment'=>$document->getComment(), - 'keywords'=>$document->getKeywords(), - ); - } - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'', 'data'=>'')); - } + if(false !== ($documents = $dms->getDocumentsLockedByUser($userobj))) { + $documents = SeedDMS_Core_DMS::filterAccess($documents, $userobj, M_READ); + foreach($documents as $document) { + $lc = $document->getLatestContent(); + $recs[] = array( + 'type'=>'document', + 'id'=>$document->getId(), + 'date'=>$document->getDate(), + 'name'=>$document->getName(), + 'mimetype'=>$lc->getMimeType(), + 'version'=>$lc->getVersion(), + 'size'=>$lc->getFileSize(), + 'comment'=>$document->getComment(), + 'keywords'=>$document->getKeywords(), + ); + } + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'', 'data'=>'')); + } } /* }}} */ function getFolder($id) { /* {{{ */ - global $app, $dms, $userobj; - $forcebyname = $app->request()->get('forcebyname'); - if(is_numeric($id) && empty($forcebyname)) - $folder = $dms->getFolder($id); - else { - $parentid = $app->request()->get('parentid'); - $folder = $dms->getFolderByName($id, $parentid); - } - if($folder) { - if($folder->getAccessMode($userobj) >= M_READ) { - $app->response()->header('Content-Type', 'application/json'); - $data = array( - 'id'=>$folder->getID(), - 'name'=>$folder->getName() - ); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); - } else { - $app->response()->status(404); - } - } else { - $app->response()->status(404); - } + global $app, $dms, $userobj; + $forcebyname = $app->request()->get('forcebyname'); + if(is_numeric($id) && empty($forcebyname)) + $folder = $dms->getFolder($id); + else { + $parentid = $app->request()->get('parentid'); + $folder = $dms->getFolderByName($id, $parentid); + } + if($folder) { + if($folder->getAccessMode($userobj) >= M_READ) { + $app->response()->header('Content-Type', 'application/json'); + $data = array( + 'id'=>$folder->getID(), + 'name'=>$folder->getName() + ); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); + } else { + $app->response()->status(404); + } + } else { + $app->response()->status(404); + } } /* }}} */ function getFolderParent($id) { /* {{{ */ - global $app, $dms, $userobj; - if($id == 0) { - echo json_encode(array('success'=>true, 'message'=>'id is 0', 'data'=>'')); - return; - } - $root = $dms->getRootFolder(); - if($root->getId() == $id) { - echo json_encode(array('success'=>true, 'message'=>'id is root folder', 'data'=>'')); - return; - } - $folder = $dms->getFolder($id); - $parent = $folder->getParent(); - if($parent) { - $rec = array('type'=>'folder', 'id'=>$parent->getId(), 'name'=>$parent->getName()); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$rec)); - } else { - echo json_encode(array('success'=>false, 'message'=>'', 'data'=>'')); - } + global $app, $dms, $userobj; + if($id == 0) { + echo json_encode(array('success'=>true, 'message'=>'id is 0', 'data'=>'')); + return; + } + $root = $dms->getRootFolder(); + if($root->getId() == $id) { + echo json_encode(array('success'=>true, 'message'=>'id is root folder', 'data'=>'')); + return; + } + $folder = $dms->getFolder($id); + $parent = $folder->getParent(); + if($parent) { + $rec = array('type'=>'folder', 'id'=>$parent->getId(), 'name'=>$parent->getName()); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$rec)); + } else { + echo json_encode(array('success'=>false, 'message'=>'', 'data'=>'')); + } } /* }}} */ function getFolderPath($id) { /* {{{ */ - global $app, $dms, $userobj; - if($id == 0) { - echo json_encode(array('success'=>true, 'message'=>'id is 0', 'data'=>'')); - return; - } - $folder = $dms->getFolder($id); + global $app, $dms, $userobj; + if($id == 0) { + echo json_encode(array('success'=>true, 'message'=>'id is 0', 'data'=>'')); + return; + } + $folder = $dms->getFolder($id); - $path = $folder->getPath(); - $data = array(); - foreach($path as $element) { - $data[] = array('id'=>$element->getId(), 'name'=>htmlspecialchars($element->getName())); - } - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); + $path = $folder->getPath(); + $data = array(); + foreach($path as $element) { + $data[] = array('id'=>$element->getId(), 'name'=>htmlspecialchars($element->getName())); + } + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); } /* }}} */ function getFolderAttributes($id) { /* {{{ */ - global $app, $dms, $userobj; - $folder = $dms->getFolder($id); + global $app, $dms, $userobj; + $folder = $dms->getFolder($id); - if($folder) { - if ($folder->getAccessMode($userobj) >= M_READ) { - $recs = array(); - $attributes = $folder->getAttributes(); - foreach($attributes as $attribute) { - $recs[] = array( - 'id'=>$attribute->getId(), - 'value'=>$attribute->getValue(), - 'name'=>$attribute->getAttributeDefinition()->getName(), - ); - } - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); - } else { - $app->response()->status(404); - } - } + if($folder) { + if ($folder->getAccessMode($userobj) >= M_READ) { + $recs = array(); + $attributes = $folder->getAttributes(); + foreach($attributes as $attribute) { + $recs[] = array( + 'id'=>$attribute->getId(), + 'value'=>$attribute->getValue(), + 'name'=>$attribute->getAttributeDefinition()->getName(), + ); + } + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); + } else { + $app->response()->status(404); + } + } } /* }}} */ function getFolderChildren($id) { /* {{{ */ - global $app, $dms, $userobj; - if($id == 0) { - $folder = $dms->getRootFolder(); - $recs = array(array('type'=>'folder', 'id'=>$folder->getId(), 'name'=>$folder->getName())); - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); - } else { - $folder = $dms->getFolder($id); - if($folder) { - if($folder->getAccessMode($userobj) >= M_READ) { - $recs = array(); - $subfolders = $folder->getSubFolders(); - $subfolders = SeedDMS_Core_DMS::filterAccess($subfolders, $userobj, M_READ); - foreach($subfolders as $subfolder) { - $recs[] = array( - 'type'=>'folder', - 'id'=>$subfolder->getId(), - 'name'=>htmlspecialchars($subfolder->getName()), - 'comment'=>$subfolder->getComment(), - 'date'=>$subfolder->getDate(), - ); - } - $documents = $folder->getDocuments(); - $documents = SeedDMS_Core_DMS::filterAccess($documents, $userobj, M_READ); - foreach($documents as $document) { - $lc = $document->getLatestContent(); - if($lc) { - $recs[] = array( - 'type'=>'document', - 'id'=>$document->getId(), - 'date'=>$document->getDate(), - 'name'=>htmlspecialchars($document->getName()), - 'mimetype'=>$lc->getMimeType(), - 'version'=>$lc->getVersion(), - 'size'=>$lc->getFileSize(), - 'comment'=>$document->getComment(), - 'keywords'=>$document->getKeywords(), - ); - } - } - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); - } - } else { - $app->response()->status(404); - } - } + global $app, $dms, $userobj; + if($id == 0) { + $folder = $dms->getRootFolder(); + $recs = array(array('type'=>'folder', 'id'=>$folder->getId(), 'name'=>$folder->getName())); + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); + } else { + $folder = $dms->getFolder($id); + if($folder) { + if($folder->getAccessMode($userobj) >= M_READ) { + $recs = array(); + $subfolders = $folder->getSubFolders(); + $subfolders = SeedDMS_Core_DMS::filterAccess($subfolders, $userobj, M_READ); + foreach($subfolders as $subfolder) { + $recs[] = array( + 'type'=>'folder', + 'id'=>$subfolder->getId(), + 'name'=>htmlspecialchars($subfolder->getName()), + 'comment'=>$subfolder->getComment(), + 'date'=>$subfolder->getDate(), + ); + } + $documents = $folder->getDocuments(); + $documents = SeedDMS_Core_DMS::filterAccess($documents, $userobj, M_READ); + foreach($documents as $document) { + $lc = $document->getLatestContent(); + if($lc) { + $recs[] = array( + 'type'=>'document', + 'id'=>$document->getId(), + 'date'=>$document->getDate(), + 'name'=>htmlspecialchars($document->getName()), + 'mimetype'=>$lc->getMimeType(), + 'version'=>$lc->getVersion(), + 'size'=>$lc->getFileSize(), + 'comment'=>$document->getComment(), + 'keywords'=>$document->getKeywords(), + ); + } + } + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); + } + } else { + $app->response()->status(404); + } + } } /* }}} */ function createFolder($id) { /* {{{ */ - global $app, $dms, $userobj; + global $app, $dms, $userobj; - if(!$userobj) { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); - } + if(!$userobj) { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); + } - if($id == 0) { - echo json_encode(array('success'=>true, 'message'=>'id is 0', 'data'=>'')); - return; - } - $parent = $dms->getFolder($id); - if($parent) { - if($name = $app->request()->post('name')) { - $comment = $app->request()->post('comment'); - $attributes = $app->request()->post('attributes'); - $newattrs = array(); - if($attributes) { - foreach($attributes as $attrname=>$attrvalue) { - $attrdef = $dms->getAttributeDefinitionByName($attrname); - if($attrdef) { - $newattrs[$attrdef->getID()] = $attrvalue; - } - } - } - if($folder = $parent->addSubFolder($name, $comment, $userobj, 0, $newattrs)) { + if($id == 0) { + echo json_encode(array('success'=>true, 'message'=>'id is 0', 'data'=>'')); + return; + } + $parent = $dms->getFolder($id); + if($parent) { + if($name = $app->request()->post('name')) { + $comment = $app->request()->post('comment'); + $attributes = $app->request()->post('attributes'); + $newattrs = array(); + if($attributes) { + foreach($attributes as $attrname=>$attrvalue) { + $attrdef = $dms->getAttributeDefinitionByName($attrname); + if($attrdef) { + $newattrs[$attrdef->getID()] = $attrvalue; + } + } + } + if($folder = $parent->addSubFolder($name, $comment, $userobj, 0, $newattrs)) { - $rec = array('id'=>$folder->getId(), 'name'=>$folder->getName(), 'comment'=>$folder->getComment()); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$rec)); - } else { - echo json_encode(array('success'=>false, 'message'=>'', 'data'=>'')); - } - } else { - echo json_encode(array('success'=>false, 'message'=>'', 'data'=>'')); - } - } else { - echo json_encode(array('success'=>false, 'message'=>'', 'data'=>'')); - } + $rec = array('id'=>$folder->getId(), 'name'=>$folder->getName(), 'comment'=>$folder->getComment()); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$rec)); + } else { + echo json_encode(array('success'=>false, 'message'=>'', 'data'=>'')); + } + } else { + echo json_encode(array('success'=>false, 'message'=>'', 'data'=>'')); + } + } else { + echo json_encode(array('success'=>false, 'message'=>'', 'data'=>'')); + } } /* }}} */ function moveFolder($id) { /* {{{ */ - global $app, $dms, $userobj; + global $app, $dms, $userobj; - if(!$userobj) { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); - } + if(!$userobj) { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); + } - $mfolder = $dms->getFolder($id); - if($mfolder) { - if ($mfolder->getAccessMode($userobj) >= M_READ) { - $folderid = $app->request()->post('dest'); - if($folder = $dms->getFolder($folderid)) { - if($folder->getAccessMode($userobj) >= M_READWRITE) { - if($mfolder->setParent($folder)) { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>'')); - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'Error moving folder', 'data'=>'')); - } - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'No access on destination folder', 'data'=>'')); - } - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'No destination folder', 'data'=>'')); - } - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); - } - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'No folder', 'data'=>'')); - } + $mfolder = $dms->getFolder($id); + if($mfolder) { + if ($mfolder->getAccessMode($userobj) >= M_READ) { + $folderid = $app->request()->post('dest'); + if($folder = $dms->getFolder($folderid)) { + if($folder->getAccessMode($userobj) >= M_READWRITE) { + if($mfolder->setParent($folder)) { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>'')); + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'Error moving folder', 'data'=>'')); + } + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No access on destination folder', 'data'=>'')); + } + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No destination folder', 'data'=>'')); + } + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); + } + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No folder', 'data'=>'')); + } } /* }}} */ function deleteFolder($id) { /* {{{ */ - global $app, $dms, $userobj; + global $app, $dms, $userobj; - if(!$userobj) { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); - } + if(!$userobj) { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); + } - if($id == 0) { - echo json_encode(array('success'=>true, 'message'=>'id is 0', 'data'=>'')); - return; - } - $mfolder = $dms->getFolder($id); - if($mfolder) { - if ($mfolder->getAccessMode($userobj) >= M_READWRITE) { - if($mfolder->remove()) { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>'')); - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'Error deleting folder', 'data'=>'')); - } - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); - } - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'No folder', 'data'=>'')); - } + if($id == 0) { + echo json_encode(array('success'=>true, 'message'=>'id is 0', 'data'=>'')); + return; + } + $mfolder = $dms->getFolder($id); + if($mfolder) { + if ($mfolder->getAccessMode($userobj) >= M_READWRITE) { + if($mfolder->remove()) { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>'')); + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'Error deleting folder', 'data'=>'')); + } + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); + } + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No folder', 'data'=>'')); + } } /* }}} */ function uploadDocument($id) { /* {{{ */ - global $app, $dms, $userobj; + global $app, $dms, $userobj; - if(!$userobj) { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); - } + if(!$userobj) { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); + } - if($id == 0) { - echo json_encode(array('success'=>true, 'message'=>'id is 0', 'data'=>'')); - return; - } - $mfolder = $dms->getFolder($id); - if($mfolder) { - if ($mfolder->getAccessMode($userobj) >= M_READWRITE) { - $docname = $app->request()->get('name'); - $origfilename = $app->request()->get('origfilename'); - $content = $app->getInstance()->request()->getBody(); - $temp = tempnam('/tmp', 'lajflk'); - $handle = fopen($temp, "w"); - fwrite($handle, $content); - fclose($handle); - $finfo = finfo_open(FILEINFO_MIME_TYPE); - $userfiletype = finfo_file($finfo, $temp); - $fileType = ".".pathinfo($origfilename, PATHINFO_EXTENSION); - finfo_close($finfo); - $res = $mfolder->addDocument($docname, '', 0, $userobj, '', array(), $temp, $origfilename ? $origfilename : basename($temp), $fileType, $userfiletype, 0); - unlink($temp); - if($res) { - $doc = $res[0]; - $rec = array('id'=>$doc->getId(), 'name'=>$doc->getName()); - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>true, 'message'=>'Upload succeded', 'data'=>$rec)); - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'Upload failed', 'data'=>'')); - } - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); - } - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'No folder', 'data'=>'')); - } + if($id == 0) { + echo json_encode(array('success'=>true, 'message'=>'id is 0', 'data'=>'')); + return; + } + $mfolder = $dms->getFolder($id); + if($mfolder) { + if ($mfolder->getAccessMode($userobj) >= M_READWRITE) { + $docname = $app->request()->get('name'); + $origfilename = $app->request()->get('origfilename'); + $content = $app->getInstance()->request()->getBody(); + $temp = tempnam('/tmp', 'lajflk'); + $handle = fopen($temp, "w"); + fwrite($handle, $content); + fclose($handle); + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $userfiletype = finfo_file($finfo, $temp); + $fileType = ".".pathinfo($origfilename, PATHINFO_EXTENSION); + finfo_close($finfo); + $res = $mfolder->addDocument($docname, '', 0, $userobj, '', array(), $temp, $origfilename ? $origfilename : basename($temp), $fileType, $userfiletype, 0); + unlink($temp); + if($res) { + $doc = $res[0]; + $rec = array('id'=>$doc->getId(), 'name'=>$doc->getName()); + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'Upload succeded', 'data'=>$rec)); + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'Upload failed', 'data'=>'')); + } + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); + } + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No folder', 'data'=>'')); + } } /* }}} */ function getDocument($id) { /* {{{ */ - global $app, $dms, $userobj; - $document = $dms->getDocument($id); - if($document) { - if ($document->getAccessMode($userobj) >= M_READ) { - $lc = $document->getLatestContent(); - $app->response()->header('Content-Type', 'application/json'); - $data = array( - 'id'=>$id, - 'name'=>htmlspecialchars($document->getName()), - 'comment'=>htmlspecialchars($document->getComment()), - 'date'=>$document->getDate(), - 'mimetype'=>$lc->getMimeType(), - 'version'=>$lc->getVersion(), - 'orig_filename'=>$lc->getOriginalFileName(), - 'size'=>$lc->getFileSize(), - 'keywords'=>$document->getKeywords(), - ); - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); - } - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'No document', 'data'=>'')); - } + global $app, $dms, $userobj; + $document = $dms->getDocument($id); + if($document) { + if ($document->getAccessMode($userobj) >= M_READ) { + $lc = $document->getLatestContent(); + $app->response()->header('Content-Type', 'application/json'); + $data = array( + 'id'=>$id, + 'name'=>htmlspecialchars($document->getName()), + 'comment'=>htmlspecialchars($document->getComment()), + 'date'=>$document->getDate(), + 'mimetype'=>$lc->getMimeType(), + 'version'=>$lc->getVersion(), + 'orig_filename'=>$lc->getOriginalFileName(), + 'size'=>$lc->getFileSize(), + 'keywords'=>$document->getKeywords(), + ); + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); + } + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No document', 'data'=>'')); + } } /* }}} */ function deleteDocument($id) { /* {{{ */ - global $app, $dms, $userobj; - $document = $dms->getDocument($id); - if($document) { - if ($document->getAccessMode($userobj) >= M_READWRITE) { - if($document->remove()) { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>'')); - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'Error removing document', 'data'=>'')); - } - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); - } - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'No document', 'data'=>'')); - } + global $app, $dms, $userobj; + $document = $dms->getDocument($id); + if($document) { + if ($document->getAccessMode($userobj) >= M_READWRITE) { + if($document->remove()) { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>'')); + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'Error removing document', 'data'=>'')); + } + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); + } + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No document', 'data'=>'')); + } } /* }}} */ function moveDocument($id) { /* {{{ */ - global $app, $dms, $userobj; - $document = $dms->getDocument($id); - if($document) { - if ($document->getAccessMode($userobj) >= M_READ) { - $folderid = $app->request()->post('dest'); - if($folder = $dms->getFolder($folderid)) { - if($folder->getAccessMode($userobj) >= M_READWRITE) { - if($document->setFolder($folder)) { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>'')); - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'Error moving document', 'data'=>'')); - } - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'No access on destination folder', 'data'=>'')); - } - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'No destination folder', 'data'=>'')); - } - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); - } - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'No document', 'data'=>'')); - } + global $app, $dms, $userobj; + $document = $dms->getDocument($id); + if($document) { + if ($document->getAccessMode($userobj) >= M_READ) { + $folderid = $app->request()->post('dest'); + if($folder = $dms->getFolder($folderid)) { + if($folder->getAccessMode($userobj) >= M_READWRITE) { + if($document->setFolder($folder)) { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>'')); + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'Error moving document', 'data'=>'')); + } + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No access on destination folder', 'data'=>'')); + } + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No destination folder', 'data'=>'')); + } + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); + } + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No document', 'data'=>'')); + } } /* }}} */ function getDocumentContent($id) { /* {{{ */ - global $app, $dms, $userobj; - $document = $dms->getDocument($id); + global $app, $dms, $userobj; + $document = $dms->getDocument($id); - if($document) { - if ($document->getAccessMode($userobj) >= M_READ) { - $lc = $document->getLatestContent(); - $app->response()->header('Content-Type', $lc->getMimeType()); - $app->response()->header("Content-Disposition: filename=\"" . $document->getName().$lc->getFileType() . "\""); - $app->response()->header("Content-Length", filesize($dms->contentDir . $lc->getPath())); - $app->response()->header("Expires", "0"); - $app->response()->header("Cache-Control", "no-cache, must-revalidate"); - $app->response()->header("Pragma", "no-cache"); + if($document) { + if ($document->getAccessMode($userobj) >= M_READ) { + $lc = $document->getLatestContent(); + $app->response()->header('Content-Type', $lc->getMimeType()); + $app->response()->header("Content-Disposition: filename=\"" . $document->getName().$lc->getFileType() . "\""); + $app->response()->header("Content-Length", filesize($dms->contentDir . $lc->getPath())); + $app->response()->header("Expires", "0"); + $app->response()->header("Cache-Control", "no-cache, must-revalidate"); + $app->response()->header("Pragma", "no-cache"); - readfile($dms->contentDir . $lc->getPath()); - } else { - $app->response()->status(404); - } - } + readfile($dms->contentDir . $lc->getPath()); + } else { + $app->response()->status(404); + } + } } /* }}} */ function getDocumentVersions($id) { /* {{{ */ - global $app, $dms, $userobj; - $document = $dms->getDocument($id); + global $app, $dms, $userobj; + $document = $dms->getDocument($id); - if($document) { - if ($document->getAccessMode($userobj) >= M_READ) { - $recs = array(); - $lcs = $document->getContent(); - foreach($lcs as $lc) { - $recs[] = array( - 'version'=>$lc->getVersion(), - 'date'=>$lc->getDate(), - 'mimetype'=>$lc->getMimeType(), - 'size'=>$lc->getFileSize(), - 'comment'=>htmlspecialchars($lc->getComment()), - ); - } - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); - } - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'No such document', 'data'=>'')); - } + if($document) { + if ($document->getAccessMode($userobj) >= M_READ) { + $recs = array(); + $lcs = $document->getContent(); + foreach($lcs as $lc) { + $recs[] = array( + 'version'=>$lc->getVersion(), + 'date'=>$lc->getDate(), + 'mimetype'=>$lc->getMimeType(), + 'size'=>$lc->getFileSize(), + 'comment'=>htmlspecialchars($lc->getComment()), + ); + } + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); + } + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No such document', 'data'=>'')); + } } /* }}} */ function getDocumentVersion($id, $version) { /* {{{ */ - global $app, $dms, $userobj; - $document = $dms->getDocument($id); + global $app, $dms, $userobj; + $document = $dms->getDocument($id); - if($document) { - if ($document->getAccessMode($userobj) >= M_READ) { - $lc = $document->getContentByVersion($version); - $app->response()->header('Content-Type', $lc->getMimeType()); - $app->response()->header("Content-Disposition", "filename=\"" . $document->getName().$lc->getFileType() . "\""); - $app->response()->header("Content-Length", filesize($dms->contentDir . $lc->getPath())); - $app->response()->header("Expires", "0"); - $app->response()->header("Cache-Control", "no-cache, must-revalidate"); - $app->response()->header("Pragma", "no-cache"); + if($document) { + if ($document->getAccessMode($userobj) >= M_READ) { + $lc = $document->getContentByVersion($version); + $app->response()->header('Content-Type', $lc->getMimeType()); + $app->response()->header("Content-Disposition", "filename=\"" . $document->getName().$lc->getFileType() . "\""); + $app->response()->header("Content-Length", filesize($dms->contentDir . $lc->getPath())); + $app->response()->header("Expires", "0"); + $app->response()->header("Cache-Control", "no-cache, must-revalidate"); + $app->response()->header("Pragma", "no-cache"); - readfile($dms->contentDir . $lc->getPath()); - } else { - $app->response()->status(404); - } - } + readfile($dms->contentDir . $lc->getPath()); + } else { + $app->response()->status(404); + } + } } /* }}} */ function getDocumentFiles($id) { /* {{{ */ - global $app, $dms, $userobj; - $document = $dms->getDocument($id); + global $app, $dms, $userobj; + $document = $dms->getDocument($id); - if($document) { - if ($document->getAccessMode($userobj) >= M_READ) { - $recs = array(); - $files = $document->getDocumentFiles(); - foreach($files as $file) { - $recs[] = array( - 'id'=>$file->getId(), - 'name'=>$file->getName(), - 'date'=>$file->getDate(), - 'mimetype'=>$file->getMimeType(), - 'comment'=>$file->getComment(), - ); - } - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); - } else { - $app->response()->status(404); - } - } + if($document) { + if ($document->getAccessMode($userobj) >= M_READ) { + $recs = array(); + $files = $document->getDocumentFiles(); + foreach($files as $file) { + $recs[] = array( + 'id'=>$file->getId(), + 'name'=>$file->getName(), + 'date'=>$file->getDate(), + 'mimetype'=>$file->getMimeType(), + 'comment'=>$file->getComment(), + ); + } + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); + } else { + $app->response()->status(404); + } + } } /* }}} */ function getDocumentFile($id, $fileid) { /* {{{ */ - global $app, $dms, $userobj; - $document = $dms->getDocument($id); + global $app, $dms, $userobj; + $document = $dms->getDocument($id); - if($document) { - if ($document->getAccessMode($userobj) >= M_READ) { - $file = $document->getDocumentFile($fileid); - $app->response()->header('Content-Type', $file->getMimeType()); - $app->response()->header("Content-Disposition", "filename=\"" . $document->getName().$file->getFileType() . "\""); - $app->response()->header("Content-Length", filesize($dms->contentDir . $file->getPath())); - $app->response()->header("Expires", "0"); - $app->response()->header("Cache-Control", "no-cache, must-revalidate"); - $app->response()->header("Pragma", "no-cache"); + if($document) { + if ($document->getAccessMode($userobj) >= M_READ) { + $file = $document->getDocumentFile($fileid); + $app->response()->header('Content-Type', $file->getMimeType()); + $app->response()->header("Content-Disposition", "filename=\"" . $document->getName().$file->getFileType() . "\""); + $app->response()->header("Content-Length", filesize($dms->contentDir . $file->getPath())); + $app->response()->header("Expires", "0"); + $app->response()->header("Cache-Control", "no-cache, must-revalidate"); + $app->response()->header("Pragma", "no-cache"); - readfile($dms->contentDir . $file->getPath()); - } else { - $app->response()->status(404); - } - } + readfile($dms->contentDir . $file->getPath()); + } else { + $app->response()->status(404); + } + } } /* }}} */ function getDocumentLinks($id) { /* {{{ */ - global $app, $dms, $userobj; - $document = $dms->getDocument($id); + global $app, $dms, $userobj; + $document = $dms->getDocument($id); - if($document) { - if ($document->getAccessMode($userobj) >= M_READ) { - $recs = array(); - $links = $document->getDocumentLinks(); - foreach($links as $link) { - $recs[] = array( - 'id'=>$link->getId(), - 'target'=>$link->getTarget(), - 'public'=>$link->isPublic(), - ); - } - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); - } else { - $app->response()->status(404); - } - } + if($document) { + if ($document->getAccessMode($userobj) >= M_READ) { + $recs = array(); + $links = $document->getDocumentLinks(); + foreach($links as $link) { + $recs[] = array( + 'id'=>$link->getId(), + 'target'=>$link->getTarget(), + 'public'=>$link->isPublic(), + ); + } + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); + } else { + $app->response()->status(404); + } + } } /* }}} */ function getDocumentAttributes($id) { /* {{{ */ - global $app, $dms, $userobj; - $document = $dms->getDocument($id); + global $app, $dms, $userobj; + $document = $dms->getDocument($id); - if($document) { - if ($document->getAccessMode($userobj) >= M_READ) { - $recs = array(); - $attributes = $document->getAttributes(); - foreach($attributes as $attribute) { - $recs[] = array( - 'id'=>$attribute->getId(), - 'value'=>$attribute->getValue(), - 'name'=>$attribute->getAttributeDefinition()->getName(), - ); - } - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); - } else { - $app->response()->status(404); - } - } + if($document) { + if ($document->getAccessMode($userobj) >= M_READ) { + $recs = array(); + $attributes = $document->getAttributes(); + foreach($attributes as $attribute) { + $recs[] = array( + 'id'=>$attribute->getId(), + 'value'=>$attribute->getValue(), + 'name'=>$attribute->getAttributeDefinition()->getName(), + ); + } + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); + } else { + $app->response()->status(404); + } + } } /* }}} */ function getDocumentPreview($id, $version=0, $width=0) { /* {{{ */ - global $app, $dms, $userobj, $settings; - $document = $dms->getDocument($id); + global $app, $dms, $userobj, $settings; + $document = $dms->getDocument($id); - if($document) { - if ($document->getAccessMode($userobj) >= M_READ) { - if($version) - $object = $document->getContentByVersion($version); - else - $object = $document->getLatestContent(); - if(!$object) - exit; - - if(!empty($width)) - $previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir, $width); - else - $previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir); - if(!$previewer->hasPreview($object)) - $previewer->createPreview($object); - $app->response()->header('Content-Type', 'image/png'); - $app->response()->header("Content-Disposition", "filename=\"preview-" . $document->getID()."-".$object->getVersion()."-".$width.".png" . "\""); - $app->response()->header("Content-Length", $previewer->getFilesize($object)); -// $app->response()->header("Expires", "0"); -// $app->response()->header("Cache-Control", "no-cache, must-revalidate"); -// $app->response()->header("Pragma", "no-cache"); + if($document) { + if ($document->getAccessMode($userobj) >= M_READ) { + if($version) + $object = $document->getContentByVersion($version); + else + $object = $document->getLatestContent(); + if(!$object) + exit; + + if(!empty($width)) + $previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir, $width); + else + $previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir); + if(!$previewer->hasPreview($object)) + $previewer->createPreview($object); + $app->response()->header('Content-Type', 'image/png'); + $app->response()->header("Content-Disposition", "filename=\"preview-" . $document->getID()."-".$object->getVersion()."-".$width.".png" . "\""); + $app->response()->header("Content-Length", $previewer->getFilesize($object)); +// $app->response()->header("Expires", "0"); +// $app->response()->header("Cache-Control", "no-cache, must-revalidate"); +// $app->response()->header("Pragma", "no-cache"); - $previewer->getPreview($object); - } else { - $app->response()->status(404); - } - } + $previewer->getPreview($object); + } else { + $app->response()->status(404); + } + } } /* }}} */ function getAccount() { /* {{{ */ - global $app, $dms, $userobj; - if($userobj) { - $account = array(); - $account['id'] = $userobj->getId(); - $account['login'] = $userobj->getLogin(); - $account['fullname'] = $userobj->getFullName(); - $account['email'] = $userobj->getEmail(); - $account['language'] = $userobj->getLanguage(); - $account['theme'] = $userobj->getTheme(); - $account['role'] = $userobj->getRole(); - $account['comment'] = $userobj->getComment(); - $account['isguest'] = $userobj->isGuest(); - $account['isadmin'] = $userobj->isAdmin(); - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$account)); - } else { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); - } + global $app, $dms, $userobj; + if($userobj) { + $account = array(); + $account['id'] = $userobj->getId(); + $account['login'] = $userobj->getLogin(); + $account['fullname'] = $userobj->getFullName(); + $account['email'] = $userobj->getEmail(); + $account['language'] = $userobj->getLanguage(); + $account['theme'] = $userobj->getTheme(); + $account['role'] = $userobj->getRole(); + $account['comment'] = $userobj->getComment(); + $account['isguest'] = $userobj->isGuest(); + $account['isadmin'] = $userobj->isAdmin(); + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$account)); + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); + } } /* }}} */ /** @@ -766,104 +766,104 @@ function getAccount() { /* {{{ */ * return a list of words only. */ function doSearch() { /* {{{ */ - global $app, $dms, $userobj; + global $app, $dms, $userobj; - $querystr = $app->request()->get('query'); - $mode = $app->request()->get('mode'); - if(!$limit = $app->request()->get('limit')) - $limit = 5; - $resArr = $dms->search($querystr); - $entries = array(); - $count = 0; - if($resArr['folders']) { - foreach ($resArr['folders'] as $entry) { - if ($entry->getAccessMode($userobj) >= M_READ) { - $entries[] = $entry; - $count++; - } - if($count >= $limit) - break; - } - } - $count = 0; - if($resArr['docs']) { - foreach ($resArr['docs'] as $entry) { - $lc = $entry->getLatestContent(); - if ($entry->getAccessMode($userobj) >= M_READ && $lc) { - $entries[] = $entry; - $count++; - } - if($count >= $limit) - break; - } - } + $querystr = $app->request()->get('query'); + $mode = $app->request()->get('mode'); + if(!$limit = $app->request()->get('limit')) + $limit = 5; + $resArr = $dms->search($querystr); + $entries = array(); + $count = 0; + if($resArr['folders']) { + foreach ($resArr['folders'] as $entry) { + if ($entry->getAccessMode($userobj) >= M_READ) { + $entries[] = $entry; + $count++; + } + if($count >= $limit) + break; + } + } + $count = 0; + if($resArr['docs']) { + foreach ($resArr['docs'] as $entry) { + $lc = $entry->getLatestContent(); + if ($entry->getAccessMode($userobj) >= M_READ && $lc) { + $entries[] = $entry; + $count++; + } + if($count >= $limit) + break; + } + } - switch($mode) { - case 'typeahead'; - $recs = array(); - foreach ($entries as $entry) { - /* Passing anything back but a string does not work, because - * the process function of bootstrap.typeahead needs an array of - * strings. - * - * As a quick solution to distingish folders from documents, the - * name will be preceeded by a 'F' or 'D' + switch($mode) { + case 'typeahead'; + $recs = array(); + foreach ($entries as $entry) { + /* Passing anything back but a string does not work, because + * the process function of bootstrap.typeahead needs an array of + * strings. + * + * As a quick solution to distingish folders from documents, the + * name will be preceeded by a 'F' or 'D' - $tmp = array(); - if(get_class($entry) == 'SeedDMS_Core_Document') { - $tmp['type'] = 'folder'; - } else { - $tmp['type'] = 'document'; - } - $tmp['id'] = $entry->getID(); - $tmp['name'] = $entry->getName(); - $tmp['comment'] = $entry->getComment(); - */ - if(get_class($entry) == 'SeedDMS_Core_Document') { - $recs[] = 'D'.$entry->getName(); - } else { - $recs[] = 'F'.$entry->getName(); - } - } - if($recs) -// array_unshift($recs, array('type'=>'', 'id'=>0, 'name'=>$querystr, 'comment'=>'')); - array_unshift($recs, ' '.$querystr); - $app->response()->header('Content-Type', 'application/json'); - echo json_encode($recs); - //echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); - break; - default: - $recs = array(); - foreach ($entries as $entry) { - if(get_class($entry) == 'SeedDMS_Core_Document') { - $document = $entry; - $lc = $document->getLatestContent(); - $recs[] = array( - 'type'=>'document', - 'id'=>$document->getId(), - 'date'=>$document->getDate(), - 'name'=>$document->getName(), - 'mimetype'=>$lc->getMimeType(), - 'version'=>$lc->getVersion(), - 'size'=>$lc->getFileSize(), - 'comment'=>$document->getComment(), - 'keywords'=>$document->getKeywords(), - ); - } elseif(get_class($entry) == 'SeedDMS_Core_Folder') { - $folder = $entry; - $recs[] = array( - 'type'=>'folder', - 'id'=>$folder->getId(), - 'name'=>$folder->getName(), - 'comment'=>$folder->getComment(), - 'date'=>$folder->getDate(), - ); - } - } - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); - break; - } + $tmp = array(); + if(get_class($entry) == 'SeedDMS_Core_Document') { + $tmp['type'] = 'folder'; + } else { + $tmp['type'] = 'document'; + } + $tmp['id'] = $entry->getID(); + $tmp['name'] = $entry->getName(); + $tmp['comment'] = $entry->getComment(); + */ + if(get_class($entry) == 'SeedDMS_Core_Document') { + $recs[] = 'D'.$entry->getName(); + } else { + $recs[] = 'F'.$entry->getName(); + } + } + if($recs) +// array_unshift($recs, array('type'=>'', 'id'=>0, 'name'=>$querystr, 'comment'=>'')); + array_unshift($recs, ' '.$querystr); + $app->response()->header('Content-Type', 'application/json'); + echo json_encode($recs); + //echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); + break; + default: + $recs = array(); + foreach ($entries as $entry) { + if(get_class($entry) == 'SeedDMS_Core_Document') { + $document = $entry; + $lc = $document->getLatestContent(); + $recs[] = array( + 'type'=>'document', + 'id'=>$document->getId(), + 'date'=>$document->getDate(), + 'name'=>$document->getName(), + 'mimetype'=>$lc->getMimeType(), + 'version'=>$lc->getVersion(), + 'size'=>$lc->getFileSize(), + 'comment'=>$document->getComment(), + 'keywords'=>$document->getKeywords(), + ); + } elseif(get_class($entry) == 'SeedDMS_Core_Folder') { + $folder = $entry; + $recs[] = array( + 'type'=>'folder', + 'id'=>$folder->getId(), + 'name'=>$folder->getName(), + 'comment'=>$folder->getComment(), + 'date'=>$folder->getDate(), + ); + } + } + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); + break; + } } /* }}} */ /** @@ -871,60 +871,60 @@ function doSearch() { /* {{{ */ * */ function doSearchByAttr() { /* {{{ */ - global $app, $dms, $userobj; + global $app, $dms, $userobj; - $attrname = $app->request()->get('name'); - $query = $app->request()->get('value'); - if(!$limit = $app->request()->get('limit')) - $limit = 50; - $attrdef = $dms->getAttributeDefinitionByName($attrname); - $entries = array(); - if($attrdef) { - $resArr = $attrdef->getObjects($query, $limit); - if($resArr['folders']) { - foreach ($resArr['folders'] as $entry) { - if ($entry->getAccessMode($userobj) >= M_READ) { - $entries[] = $entry; - } - } - } - if($resArr['docs']) { - foreach ($resArr['docs'] as $entry) { - if ($entry->getAccessMode($userobj) >= M_READ) { - $entries[] = $entry; - } - } - } - } - $recs = array(); - foreach ($entries as $entry) { - if(get_class($entry) == 'SeedDMS_Core_Document') { - $document = $entry; - $lc = $document->getLatestContent(); - $recs[] = array( - 'type'=>'document', - 'id'=>$document->getId(), - 'date'=>$document->getDate(), - 'name'=>$document->getName(), - 'mimetype'=>$lc->getMimeType(), - 'version'=>$lc->getVersion(), - 'size'=>$lc->getFileSize(), - 'comment'=>$document->getComment(), - 'keywords'=>$document->getKeywords(), - ); - } elseif(get_class($entry) == 'SeedDMS_Core_Folder') { - $folder = $entry; - $recs[] = array( - 'type'=>'folder', - 'id'=>$folder->getId(), - 'name'=>$folder->getName(), - 'comment'=>$folder->getComment(), - 'date'=>$folder->getDate(), - ); - } - } - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); + $attrname = $app->request()->get('name'); + $query = $app->request()->get('value'); + if(!$limit = $app->request()->get('limit')) + $limit = 50; + $attrdef = $dms->getAttributeDefinitionByName($attrname); + $entries = array(); + if($attrdef) { + $resArr = $attrdef->getObjects($query, $limit); + if($resArr['folders']) { + foreach ($resArr['folders'] as $entry) { + if ($entry->getAccessMode($userobj) >= M_READ) { + $entries[] = $entry; + } + } + } + if($resArr['docs']) { + foreach ($resArr['docs'] as $entry) { + if ($entry->getAccessMode($userobj) >= M_READ) { + $entries[] = $entry; + } + } + } + } + $recs = array(); + foreach ($entries as $entry) { + if(get_class($entry) == 'SeedDMS_Core_Document') { + $document = $entry; + $lc = $document->getLatestContent(); + $recs[] = array( + 'type'=>'document', + 'id'=>$document->getId(), + 'date'=>$document->getDate(), + 'name'=>$document->getName(), + 'mimetype'=>$lc->getMimeType(), + 'version'=>$lc->getVersion(), + 'size'=>$lc->getFileSize(), + 'comment'=>$document->getComment(), + 'keywords'=>$document->getKeywords(), + ); + } elseif(get_class($entry) == 'SeedDMS_Core_Folder') { + $folder = $entry; + $recs[] = array( + 'type'=>'folder', + 'id'=>$folder->getId(), + 'name'=>$folder->getName(), + 'comment'=>$folder->getComment(), + 'date'=>$folder->getDate(), + ); + } + } + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); } /* }}} */ function checkIfAdmin() { /* {{{ */ @@ -955,8 +955,8 @@ function createAccount() { /* {{{ */ $language = $app->request()->post('language'); $theme = $app->request()->post('theme'); $comment = $app->request()->post('comment'); - - $newAccount = $dms->addUser($userName, $password, $fullname, $email, $language, $theme, $comment); + + $newAccount = $dms->addUser($userName, $password, $fullname, $email, $language, $theme, $comment); if ($newAccount === false) { $app->response()->header('Content-Type', 'application/json'); @@ -986,7 +986,7 @@ function changeAccountPassword($id) { /* {{{ */ { $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>false, 'message'=>'You must PUT a new password', 'data'=>'')); - return; + return; } $newPassword = $app->request()->put('password'); @@ -1001,16 +1001,16 @@ function changeAccountPassword($id) { /* {{{ */ * User not found */ if (!$account) { - $app->response()->status(404); - return; + $app->response()->status(404); + return; } $operation = $account->setPwd($newPassword); if (!$operation){ - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'', 'data'=>'Could not change password.')); - return; + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'', 'data'=>'Could not change password.')); + return; } $app->response()->header('Content-Type', 'application/json'); @@ -1055,22 +1055,22 @@ function setDisabledAccount($id) { /* {{{ */ { $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>false, 'message'=>'You must PUT a disabled state', 'data'=>'')); - return; + return; } - + $isDisabled = false; $status = $app->request()->put('disable'); if ($status == 'true' || $status == '1') { $isDisabled = true; } - + if(is_numeric($id)) $account = $dms->getUser($id); else { $account = $dms->getUserByLogin($id); } - + if($account) { $account->setDisabled($isDisabled); $data = array(); @@ -1092,8 +1092,8 @@ function createGroup() { /* {{{ */ checkIfAdmin(); $groupName = $app->request()->post('name'); $comment = $app->request()->post('comment'); - - $newGroup = $dms->addGroup($groupName, $comment); + + $newGroup = $dms->addGroup($groupName, $comment); if ($newGroup === false) { $app->response()->header('Content-Type', 'application/json'); @@ -1136,18 +1136,18 @@ function getGroup($id) { /* {{{ */ function changeGroupMembership($id, $operationType) { /* {{{ */ global $app, $dms, $userobj; checkIfAdmin(); - + if(is_numeric($id)) $group = $dms->getGroup($id); else { $group = $dms->getGroupByName($id); } - + if ($app->request()->put('userid') == null) { $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>false, 'message'=>'Please PUT the userid', 'data'=>'')); - return; + return; } $userId = $app->request()->put('userid'); if(is_numeric($userId)) @@ -1155,12 +1155,12 @@ function changeGroupMembership($id, $operationType) { /* {{{ */ else { $user = $dms->getUserByLogin($userId); } - + if (!($group && $user)) { $app->response()->status(404); } - $operationResult = false; + $operationResult = false; if ($operationType == 'add') { @@ -1170,7 +1170,7 @@ function changeGroupMembership($id, $operationType) { /* {{{ */ { $operationResult = $group->removeUser($user); } - + if ($operationResult === false) { $app->response()->header('Content-Type', 'application/json'); @@ -1200,7 +1200,7 @@ function addUserToGroup($id) { /* {{{ */ } /* }}} */ function removeUserFromGroup($id) { /* {{{ */ - changeGroupMembership($id, 'remove'); + changeGroupMembership($id, 'remove'); } /* }}} */ function setFolderInheritsAccess($id) { /* {{{ */ @@ -1210,22 +1210,22 @@ function setFolderInheritsAccess($id) { /* {{{ */ { $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>false, 'message'=>'You must PUT an "enable" value', 'data'=>'')); - return; + return; } - + $inherit = false; $status = $app->request()->put('enable'); if ($status == 'true' || $status == '1') { $inherit = true; } - + if(is_numeric($id)) $folder = $dms->getFolder($id); else { $folder = $dms->getFolderByName($id); } - + if($folder) { $folder->setInheritAccess($inherit); $folderId = $folder->getId(); @@ -1249,17 +1249,17 @@ function addGroupAccessToFolder($id) { /* {{{ */ } /* }}} */ function removeUserAccessFromFolder($id) { /* {{{ */ - changeFolderAccess($id, 'remove', 'user'); + changeFolderAccess($id, 'remove', 'user'); } /* }}} */ function removeGroupAccessFromFolder($id) { /* {{{ */ - changeFolderAccess($id, 'remove', 'group'); + changeFolderAccess($id, 'remove', 'group'); } /* }}} */ function changeFolderAccess($id, $operationType, $userOrGroup) { /* {{{ */ global $app, $dms, $userobj; checkIfAdmin(); - + if(is_numeric($id)) $folder = $dms->getfolder($id); else { @@ -1269,66 +1269,66 @@ function changeFolderAccess($id, $operationType, $userOrGroup) { /* {{{ */ $app->response()->status(404); return; } - + $userOrGroupIdInput = $app->request()->put('id'); if ($operationType == 'add') { - if ($app->request()->put('id') == null) - { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'Please PUT the user or group Id', 'data'=>'')); - return; - } + if ($app->request()->put('id') == null) + { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'Please PUT the user or group Id', 'data'=>'')); + return; + } - if ($app->request()->put('mode') == null) - { - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'Please PUT the access mode', 'data'=>'')); - return; - } + if ($app->request()->put('mode') == null) + { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'Please PUT the access mode', 'data'=>'')); + return; + } - $modeInput = $app->request()->put('mode'); + $modeInput = $app->request()->put('mode'); - $mode = M_NONE; - if ($modeInput == 'read') - { - $mode = M_READ; - } - if ($modeInput == 'readwrite') - { - $mode = M_READWRITE; - } - if ($modeInput == 'all') - { - $mode = M_ALL; - } - } + $mode = M_NONE; + if ($modeInput == 'read') + { + $mode = M_READ; + } + if ($modeInput == 'readwrite') + { + $mode = M_READWRITE; + } + if ($modeInput == 'all') + { + $mode = M_ALL; + } + } $userOrGroupId = $userOrGroupIdInput; if(!is_numeric($userOrGroupIdInput) && $userOrGroup == 'user') { - $userOrGroupObj = $dms->getUserByLogin($userOrGroupIdInput); + $userOrGroupObj = $dms->getUserByLogin($userOrGroupIdInput); } if(!is_numeric($userOrGroupIdInput) && $userOrGroup == 'group') { - $userOrGroupObj = $dms->getGroupByName($userOrGroupIdInput); + $userOrGroupObj = $dms->getGroupByName($userOrGroupIdInput); } if(is_numeric($userOrGroupIdInput) && $userOrGroup == 'user') { - $userOrGroupObj = $dms->getUser($userOrGroupIdInput); + $userOrGroupObj = $dms->getUser($userOrGroupIdInput); } if(is_numeric($userOrGroupIdInput) && $userOrGroup == 'group') { - $userOrGroupObj = $dms->getGroup($userOrGroupIdInput); + $userOrGroupObj = $dms->getGroup($userOrGroupIdInput); } if (!$userOrGroupObj) { $app->response()->status(404); return; - } - $userOrGroupId = $userOrGroupObj->getId(); + } + $userOrGroupId = $userOrGroupObj->getId(); - $operationResult = false; + $operationResult = false; if ($operationType == 'add' && $userOrGroup == 'user') { @@ -1347,7 +1347,7 @@ function changeFolderAccess($id, $operationType, $userOrGroup) { /* {{{ */ { $operationResult = $folder->removeAccess($userOrGroupId, false); } - + if ($operationResult === false) { $app->response()->header('Content-Type', 'application/json'); @@ -1368,7 +1368,7 @@ function changeFolderAccess($id, $operationType, $userOrGroup) { /* {{{ */ function clearFolderAccessList($id) { /* {{{ */ global $app, $dms, $userobj; checkIfAdmin(); - + if(is_numeric($id)) $folder = $dms->getFolder($id); else { @@ -1376,15 +1376,15 @@ function clearFolderAccessList($id) { /* {{{ */ } if (!$folder) { - $app->response()->status(404); - return; + $app->response()->status(404); + return; } $operationResult = $folder->clearAccessList(); $data = array(); $app->response()->header('Content-Type', 'application/json'); if (!$operationResult) { - echo json_encode(array('success'=>false, 'message'=>'Something went wrong. Could not clear access list for this folder.', 'data'=>$data)); + echo json_encode(array('success'=>false, 'message'=>'Something went wrong. Could not clear access list for this folder.', 'data'=>$data)); } echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); } /* }}} */ @@ -1393,18 +1393,18 @@ function clearFolderAccessList($id) { /* {{{ */ $app = new \Slim\Slim(array('mode'=>'development', '_session.handler'=>null)); $app->configureMode('production', function () use ($app) { - $app->config(array( - 'log.enable' => true, - 'log.path' => '/tmp/', - 'debug' => false - )); + $app->config(array( + 'log.enable' => true, + 'log.path' => '/tmp/', + 'debug' => false + )); }); $app->configureMode('development', function () use ($app) { - $app->config(array( - 'log.enable' => false, - 'debug' => true - )); + $app->config(array( + 'log.enable' => false, + 'debug' => true + )); }); // use post for create operation @@ -1448,10 +1448,10 @@ $app->get('/groups/:id', 'getGroup'); $app->put('/groups/:id/addUser', 'addUserToGroup'); $app->put('/groups/:id/removeUser', 'removeUserFromGroup'); $app->put('/folder/:id/setInherit', 'setFolderInheritsAccess'); -$app->put('/folder/:id/access/group/add', 'addGroupAccessToFolder'); // -$app->put('/folder/:id/access/user/add', 'addUserAccessToFolder'); // -$app->put('/folder/:id/access/group/remove', 'removeGroupAccessFromFolder'); -$app->put('/folder/:id/access/user/remove', 'removeUserAccessFromFolder'); +$app->put('/folder/:id/access/group/add', 'addGroupAccessToFolder'); // +$app->put('/folder/:id/access/user/add', 'addUserAccessToFolder'); // +$app->put('/folder/:id/access/group/remove', 'removeGroupAccessFromFolder'); +$app->put('/folder/:id/access/user/remove', 'removeUserAccessFromFolder'); $app->put('/folder/:id/access/clear', 'clearFolderAccessList'); $app->run(); From b539921c2382cf51383f1c8b30513a310c03849e Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 20 Dec 2017 11:33:21 +0100 Subject: [PATCH 03/17] do not call htmlspecialchars() for json data it doesn't do any harm and it's up to the application to encode the data --- restapi/index.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/restapi/index.php b/restapi/index.php index 2e8b901d8..90d5ec9a2 100644 --- a/restapi/index.php +++ b/restapi/index.php @@ -215,7 +215,7 @@ function getFolderPath($id) { /* {{{ */ $path = $folder->getPath(); $data = array(); foreach($path as $element) { - $data[] = array('id'=>$element->getId(), 'name'=>htmlspecialchars($element->getName())); + $data[] = array('id'=>$element->getId(), 'name'=>$element->getName()); } echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); } /* }}} */ @@ -261,7 +261,7 @@ function getFolderChildren($id) { /* {{{ */ $recs[] = array( 'type'=>'folder', 'id'=>$subfolder->getId(), - 'name'=>htmlspecialchars($subfolder->getName()), + 'name'=>$subfolder->getName(), 'comment'=>$subfolder->getComment(), 'date'=>$subfolder->getDate(), ); @@ -275,7 +275,7 @@ function getFolderChildren($id) { /* {{{ */ 'type'=>'document', 'id'=>$document->getId(), 'date'=>$document->getDate(), - 'name'=>htmlspecialchars($document->getName()), + 'name'=>$document->getName(), 'mimetype'=>$lc->getMimeType(), 'version'=>$lc->getVersion(), 'size'=>$lc->getFileSize(), @@ -464,8 +464,8 @@ function getDocument($id) { /* {{{ */ $app->response()->header('Content-Type', 'application/json'); $data = array( 'id'=>$id, - 'name'=>htmlspecialchars($document->getName()), - 'comment'=>htmlspecialchars($document->getComment()), + 'name'=>$document->getName(), + 'comment'=>$document->getComment(), 'date'=>$document->getDate(), 'mimetype'=>$lc->getMimeType(), 'version'=>$lc->getVersion(), @@ -576,7 +576,7 @@ function getDocumentVersions($id) { /* {{{ */ 'date'=>$lc->getDate(), 'mimetype'=>$lc->getMimeType(), 'size'=>$lc->getFileSize(), - 'comment'=>htmlspecialchars($lc->getComment()), + 'comment'=>$lc->getComment(), ); } $app->response()->header('Content-Type', 'application/json'); From 83aa6fe02e8f049b9f70cf6cbd043baaa91a7fbb Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 20 Dec 2017 11:51:05 +0100 Subject: [PATCH 04/17] move retrieval of document data into function --- restapi/index.php | 92 ++++++++++++++++++----------------------------- 1 file changed, 34 insertions(+), 58 deletions(-) diff --git a/restapi/index.php b/restapi/index.php index 90d5ec9a2..693ffc91e 100644 --- a/restapi/index.php +++ b/restapi/index.php @@ -60,6 +60,21 @@ if(USE_PHP_SESSION) { require "vendor/autoload.php"; #\Slim\Slim::registerAutoloader(); +function __getLatestVersionData($lc) { /* {{{ */ + $document = $lc->getDocument(); + return array( + 'type'=>'document', + 'id'=>$document->getId(), + 'date'=>$document->getDate(), + 'name'=>$document->getName(), + 'mimetype'=>$lc->getMimeType(), + 'version'=>$lc->getVersion(), + 'size'=>$lc->getFileSize(), + 'comment'=>$document->getComment(), + 'keywords'=>$document->getKeywords(), + ); +} /* }}} */ + function doLogin() { /* {{{ */ global $app, $dms, $userobj, $session, $settings; @@ -136,19 +151,12 @@ function getLockedDocuments() { /* {{{ */ if(false !== ($documents = $dms->getDocumentsLockedByUser($userobj))) { $documents = SeedDMS_Core_DMS::filterAccess($documents, $userobj, M_READ); + $recs = array(); foreach($documents as $document) { $lc = $document->getLatestContent(); - $recs[] = array( - 'type'=>'document', - 'id'=>$document->getId(), - 'date'=>$document->getDate(), - 'name'=>$document->getName(), - 'mimetype'=>$lc->getMimeType(), - 'version'=>$lc->getVersion(), - 'size'=>$lc->getFileSize(), - 'comment'=>$document->getComment(), - 'keywords'=>$document->getKeywords(), - ); + if($lc) { + $recs[] = __getLatestVersionData($lc); + } } $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); @@ -271,17 +279,7 @@ function getFolderChildren($id) { /* {{{ */ foreach($documents as $document) { $lc = $document->getLatestContent(); if($lc) { - $recs[] = array( - 'type'=>'document', - 'id'=>$document->getId(), - 'date'=>$document->getDate(), - 'name'=>$document->getName(), - 'mimetype'=>$lc->getMimeType(), - 'version'=>$lc->getVersion(), - 'size'=>$lc->getFileSize(), - 'comment'=>$document->getComment(), - 'keywords'=>$document->getKeywords(), - ); + $recs[] = __getLatestVersionData($lc); } } $app->response()->header('Content-Type', 'application/json'); @@ -461,20 +459,14 @@ function getDocument($id) { /* {{{ */ if($document) { if ($document->getAccessMode($userobj) >= M_READ) { $lc = $document->getLatestContent(); - $app->response()->header('Content-Type', 'application/json'); - $data = array( - 'id'=>$id, - 'name'=>$document->getName(), - 'comment'=>$document->getComment(), - 'date'=>$document->getDate(), - 'mimetype'=>$lc->getMimeType(), - 'version'=>$lc->getVersion(), - 'orig_filename'=>$lc->getOriginalFileName(), - 'size'=>$lc->getFileSize(), - 'keywords'=>$document->getKeywords(), - ); - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); + if($lc) { + $data = __getLatestVersionData($lc); + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); + } } else { $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); @@ -838,17 +830,9 @@ function doSearch() { /* {{{ */ if(get_class($entry) == 'SeedDMS_Core_Document') { $document = $entry; $lc = $document->getLatestContent(); - $recs[] = array( - 'type'=>'document', - 'id'=>$document->getId(), - 'date'=>$document->getDate(), - 'name'=>$document->getName(), - 'mimetype'=>$lc->getMimeType(), - 'version'=>$lc->getVersion(), - 'size'=>$lc->getFileSize(), - 'comment'=>$document->getComment(), - 'keywords'=>$document->getKeywords(), - ); + if($lc) { + $recs[] = __getLatestVersionData($lc); + } } elseif(get_class($entry) == 'SeedDMS_Core_Folder') { $folder = $entry; $recs[] = array( @@ -901,17 +885,9 @@ function doSearchByAttr() { /* {{{ */ if(get_class($entry) == 'SeedDMS_Core_Document') { $document = $entry; $lc = $document->getLatestContent(); - $recs[] = array( - 'type'=>'document', - 'id'=>$document->getId(), - 'date'=>$document->getDate(), - 'name'=>$document->getName(), - 'mimetype'=>$lc->getMimeType(), - 'version'=>$lc->getVersion(), - 'size'=>$lc->getFileSize(), - 'comment'=>$document->getComment(), - 'keywords'=>$document->getKeywords(), - ); + if($lc) { + $recs[] = __getLatestVersionData($lc); + } } elseif(get_class($entry) == 'SeedDMS_Core_Folder') { $folder = $entry; $recs[] = array( From 041c7934bc045bcb6052ca756ed9034d8c86a093 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 20 Dec 2017 12:16:12 +0100 Subject: [PATCH 05/17] do not add extension if it already exists (getDocumentContent()) --- restapi/index.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/restapi/index.php b/restapi/index.php index 693ffc91e..fba248258 100644 --- a/restapi/index.php +++ b/restapi/index.php @@ -539,8 +539,14 @@ function getDocumentContent($id) { /* {{{ */ if($document) { if ($document->getAccessMode($userobj) >= M_READ) { $lc = $document->getLatestContent(); + + if (pathinfo($document->getName(), PATHINFO_EXTENSION) == $lc->getFileType()) + $filename = $document->getName(); + else + $filename = $document->getName().$lc->getFileType(); + $app->response()->header('Content-Type', $lc->getMimeType()); - $app->response()->header("Content-Disposition: filename=\"" . $document->getName().$lc->getFileType() . "\""); + $app->response()->header("Content-Disposition: filename=\"" . $filename . "\""); $app->response()->header("Content-Length", filesize($dms->contentDir . $lc->getPath())); $app->response()->header("Expires", "0"); $app->response()->header("Cache-Control", "no-cache, must-revalidate"); From 80c5934eb12507150c5e2519d124ae2914dd4d51 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 20 Dec 2017 13:16:15 +0100 Subject: [PATCH 06/17] use new authentication mechanism, add ldap authentication --- restapi/index.php | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/restapi/index.php b/restapi/index.php index fba248258..1dc20f8ae 100644 --- a/restapi/index.php +++ b/restapi/index.php @@ -82,7 +82,23 @@ function doLogin() { /* {{{ */ $password = $app->request()->post('pass'); $userobj = $dms->getUserByLogin($username); - if(!$userobj || md5($password) != $userobj->getPwd()) { + $user = null; + + /* Authenticate against LDAP server {{{ */ + if (!$user && isset($settings->_ldapHost) && strlen($settings->_ldapHost)>0) { + require_once("../inc/inc.ClassLdapAuthentication.php"); + $authobj = new SeedDMS_LdapAuthentication($dms, $settings); + $user = $authobj->authenticate($username, $password); + } /* }}} */ + + /* Authenticate against SeedDMS database {{{ */ + if(!$user) { + require_once("../inc/inc.ClassDbAuthentication.php"); + $authobj = new SeedDMS_DbAuthentication($dms, $settings); + $user = $authobj->authenticate($username, $password); + } /* }}} */ + + if(!$user) { if(USE_PHP_SESSION) { unset($_SESSION['userid']); } else { From 1a9f6895f752cceebf17a67ec8f734813e8f8eca Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 20 Dec 2017 13:18:07 +0100 Subject: [PATCH 07/17] calling /folder/ with an id will return the root folder --- restapi/index.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/restapi/index.php b/restapi/index.php index 1dc20f8ae..329aaefa6 100644 --- a/restapi/index.php +++ b/restapi/index.php @@ -182,10 +182,13 @@ function getLockedDocuments() { /* {{{ */ } } /* }}} */ -function getFolder($id) { /* {{{ */ - global $app, $dms, $userobj; +function getFolder($id = null) { /* {{{ */ + global $app, $dms, $userobj, $settings; $forcebyname = $app->request()->get('forcebyname'); - if(is_numeric($id) && empty($forcebyname)) + + if ($id === null) + $folder = $dms->getFolder($settings->_rootFolderID); + else if(is_numeric($id) && empty($forcebyname)) $folder = $dms->getFolder($id); else { $parentid = $app->request()->get('parentid'); @@ -1414,6 +1417,7 @@ $app->get('/logout', 'doLogout'); $app->get('/account', 'getAccount'); $app->get('/search', 'doSearch'); $app->get('/searchbyattr', 'doSearchByAttr'); +$app->get('/folder/', 'getFolder'); $app->get('/folder/:id', 'getFolder'); $app->post('/folder/:id/move', 'moveFolder'); $app->delete('/folder/:id', 'deleteFolder'); From cbe184a637c2dc0c34e38a5e1605134761f65c74 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 20 Dec 2017 13:19:41 +0100 Subject: [PATCH 08/17] return from uploadDocument() if user cannot be found --- restapi/index.php | 1 + 1 file changed, 1 insertion(+) diff --git a/restapi/index.php b/restapi/index.php index 329aaefa6..1a6c6d3bd 100644 --- a/restapi/index.php +++ b/restapi/index.php @@ -431,6 +431,7 @@ function uploadDocument($id) { /* {{{ */ if(!$userobj) { $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); + return; } if($id == 0) { From aaab438c169fd1d48b0678257684e6ec1f856623 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 20 Dec 2017 13:27:33 +0100 Subject: [PATCH 09/17] return properly if user object doesn't exists --- restapi/index.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/restapi/index.php b/restapi/index.php index 1a6c6d3bd..64fb76392 100644 --- a/restapi/index.php +++ b/restapi/index.php @@ -146,7 +146,9 @@ function setFullName() { /* {{{ */ if(!$userobj) { $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); + return; } + $userobj->setFullName($app->request()->put('fullname')); echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$userobj->getFullName())); } /* }}} */ @@ -157,7 +159,9 @@ function setEmail($id) { /* {{{ */ if(!$userobj) { $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); + return; } + $userobj->setEmail($app->request()->put('fullname')); echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$userid)); } /* }}} */ @@ -319,6 +323,7 @@ function createFolder($id) { /* {{{ */ if(!$userobj) { $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); + return; } if($id == 0) { @@ -360,6 +365,7 @@ function moveFolder($id) { /* {{{ */ if(!$userobj) { $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); + return; } $mfolder = $dms->getFolder($id); @@ -399,6 +405,7 @@ function deleteFolder($id) { /* {{{ */ if(!$userobj) { $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); + return; } if($id == 0) { @@ -931,6 +938,7 @@ function doSearchByAttr() { /* {{{ */ function checkIfAdmin() { /* {{{ */ global $app, $dms, $userobj; + if(!$userobj) { $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); From 0b054d0fb1534c2b800fd4a290cb25746a78d1aa Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 20 Dec 2017 13:35:23 +0100 Subject: [PATCH 10/17] add method uploadDocumentFile() --- restapi/index.php | 60 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/restapi/index.php b/restapi/index.php index 64fb76392..d5ae2460a 100644 --- a/restapi/index.php +++ b/restapi/index.php @@ -480,6 +480,65 @@ function uploadDocument($id) { /* {{{ */ } } /* }}} */ +function uploadDocumentFile($documentId) { /* {{{ */ + global $app, $dms, $userobj; + + if(!$userobj) { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); + return; + } + + if($documentId == 0) { + echo json_encode(array('success'=>true, 'message'=>'id is 0', 'data'=>'')); + return; + } + $document = $dms->getDocument($documentId); + if($document) { + if ($document->getAccessMode($userobj) >= M_READWRITE) { + $docname = $app->request()->params('name'); + $keywords = $app->request()->params('keywords'); + $origfilename = $app->request()->params('origfilename'); + $comment = $app->request()->params('comment'); + $version = $app->request()->params('version') == '' ? 0 : $app->request()->params('version'); + $public = $app->request()->params('public') == '' ? 'false' : $app->request()->params('public'); + if (count($_FILES) == 0) + { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No file detected', 'data'=>'')); + return; + } + $file_info = reset($_FILES); + if ($origfilename == null) + $origfilename = $file_info['name']; + if (trim($docname) == '') + $docname = $origfilename; + $temp = $file_info['tmp_name']; + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $userfiletype = finfo_file($finfo, $temp); + $fileType = ".".pathinfo($origfilename, PATHINFO_EXTENSION); + finfo_close($finfo); + $res = $document->addDocumentFile($docname, $comment, $userobj, $temp, + $origfilename ? $origfilename : utf8_basename($temp), + $fileType, $userfiletype, $version, $public); + unlink($temp); + if($res) { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'Upload succeded', 'data'=>$res)); + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'Upload failed', 'data'=>'')); + } + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); + } + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No such document', 'data'=>'')); + } +} /* }}} */ + function getDocument($id) { /* {{{ */ global $app, $dms, $userobj; $document = $dms->getDocument($id); @@ -1437,6 +1496,7 @@ $app->get('/folder/:id/attributes', 'getFolderAttributes'); $app->post('/folder/:id/createfolder', 'createFolder'); $app->put('/folder/:id/document', 'uploadDocument'); $app->get('/document/:id', 'getDocument'); +$app->post('/document/:id/attachment', 'uploadDocumentFile'); $app->delete('/document/:id', 'deleteDocument'); $app->post('/document/:id/move', 'moveDocument'); $app->get('/document/:id/content', 'getDocumentContent'); From ff82caf818ece63cd293b9dd4d2f2053f32bf297 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 20 Dec 2017 13:42:15 +0100 Subject: [PATCH 11/17] fix setting of header --- restapi/index.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/restapi/index.php b/restapi/index.php index d5ae2460a..b8e9042a9 100644 --- a/restapi/index.php +++ b/restapi/index.php @@ -632,7 +632,7 @@ function getDocumentContent($id) { /* {{{ */ $filename = $document->getName().$lc->getFileType(); $app->response()->header('Content-Type', $lc->getMimeType()); - $app->response()->header("Content-Disposition: filename=\"" . $filename . "\""); + $app->response()->header("Content-Disposition", "filename=\"" . $filename . "\""); $app->response()->header("Content-Length", filesize($dms->contentDir . $lc->getPath())); $app->response()->header("Expires", "0"); $app->response()->header("Cache-Control", "no-cache, must-revalidate"); @@ -800,7 +800,7 @@ function getDocumentPreview($id, $version=0, $width=0) { /* {{{ */ $object = $document->getLatestContent(); if(!$object) exit; - + if(!empty($width)) $previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir, $width); else @@ -1453,7 +1453,7 @@ function clearFolderAccessList($id) { /* {{{ */ $app->response()->header('Content-Type', 'application/json'); if (!$operationResult) { - echo json_encode(array('success'=>false, 'message'=>'Something went wrong. Could not clear access list for this folder.', 'data'=>$data)); + echo json_encode(array('success'=>false, 'message'=>'Something went wrong. Could not clear access list for this folder.', 'data'=>$data)); } echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); } /* }}} */ From efe9ff0e42a0efc62f2febc70b827c910a66cc7e Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 20 Dec 2017 13:46:38 +0100 Subject: [PATCH 12/17] do not pass folder in document move as 'dest' anymore --- restapi/index.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/restapi/index.php b/restapi/index.php index b8e9042a9..d134a8128 100644 --- a/restapi/index.php +++ b/restapi/index.php @@ -585,12 +585,11 @@ function deleteDocument($id) { /* {{{ */ } } /* }}} */ -function moveDocument($id) { /* {{{ */ +function moveDocument($id, $folderid) { /* {{{ */ global $app, $dms, $userobj; $document = $dms->getDocument($id); if($document) { if ($document->getAccessMode($userobj) >= M_READ) { - $folderid = $app->request()->post('dest'); if($folder = $dms->getFolder($folderid)) { if($folder->getAccessMode($userobj) >= M_READWRITE) { if($document->setFolder($folder)) { @@ -1498,7 +1497,7 @@ $app->put('/folder/:id/document', 'uploadDocument'); $app->get('/document/:id', 'getDocument'); $app->post('/document/:id/attachment', 'uploadDocumentFile'); $app->delete('/document/:id', 'deleteDocument'); -$app->post('/document/:id/move', 'moveDocument'); +$app->post('/document/:id/move/:folderid', 'moveDocument'); $app->get('/document/:id/content', 'getDocumentContent'); $app->get('/document/:id/versions', 'getDocumentVersions'); $app->get('/document/:id/version/:version', 'getDocumentVersion'); From f3daa6d0e240d7763e946db5efd357e1455fd366 Mon Sep 17 00:00:00 2001 From: Sebastian Bartus-Kunz Date: Wed, 20 Dec 2017 15:40:20 +0100 Subject: [PATCH 13/17] Fixed wrong return object in getDocumentLink() --- SeedDMS_Core/Core/inc.ClassDocument.php | 38 ++++++++++++------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index 76e53d5fe..1fc7d35c4 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -284,7 +284,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ */ function getDir() { /* {{{ */ if($this->_dms->maxDirID) { - $dirid = (int) (($this->_id-1) / $this->_dms->maxDirID) + 1; + $dirid = (int) (($this->_id-1) / $this->_dms->maxDirID) + 1; return $dirid."/".$this->_id."/"; } else { return $this->_id."/"; @@ -760,7 +760,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ * has no access list the returned array contains the two elements * 'users' and 'groups' which are than empty. The methode returns false * if the function fails. - * + * * @param integer $mode access mode (defaults to M_ANY) * @param integer $op operation (defaults to O_EQ) * @return array multi dimensional array or false in case of an error @@ -1825,7 +1825,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ $link = new SeedDMS_Core_DocumentLink($resArr["id"], $document, $target, $resArr["userID"], $resArr["public"]); $user = $this->_dms->getLoggedInUser(); if($link->getAccessMode($user, $document, $target) >= M_READ) - return $file; + return $link; return null; } /* }}} */ @@ -1977,7 +1977,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ $queryStr = "SELECT * FROM `tblDocumentFiles` WHERE `document` = " . $this->_id; if($version) { $queryStr .= " AND (`version`=0 OR `version`=".(int) $version.")"; - } + } $queryStr .= " ORDER BY "; if($version) { $queryStr .= "`version` DESC,"; @@ -2352,7 +2352,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ /** * Calculate the disk space including all versions of the document - * + * * This is done by using the internal database field storing the * filesize of a document version. * @@ -2371,7 +2371,7 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ /** * Returns a list of events happend during the life of the document - * + * * This includes the creation of new versions, approval and reviews, etc. * * @return array list of events @@ -2865,7 +2865,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ /** * Rewrites the complete status log - * + * * Attention: this function is highly dangerous. * It removes an existing status log and rewrites it. * This method was added for importing an xml dump. @@ -2916,7 +2916,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ * Returns the access mode similar to a document * * There is no real access mode for document content, so this is more - * like a virtual access mode, derived from the status of the document + * like a virtual access mode, derived from the status of the document * content. The function checks if {@link SeedDMS_Core_DMS::noReadForStatus} * contains the status of the version and returns M_NONE if it exists and * the user is not involved in a workflow or review/approval/revision. @@ -2926,7 +2926,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ * prevent access on the whole document if there is no accessible version. * * FIXME: This function only works propperly if $u is the currently logged in - * user, because noReadForStatus will be set for this user. + * user, because noReadForStatus will be set for this user. * FIXED: instead of using $dms->noReadForStatus it is take from the user's role * * @param object $u user @@ -3094,7 +3094,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ /** * Rewrites the complete review log - * + * * Attention: this function is highly dangerous. * It removes an existing review log and rewrites it. * This method was added for importing an xml dump. @@ -3222,7 +3222,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ /** * Rewrites the complete approval log - * + * * Attention: this function is highly dangerous. * It removes an existing review log and rewrites it. * This method was added for importing an xml dump. @@ -3890,7 +3890,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ $recs = $db->getResultArray($queryStr); if (is_bool($recs) && !$recs) return false; - $this->_workflowState = new SeedDMS_Core_Workflow_State($recs[0]['id'], $recs[0]['name'], $recs[0]['maxtime'], $recs[0]['precondfunc'], $recs[0]['documentstatus']); + $this->_workflowState = new SeedDMS_Core_Workflow_State($recs[0]['id'], $recs[0]['name'], $recs[0]['maxtime'], $recs[0]['precondfunc'], $recs[0]['documentstatus']); $this->_workflowState->setDMS($this->_document->_dms); } return $this->_workflowState; @@ -3913,7 +3913,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ $db->rollbackTransaction(); return false; } - $this->_workflow = $workflow; + $this->_workflow = $workflow; if(!$this->setStatus(S_IN_WORKFLOW, "Added workflow '".$workflow->getName()."'", $user)) { $db->rollbackTransaction(); return false; @@ -3947,7 +3947,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ return false; if(!$recs) return false; - $this->_workflow = new SeedDMS_Core_Workflow($recs[0]['id'], $recs[0]['name'], $this->_document->_dms->getWorkflowState($recs[0]['initstate'])); + $this->_workflow = new SeedDMS_Core_Workflow($recs[0]['id'], $recs[0]['name'], $this->_document->_dms->getWorkflowState($recs[0]['initstate'])); $this->_workflow->setDMS($this->_document->_dms); } return $this->_workflow; @@ -3955,7 +3955,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ /** * Rewrites the complete workflow log - * + * * Attention: this function is highly dangerous. * It removes an existing workflow log and rewrites it. * This method was added for importing an xml dump. @@ -4107,7 +4107,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ if($recs[0]['parentworkflow']) return $this->_document->_dms->getWorkflow($recs[0]['parentworkflow']); - + return false; } /* }}} */ @@ -4134,7 +4134,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ if (!$db->getResult($queryStr)) { return false; } - $this->_workflow = $subworkflow; + $this->_workflow = $subworkflow; return true; } return true; @@ -4181,7 +4181,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ return false; } - $this->_workflow = $this->_document->_dms->getWorkflow($recs[0]['parentworkflow']); + $this->_workflow = $this->_document->_dms->getWorkflow($recs[0]['parentworkflow']); $this->_workflow->setDMS($this->_document->_dms); if($transition) { @@ -4390,7 +4390,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ return $nextstate; } return true; - + } /* }}} */ /** From d0a2ac51a4918b7e3e657a8f92da9a7008542f89 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 20 Dec 2017 16:38:10 +0100 Subject: [PATCH 14/17] add methods to manage categories --- restapi/index.php | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/restapi/index.php b/restapi/index.php index d134a8128..9bbb28b08 100644 --- a/restapi/index.php +++ b/restapi/index.php @@ -1433,6 +1433,48 @@ function changeFolderAccess($id, $operationType, $userOrGroup) { /* {{{ */ echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); } /* }}} */ + +function getCategories() { /* {{{ */ + global $app, $dms, $userobj; + + $categories = $dms->getDocumentCategories(); + foreach($categories as $category) + $data[] = ['id' => $category->getId(), 'name' => $category->getName()]; + + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); +} + +function addCategory() { /* {{{ */ + global $app, $dms, $userobj; + checkIfAdmin(); + + $category = $app->request()->params("category"); + if ($category == null) + { + echo json_encode(array('success'=>false, 'message'=>'Need a category.', 'data'=>'')); + return; + } + + $data = $dms->addDocumentCategory($category); + + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); +} + +function deleteCategory($id) +{ + global $app, $dms, $userobj; + checkIfAdmin(); + + $categories = new SeedDMS_Core_DocumentCategory($id, null); + $result = $categories->remove(); + $data = null; + + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>$result, 'message'=>'', 'data'=>$data)); +} + function clearFolderAccessList($id) { /* {{{ */ global $app, $dms, $userobj; checkIfAdmin(); @@ -1523,6 +1565,9 @@ $app->put('/folder/:id/access/user/add', 'addUserAccessToFolder'); // $app->put('/folder/:id/access/group/remove', 'removeGroupAccessFromFolder'); $app->put('/folder/:id/access/user/remove', 'removeUserAccessFromFolder'); $app->put('/folder/:id/access/clear', 'clearFolderAccessList'); +$app->get('/categories', 'getCategories'); +$app->delete('/categories/:id', 'deleteCategory'); +$app->post('/categories', 'addCategory'); $app->run(); ?> From e8bfbb5c9745a5646612582962952168fddb6948 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 20 Dec 2017 17:58:24 +0100 Subject: [PATCH 15/17] add uploadDocument with POST, add changeCategoryName, moveFolder receives destination in url like moveDocument --- restapi/index.php | 137 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 120 insertions(+), 17 deletions(-) diff --git a/restapi/index.php b/restapi/index.php index 9bbb28b08..24415cbdc 100644 --- a/restapi/index.php +++ b/restapi/index.php @@ -359,7 +359,7 @@ function createFolder($id) { /* {{{ */ } } /* }}} */ -function moveFolder($id) { /* {{{ */ +function moveFolder($id, $folderid) { /* {{{ */ global $app, $dms, $userobj; if(!$userobj) { @@ -371,7 +371,6 @@ function moveFolder($id) { /* {{{ */ $mfolder = $dms->getFolder($id); if($mfolder) { if ($mfolder->getAccessMode($userobj) >= M_READ) { - $folderid = $app->request()->post('dest'); if($folder = $dms->getFolder($folderid)) { if($folder->getAccessMode($userobj) >= M_READWRITE) { if($mfolder->setParent($folder)) { @@ -441,6 +440,70 @@ function uploadDocument($id) { /* {{{ */ return; } + if($id == 0) { + echo json_encode(array('success'=>true, 'message'=>'id is 0', 'data'=>'')); + return; + } + $mfolder = $dms->getFolder($id); + if($mfolder) { + if ($mfolder->getAccessMode($userobj) >= M_READWRITE) { + $docname = $app->request()->params('name'); + $keywords = $app->request()->params('keywords'); +// $categories = $app->request()->params('categories') ? $app->request()->params('categories') : []; +// $attributes = $app->request()->params('attributes') ? $app->request()->params('attributes') : []; + $origfilename = $app->request()->params('origfilename'); + if (count($_FILES) == 0) + { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No file detected', 'data'=>'')); + return; + } + $file_info = reset($_FILES); + if ($origfilename == null) + $origfilename = $file_info['name']; + if (trim($docname) == '') + $docname = $origfilename; + $temp = $file_info['tmp_name']; + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $userfiletype = finfo_file($finfo, $temp); + $fileType = ".".pathinfo($origfilename, PATHINFO_EXTENSION); + finfo_close($finfo); + $res = $mfolder->addDocument($docname, '', 0, $userobj, $keywords, array(), $temp, $origfilename ? $origfilename : basename($temp), $fileType, $userfiletype, 0); +// addDocumentCategories($res, $categories); +// setDocumentAttributes($res, $attributes); + + unlink($temp); + if($res) { + $doc = $res[0]; + $rec = array('id'=>$doc->getId(), 'name'=>$doc->getName()); + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'Upload succeded', 'data'=>$rec)); + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'Upload failed', 'data'=>'')); + } + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); + } + } else { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'No folder', 'data'=>'')); + } +} /* }}} */ + +/** + * Old upload method which uses put instead of post + */ +function uploadDocumentPut($id) { /* {{{ */ + global $app, $dms, $userobj; + + if(!$userobj) { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'Not logged in', 'data'=>'')); + return; + } + if($id == 0) { echo json_encode(array('success'=>true, 'message'=>'id is 0', 'data'=>'')); return; @@ -1443,7 +1506,7 @@ function getCategories() { /* {{{ */ $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); -} +} /* }}} */ function addCategory() { /* {{{ */ global $app, $dms, $userobj; @@ -1460,10 +1523,9 @@ function addCategory() { /* {{{ */ $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); -} +} /* }}} */ -function deleteCategory($id) -{ +function deleteCategory($id) { /* {{{ */ global $app, $dms, $userobj; checkIfAdmin(); @@ -1473,7 +1535,50 @@ function deleteCategory($id) $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>$result, 'message'=>'', 'data'=>$data)); -} +} /* }}} */ + +/** + * Updates the name of an existing category + * + * @param $id The user name or numerical identifier + */ +function changeCategoryName($id) { /* {{{ */ + global $app, $dms, $userobj; + + checkIfAdmin(); + + if ($app->request()->put('name') == null) + { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'You must PUT a new name', 'data'=>'')); + return; + } + + $newname = $app->request()->put('name'); + + $category = null; + if(is_numeric($id)) + $category = $dms->getDocumentCategory($id); + + /** + * Category not found + */ + if (!$category) { + $app->response()->status(404); + return; + } + + if (!$category->setName($newname)) { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'', 'data'=>'Could not change name.')); + return; + } + + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>'')); + + return; +} /* }}} */ function clearFolderAccessList($id) { /* {{{ */ global $app, $dms, $userobj; @@ -1484,19 +1589,15 @@ function clearFolderAccessList($id) { /* {{{ */ else { $folder = $dms->getFolderByName($id); } - if (!$folder) - { + if (!$folder) { $app->response()->status(404); return; } - $operationResult = $folder->clearAccessList(); - $data = array(); $app->response()->header('Content-Type', 'application/json'); - if (!$operationResult) - { - echo json_encode(array('success'=>false, 'message'=>'Something went wrong. Could not clear access list for this folder.', 'data'=>$data)); + if (!$folder->clearAccessList()) { + echo json_encode(array('success'=>false, 'message'=>'Something went wrong. Could not clear access list for this folder.', 'data'=>'')); } - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>'')); } /* }}} */ //$app = new Slim(array('mode'=>'development', '_session.handler'=>null)); @@ -1528,14 +1629,15 @@ $app->get('/search', 'doSearch'); $app->get('/searchbyattr', 'doSearchByAttr'); $app->get('/folder/', 'getFolder'); $app->get('/folder/:id', 'getFolder'); -$app->post('/folder/:id/move', 'moveFolder'); +$app->post('/folder/:id/move/:folderid', 'moveFolder'); $app->delete('/folder/:id', 'deleteFolder'); $app->get('/folder/:id/children', 'getFolderChildren'); $app->get('/folder/:id/parent', 'getFolderParent'); $app->get('/folder/:id/path', 'getFolderPath'); $app->get('/folder/:id/attributes', 'getFolderAttributes'); $app->post('/folder/:id/createfolder', 'createFolder'); -$app->put('/folder/:id/document', 'uploadDocument'); +$app->put('/folder/:id/document', 'uploadDocumentPut'); +$app->post('/folder/:id/document', 'uploadDocument'); $app->get('/document/:id', 'getDocument'); $app->post('/document/:id/attachment', 'uploadDocumentFile'); $app->delete('/document/:id', 'deleteDocument'); @@ -1568,6 +1670,7 @@ $app->put('/folder/:id/access/clear', 'clearFolderAccessList'); $app->get('/categories', 'getCategories'); $app->delete('/categories/:id', 'deleteCategory'); $app->post('/categories', 'addCategory'); +$app->put('/categories/:id/name', 'changeCategoryName'); $app->run(); ?> From a534c3dd3f6907d65d5bf5e607886d911f97f342 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 21 Dec 2017 15:15:59 +0100 Subject: [PATCH 16/17] remove old code --- restapi/index.php | 197 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 145 insertions(+), 52 deletions(-) diff --git a/restapi/index.php b/restapi/index.php index 24415cbdc..1b7d7c424 100644 --- a/restapi/index.php +++ b/restapi/index.php @@ -5,12 +5,6 @@ include("../inc/inc.Settings.php"); include("../inc/inc.Extension.php"); include("../inc/inc.Init.php"); include("../inc/inc.DBInit.php"); -//require_once "SeedDMS/Core.php"; -require_once "SeedDMS/Preview.php"; - -//$db = new SeedDMS_Core_DatabaseAccess($settings->_dbDriver, $settings->_dbHostname, $settings->_dbUser, $settings->_dbPass, $settings->_dbDatabase); -//$db->connect() or die ("Could not connect to db-server \"" . $settings->_dbHostname . "\""); -//$dms = new SeedDMS_Core_DMS($db, $settings->_contentDir.$settings->_contentOffsetDir); if(USE_PHP_SESSION) { session_start(); @@ -55,24 +49,62 @@ if(USE_PHP_SESSION) { } } - -#require 'Slim/Slim.php'; require "vendor/autoload.php"; -#\Slim\Slim::registerAutoloader(); function __getLatestVersionData($lc) { /* {{{ */ $document = $lc->getDocument(); - return array( + $data = array( 'type'=>'document', - 'id'=>$document->getId(), - 'date'=>$document->getDate(), + 'id'=>(int)$document->getId(), + 'date'=>date('Y-m-d H:i:s', $document->getDate()), 'name'=>$document->getName(), + 'comment'=>$document->getComment(), + 'keywords'=>$document->getKeywords(), 'mimetype'=>$lc->getMimeType(), 'version'=>$lc->getVersion(), 'size'=>$lc->getFileSize(), - 'comment'=>$document->getComment(), - 'keywords'=>$document->getKeywords(), ); + $cats = $document->getCategories(); + if($cats) { + $c = array(); + foreach($cats as $cat) { + $c[] = array('id'=>(int)$cat->getID(), 'name'=>$cat->getName()); + } + $data['categories'] = $c; + } + $attributes = $document->getAttributes(); + if($attributes) { + $attrvalues = array(); + foreach($attributes as $attrdefid=>$attribute) + $attrvalues[] = array('id'=>(int)$attrdefid, 'value'=>$attribute->getValue()); + $data['attributes'] = $attrvalues; + } + $attributes = $lc->getAttributes(); + if($attributes) { + $attrvalues = array(); + foreach($attributes as $attrdefid=>$attribute) + $attrvalues[] = array('id'=>(int)$attrdefid, 'value'=>$attribute->getValue()); + $data['version-attributes'] = $attrvalues; + } + return $data; +} /* }}} */ + +function __getFolderData($folder) { /* {{{ */ + $data = array( + 'type'=>'folder', + 'id'=>$folder->getID(), + 'name'=>$folder->getName(), + 'comment'=>$folder->getComment(), + 'date'=>date('Y-m-d H:i:s', $folder->getDate()), + ); + $attributes = $folder->getAttributes(); + if($attributes) { + $attrvalues = array(); + foreach($attributes as $attrdefid=>$attribute) + $attrvalues[] = array('id'=>(int)$attrdefid, 'value'=>$attribute->getValue()); + $data['attributes'] = $attrvalues; + } + return $data; } /* }}} */ function doLogin() { /* {{{ */ @@ -150,6 +182,7 @@ function setFullName() { /* {{{ */ } $userobj->setFullName($app->request()->put('fullname')); + $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$userobj->getFullName())); } /* }}} */ @@ -163,6 +196,7 @@ function setEmail($id) { /* {{{ */ } $userobj->setEmail($app->request()->put('fullname')); + $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$userid)); } /* }}} */ @@ -200,11 +234,8 @@ function getFolder($id = null) { /* {{{ */ } if($folder) { if($folder->getAccessMode($userobj) >= M_READ) { + $data = __getFolderData($folder); $app->response()->header('Content-Type', 'application/json'); - $data = array( - 'id'=>$folder->getID(), - 'name'=>$folder->getName() - ); echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); } else { $app->response()->status(404); @@ -217,20 +248,24 @@ function getFolder($id = null) { /* {{{ */ function getFolderParent($id) { /* {{{ */ global $app, $dms, $userobj; if($id == 0) { + $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>true, 'message'=>'id is 0', 'data'=>'')); return; } $root = $dms->getRootFolder(); if($root->getId() == $id) { + $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>true, 'message'=>'id is root folder', 'data'=>'')); return; } $folder = $dms->getFolder($id); $parent = $folder->getParent(); if($parent) { - $rec = array('type'=>'folder', 'id'=>$parent->getId(), 'name'=>$parent->getName()); + $rec = __getFolderData($parent); + $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$rec)); } else { + $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>false, 'message'=>'', 'data'=>'')); } } /* }}} */ @@ -238,6 +273,7 @@ function getFolderParent($id) { /* {{{ */ function getFolderPath($id) { /* {{{ */ global $app, $dms, $userobj; if($id == 0) { + $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>true, 'message'=>'id is 0', 'data'=>'')); return; } @@ -248,6 +284,7 @@ function getFolderPath($id) { /* {{{ */ foreach($path as $element) { $data[] = array('id'=>$element->getId(), 'name'=>$element->getName()); } + $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); } /* }}} */ @@ -278,7 +315,7 @@ function getFolderChildren($id) { /* {{{ */ global $app, $dms, $userobj; if($id == 0) { $folder = $dms->getRootFolder(); - $recs = array(array('type'=>'folder', 'id'=>$folder->getId(), 'name'=>$folder->getName())); + $recs = array(__getFolderData($folder)); $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$recs)); } else { @@ -289,13 +326,7 @@ function getFolderChildren($id) { /* {{{ */ $subfolders = $folder->getSubFolders(); $subfolders = SeedDMS_Core_DMS::filterAccess($subfolders, $userobj, M_READ); foreach($subfolders as $subfolder) { - $recs[] = array( - 'type'=>'folder', - 'id'=>$subfolder->getId(), - 'name'=>$subfolder->getName(), - 'comment'=>$subfolder->getComment(), - 'date'=>$subfolder->getDate(), - ); + $recs[] = __getFolderData($subfolder); } $documents = $folder->getDocuments(); $documents = SeedDMS_Core_DMS::filterAccess($documents, $userobj, M_READ); @@ -327,6 +358,7 @@ function createFolder($id) { /* {{{ */ } if($id == 0) { + $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>true, 'message'=>'id is 0', 'data'=>'')); return; } @@ -347,14 +379,18 @@ function createFolder($id) { /* {{{ */ if($folder = $parent->addSubFolder($name, $comment, $userobj, 0, $newattrs)) { $rec = array('id'=>$folder->getId(), 'name'=>$folder->getName(), 'comment'=>$folder->getComment()); + $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$rec)); } else { + $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>false, 'message'=>'', 'data'=>'')); } } else { + $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>false, 'message'=>'', 'data'=>'')); } } else { + $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>false, 'message'=>'', 'data'=>'')); } } /* }}} */ @@ -408,6 +444,7 @@ function deleteFolder($id) { /* {{{ */ } if($id == 0) { + $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>true, 'message'=>'id is 0', 'data'=>'')); return; } @@ -441,6 +478,7 @@ function uploadDocument($id) { /* {{{ */ } if($id == 0) { + $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>true, 'message'=>'id is 0', 'data'=>'')); return; } @@ -505,6 +543,7 @@ function uploadDocumentPut($id) { /* {{{ */ } if($id == 0) { + $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>true, 'message'=>'id is 0', 'data'=>'')); return; } @@ -553,6 +592,7 @@ function uploadDocumentFile($documentId) { /* {{{ */ } if($documentId == 0) { + $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>true, 'message'=>'id is 0', 'data'=>'')); return; } @@ -852,6 +892,7 @@ function getDocumentAttributes($id) { /* {{{ */ function getDocumentPreview($id, $version=0, $width=0) { /* {{{ */ global $app, $dms, $userobj, $settings; + require_once "SeedDMS/Preview.php"; $document = $dms->getDocument($id); if($document) { @@ -989,13 +1030,7 @@ function doSearch() { /* {{{ */ } } elseif(get_class($entry) == 'SeedDMS_Core_Folder') { $folder = $entry; - $recs[] = array( - 'type'=>'folder', - 'id'=>$folder->getId(), - 'name'=>$folder->getName(), - 'comment'=>$folder->getComment(), - 'date'=>$folder->getDate(), - ); + $recs[] = __getFolderData($folder); } } $app->response()->header('Content-Type', 'application/json'); @@ -1044,13 +1079,7 @@ function doSearchByAttr() { /* {{{ */ } } elseif(get_class($entry) == 'SeedDMS_Core_Folder') { $folder = $entry; - $recs[] = array( - 'type'=>'folder', - 'id'=>$folder->getId(), - 'name'=>$folder->getName(), - 'comment'=>$folder->getComment(), - 'date'=>$folder->getDate(), - ); + $recs[] = __getFolderData($folder); } } $app->response()->header('Content-Type', 'application/json'); @@ -1310,6 +1339,7 @@ function changeGroupMembership($id, $operationType) { /* {{{ */ { $message = 'Could not remove user from group.'; } + $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>false, 'message'=>'Something went wrong. ' . $message, 'data'=>'')); return; } @@ -1487,6 +1517,7 @@ function changeFolderAccess($id, $operationType, $userOrGroup) { /* {{{ */ { $message = 'Could not remove user/group access from this folder.'; } + $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>false, 'message'=>'Something went wrong. ' . $message, 'data'=>'')); return; } @@ -1496,11 +1527,11 @@ function changeFolderAccess($id, $operationType, $userOrGroup) { /* {{{ */ echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); } /* }}} */ - function getCategories() { /* {{{ */ global $app, $dms, $userobj; $categories = $dms->getDocumentCategories(); + $data = []; foreach($categories as $category) $data[] = ['id' => $category->getId(), 'name' => $category->getName()]; @@ -1513,16 +1544,22 @@ function addCategory() { /* {{{ */ checkIfAdmin(); $category = $app->request()->params("category"); - if ($category == null) - { + if ($category == null) { + $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>false, 'message'=>'Need a category.', 'data'=>'')); return; } - $data = $dms->addDocumentCategory($category); + $catobj = $dms->getDocumentCategoryByName($category); + if($catobj) { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'Category already exists', 'data'=>'')); + } else { + $data = $dms->addDocumentCategory($category); - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); + } } /* }}} */ function deleteCategory($id) { /* {{{ */ @@ -1556,7 +1593,7 @@ function changeCategoryName($id) { /* {{{ */ $newname = $app->request()->put('name'); - $category = null; + $category = null; if(is_numeric($id)) $category = $dms->getDocumentCategory($id); @@ -1580,6 +1617,61 @@ function changeCategoryName($id) { /* {{{ */ return; } /* }}} */ +function getAttributeDefinitions() { /* {{{ */ + global $app, $dms, $userobj; + + $attrdefs = $dms->getAllAttributeDefinitions(); + $data = []; + foreach($attrdefs as $attrdef) + $data[] = ['id' => (int)$attrdef->getId(), 'name' => $attrdef->getName(), 'type'=>(int)$attrdef->getType(), 'objtype'=>(int)$attrdef->getObjType(), 'min'=>(int)$attrdef->getMinValues(), 'max'=>(int)$attrdef->getMaxValues(), 'multiple'=>$attrdef->getMultipleValues()?true:false, 'valueset'=>$attrdef->getValueSetAsArray()]; + + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); +} /* }}} */ + +/** + * Updates the name of an existing attribute definition + * + * @param $id The user name or numerical identifier + */ +function changeAttributeDefinitionName($id) { /* {{{ */ + global $app, $dms, $userobj; + + checkIfAdmin(); + + if ($app->request()->put('name') == null) + { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'You must PUT a new name', 'data'=>'')); + return; + } + + $newname = $app->request()->put('name'); + + $attrdef = null; + if(is_numeric($id)) + $attrdef = $dms->getAttributeDefinition($id); + + /** + * Category not found + */ + if (!$attrdef) { + $app->response()->status(404); + return; + } + + if (!$attrdef->setName($newname)) { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'', 'data'=>'Could not change name.')); + return; + } + + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>true, 'message'=>'', 'data'=>'')); + + return; +} /* }}} */ + function clearFolderAccessList($id) { /* {{{ */ global $app, $dms, $userobj; checkIfAdmin(); @@ -1601,19 +1693,18 @@ function clearFolderAccessList($id) { /* {{{ */ } /* }}} */ //$app = new Slim(array('mode'=>'development', '_session.handler'=>null)); -$app = new \Slim\Slim(array('mode'=>'development', '_session.handler'=>null)); +$app = new \Slim\Slim(array('mode'=>'production', '_session.handler'=>null)); $app->configureMode('production', function () use ($app) { $app->config(array( - 'log.enable' => true, - 'log.path' => '/tmp/', + 'log.enable' => false, 'debug' => false )); }); $app->configureMode('development', function () use ($app) { $app->config(array( - 'log.enable' => false, + 'log.enable' => true, 'debug' => true )); }); @@ -1671,6 +1762,8 @@ $app->get('/categories', 'getCategories'); $app->delete('/categories/:id', 'deleteCategory'); $app->post('/categories', 'addCategory'); $app->put('/categories/:id/name', 'changeCategoryName'); +$app->get('/attributedefinitions', 'getAttributeDefinitions'); +$app->put('/attributedefinitions/:id/name', 'changeAttributeDefinitionName'); $app->run(); ?> From a047e8af618986c932aa37cd6282d6b503fc421f Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 21 Dec 2017 15:23:59 +0100 Subject: [PATCH 17/17] major update of dutch --- languages/nl_NL/lang.inc | 580 ++++++++++++++++++++------------------- 1 file changed, 299 insertions(+), 281 deletions(-) diff --git a/languages/nl_NL/lang.inc b/languages/nl_NL/lang.inc index c6f3c40da..833995878 100644 --- a/languages/nl_NL/lang.inc +++ b/languages/nl_NL/lang.inc @@ -19,22 +19,22 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (745), gijsbertush (333), pepijn (45), reinoutdijkstra@hotmail.com (270) +// Translators: Admin (745), gijsbertush (610), pepijn (45), reinoutdijkstra@hotmail.com (270) $text = array( -'2_factor_auth' => 'Twee-factor-authorisatie', -'2_factor_auth_info' => 'Info 2-factor-authorisatie', -'2_fact_auth_secret' => 'Toegangscode 2-factor-authorisatie', -'accept' => 'Accept', +'2_factor_auth' => '2-factor-authenticatie', +'2_factor_auth_info' => 'Dit systeem werkt met 2-factor-authenticatie. U heeft de Google Authenticator nodig op uf mobiele telfoon. Hieronder staan 2 QR-codes. De rechter is uw huidige geheime code. Met de linker kunt u een nieuwe geheime code instellen. Denk erom de nieuwe code opnieuw te scannen met Googke Authenticator.', +'2_fact_auth_secret' => 'Toegangscode 2-factor-authenticatie', +'accept' => 'Accepteren', 'access_control' => 'Toegangscontrole', -'access_control_is_off' => 'Toegansgscontrole staat uit', +'access_control_is_off' => 'Toegangscontrole staat uit', 'access_denied' => 'Geen toegang.', 'access_inheritance' => 'Toegang overgeërfd', -'access_mode' => 'Toegang modus', +'access_mode' => 'Toegangsmodus', 'access_mode_all' => 'Alle machtigingen', 'access_mode_none' => 'Geen toegang', -'access_mode_read' => 'Lees rechten', -'access_mode_readwrite' => 'Lees en Schrijf rechten', +'access_mode_read' => 'Leesrechten', +'access_mode_readwrite' => 'Lees- en Schrijf rechten', 'access_permission_changed_email' => 'Machtigingen gewijzigd', 'access_permission_changed_email_body' => 'Toestemming veranderd Document: [naam] @@ -47,14 +47,14 @@ URL: [url]', 'actions' => 'Acties', 'action_approve' => 'Goedkeuren', 'action_complete' => 'Compleet', -'action_is_complete' => 'Is compleet', -'action_is_not_complete' => 'Is niet compleet', +'action_is_complete' => 'is compleet', +'action_is_not_complete' => 'is niet compleet', 'action_reject' => 'Geweigerd', 'action_review' => 'Beoordelen', -'action_revise' => 'Herzie', +'action_revise' => 'Nog herzien', 'add' => 'Toevoegen', 'add_approval' => 'Verzend [Goedkeuring]', -'add_attrdefgroup' => '', +'add_attrdefgroup' => 'Voeg een nieuwe attribuutgroep toe', 'add_document' => 'Document toevoegen', 'add_document_link' => 'Link toevoegen', 'add_document_notify' => 'Notificatie toekennen', @@ -88,20 +88,20 @@ URL: [url]', 'already_subscribed' => 'Al ingetekend', 'and' => 'en', 'apply' => 'Toepassen', -'approvals_accepted' => '', -'approvals_and_reviews_accepted' => '', -'approvals_and_reviews_not_touched' => '', -'approvals_and_reviews_rejected' => '', -'approvals_not_touched' => '', -'approvals_rejected' => '', -'approvals_without_group' => '', -'approvals_without_user' => '', -'approval_deletion_email' => 'Goedkeuring verzoek verwijderd', -'approval_deletion_email_body' => 'Vraag om goedkeuring verwijderd +'approvals_accepted' => '[no_approvals] goedkeuringen', +'approvals_and_reviews_accepted' => '[no_approvals] goedkeuringen en [no_reviews] geaccepteerde reviews', +'approvals_and_reviews_not_touched' => '[no_approvals] goedkeuringen [no_reviews] reviews nog niet behandeld', +'approvals_and_reviews_rejected' => '[no_approvals] goedkeuringen en [no_reviews] reviews afgekeurd', +'approvals_not_touched' => '[no_approvals] goedkeuringen nog niet behandeld', +'approvals_rejected' => '[no_approvals] goedkeuringen afgekeurd', +'approvals_without_group' => 'Goedkeuringen zonder groep', +'approvals_without_user' => 'Goedkeuringen zonder gebruiker', +'approval_deletion_email' => 'Goedkeuringsverzoek verwijderd', +'approval_deletion_email_body' => 'Approval request deleted Document: [name] -Versie: [version] -Map: [folder_path] -Gebruiker: [username] +Version: [version] +Parent folder: [folder_path] +User: [username] URL: [url]', 'approval_deletion_email_subject' => '[sitename]: [name] - Verzoek om goedkeuring verwijderd', 'approval_file' => 'Goedkeuring bestand', @@ -131,12 +131,12 @@ URL: [url]', 'assign_approvers' => 'Aangewezen [Goedkeurders]', 'assign_reviewers' => 'Aangewezen [Controleurs]', 'assign_user_property_to' => 'Wijs gebruikers machtigingen toe aan', -'assumed_released' => 'aangenomen status: Gepubliceerd', -'attrdefgroup_management' => '', -'attrdefgrp_show_detail' => '', -'attrdefgrp_show_list' => '', -'attrdefgrp_show_search' => '', -'attrdefgrp_show_searchlist' => '', +'assumed_released' => 'vermoedelijke status: Gepubliceerd', +'attrdefgroup_management' => 'Beheer attribuut-definiities', +'attrdefgrp_show_detail' => 'Details Beheer attribuut-definiities', +'attrdefgrp_show_list' => 'Lijst van attribuut-definiities', +'attrdefgrp_show_search' => 'Zoeken naar attribuut-definiities', +'attrdefgrp_show_searchlist' => 'Lijst van gezochte attribuut-definiities', 'attrdef_exists' => 'Kenmerk definitie bestaat al', 'attrdef_info' => 'Kenmerk info', 'attrdef_in_use' => 'Kenmerk definitie nog in gebruikt', @@ -171,18 +171,18 @@ URL: [url]', 'attribute_changed_email_subject' => '[sitename]: [name] - Attribuut gewijzigd', 'attribute_count' => 'Aantal maal gebruikt', 'attribute_value' => 'Waarde van het attribuut', -'attribute_value_not_in_valueset' => '', -'attr_malformed_boolean' => '', -'attr_malformed_date' => '', +'attribute_value_not_in_valueset' => 'Waarde van attribuut bestaat niet', +'attr_malformed_boolean' => 'Foute vormgeving boolean', +'attr_malformed_date' => 'Foute vormgeving datum', 'attr_malformed_email' => 'Foute vormgeving email', -'attr_malformed_float' => '', -'attr_malformed_int' => '', -'attr_malformed_url' => 'Foute url', +'attr_malformed_float' => 'Foute vormgeving getal', +'attr_malformed_int' => 'Foute vormgeving geheel getal', +'attr_malformed_url' => 'Foute vormgeving url', 'attr_max_values' => 'attribuut: maximale waarde', 'attr_min_values' => 'attribuut: minimale waarde', -'attr_not_in_valueset' => '', +'attr_not_in_valueset' => 'Attribuut bestaat niet', 'attr_no_regex_match' => 'De waarde van het attribuut komt niet overeen met de veelgebruikte uitdrukking (regular expression)', -'attr_validation_error' => '', +'attr_validation_error' => 'Attribuut niet geldig', 'at_least_n_users_of_group' => 'Minimaal [number_of_users] gebruikers van [group]', 'august' => 'augustus', 'authentication' => 'Authentificatie', @@ -235,11 +235,11 @@ URL: [url]', 'checkedout_file_has_disappeared' => 'File is onvindbaar', 'checkedout_file_is_unchanged' => 'Checkout-document ongewijzigd', 'checkin_document' => 'Veranderd document', -'checkoutpath_does_not_exist' => '', +'checkoutpath_does_not_exist' => 'Checkout-pad bestaat niet', 'checkout_document' => 'Checkout-document', 'checkout_is_disabled' => 'Checkout is niet mogelijk', -'choose_attrdef' => 'Selecteer een kenmerk definitie', -'choose_attrdefgroup' => '', +'choose_attrdef' => 'Kies een kenmerkdefinitie', +'choose_attrdefgroup' => 'Kies een kenmerkdefinite-groep', 'choose_category' => 'Selecteer a.u.b.', 'choose_group' => 'Selecteer Groep', 'choose_role' => 'Selecteer een rol', @@ -251,17 +251,17 @@ URL: [url]', 'choose_workflow' => 'Kies workflow', 'choose_workflow_action' => 'Kies workflow actie', 'choose_workflow_state' => 'kiest workflowstatus', -'class_name' => '', +'class_name' => 'naam vd Klasse', 'clear_cache' => 'Cache leegmaken', 'clear_clipboard' => 'Vrijgeven klembord', -'clear_password' => '', +'clear_password' => 'Verwijder het wachtwoord', 'clipboard' => 'Klembord', 'close' => 'Sluiten', -'command' => '', +'command' => 'Commando', 'comment' => 'Commentaar', 'comment_changed_email' => 'Gewijzigde email', 'comment_for_current_version' => 'Versie van het commentaar', -'confirm_clear_cache' => '', +'confirm_clear_cache' => 'Ja, ik wil de cache opschonen!', 'confirm_create_fulltext_index' => 'Ja, Ik wil de volledigetekst index opnieuw maken!', 'confirm_move_document' => 'Bevestig verplaatsing van document', 'confirm_move_folder' => 'Bevestig de verplaatsing van de map', @@ -278,16 +278,16 @@ URL: [url]', 'confirm_rm_transmittal' => 'Bestig de verwijdering van de verzending', 'confirm_rm_transmittalitem' => 'Bevestig te verzenden item', 'confirm_rm_user' => 'Weet U zeker dat U de Gebruiker "[username]" wilt verwijderen?
Let op: deze handeling kan niet ongedaan worden gemaakt.', -'confirm_rm_user_from_processes' => '', +'confirm_rm_user_from_processes' => 'Weet U zeker dat U de Gebruiker "[username]" wilt verwijderen uit dit proces?
Let op: deze handeling kan niet ongedaan worden gemaakt.', 'confirm_rm_version' => 'Weet U zeker dat U deze versie van het document "[documentname]" wilt verwijderen?
Pas op: deze handeling kan niet ongedaan worden gemaakt.', -'confirm_transfer_objects' => '', +'confirm_transfer_objects' => 'Weet U zeker dat U de documenten, mappen etc. van gebruiker "[username]" wilt overzetten?
Let op: deze handeling kan niet ongedaan worden gemaakt.', 'confirm_update_transmittalitem' => 'Bevestig verandering van te verzenden item', 'content' => 'Welkomstpagina', 'continue' => 'Doorgaan', 'converter_new_cmd' => 'Wijziging: nieuw commando', 'converter_new_mimetype' => 'Wijziging: nieuw mimetype', 'copied_to_checkout_as' => 'Gekopieerd naar checkout als:', -'create_download_link' => '', +'create_download_link' => 'Maak een download-link', 'create_fulltext_index' => 'Creeer volledige tekst index', 'create_fulltext_index_warning' => 'U staat op het punt de volledigetekst opnieuw te indexeren. Dit kan behoorlijk veel tijd en snelheid vergen van het systeem. Als u zeker bent om opnieuw te indexeren, bevestig deze actie.', 'creation_date' => 'Aangemaakt', @@ -300,7 +300,7 @@ URL: [url]', 'databasesearch' => 'Zoek in Database', 'date' => 'Datum', 'days' => 'Dagen', -'debug' => '', +'debug' => 'debug', 'december' => 'december', 'default_access' => 'Standaard toegang', 'default_keywords' => 'Beschikbare sleutelwoorden', @@ -311,10 +311,10 @@ URL: [url]', 'de_DE' => 'Duits', 'disclaimer' => 'Dit is een beveiligde omgeving. Gebruik is alleen toegestaan voor geautoriseerde leden. Ongeautoriseerde toegang kan worden bestraft overeenkomstig (inter)nationale wetgeving.', 'discspace' => 'Schijfruimte', -'docs_in_reception_no_access' => '', -'docs_in_revision_no_access' => '', +'docs_in_reception_no_access' => 'Documenten zonder toegang ontvanger', +'docs_in_revision_no_access' => 'Documenten in revisie zonder toegang ontvanger', 'document' => 'Document', -'documentcontent' => '', +'documentcontent' => 'Documentinhoud', 'documents' => 'Documenten', 'documents_checked_out_by_you' => 'Door u in behandeling genomen documenten', 'documents_expired' => 'Verlopen documenten', @@ -328,10 +328,10 @@ URL: [url]', 'documents_to_review' => 'Documenten die wachten op uw controle', 'documents_to_revise' => 'Te reviseren documenten', 'documents_user_expiration' => '', -'documents_user_reception' => '', +'documents_user_reception' => 'Documenten wachten op bestemming', 'documents_user_rejected' => 'documenten niet geaccepteerd door gebruiker', 'documents_user_requiring_attention' => 'Eigen documenten die (nog) aandacht behoeven', -'documents_with_notification' => '', +'documents_with_notification' => 'Documenten met notificatie', 'document_already_checkedout' => 'Al in behandeling genomen documenten', 'document_already_locked' => 'Dit document is al geblokkeerd', 'document_comment_changed_email' => 'Commentaar gewijzigd', @@ -398,9 +398,16 @@ URL: [url]', 'does_not_expire' => 'Verloopt niet', 'does_not_inherit_access_msg' => 'Erft toegang', 'download' => 'Download', -'download_links' => '', -'download_link_email_body' => '', -'download_link_email_subject' => '', +'download_links' => 'Download-links', +'download_link_email_body' => 'Klik op de link hieronder, dan begint de download vanvversie [version] van het document +\'[docname]\'. + +[url] + +De link is geldig tot [valid]. + +[comment]', +'download_link_email_subject' => 'Onderwerp', 'do_object_repair' => 'Repareer alle mappen en documenten.', 'do_object_setchecksum' => 'Set checksum', 'do_object_setfilesize' => 'Voer bestandgrootte in', @@ -409,16 +416,16 @@ URL: [url]', 'draft_pending_approval' => 'Draft - in afwachting van goedkeuring', 'draft_pending_review' => 'Draft - in afwachting van controle', 'drag_icon_here' => 'Versleep icoon van de folder of bestand hier!', -'dropfolderdir_missing' => '', -'dropfolder_file' => 'Bestand van dropfolder', -'dropfolder_folder' => 'Map van de drop-map', +'dropfolderdir_missing' => 'Uw persoonlijke map om files te droppen (dropfolder) bestaat niet op de server! Vraag de administrator om deze aan te maken.', +'dropfolder_file' => 'Bestand in dropfolder', +'dropfolder_folder' => 'Map in dropfolder', 'dropupload' => 'Snel toevoegen', -'drop_files_here' => 'Sleep bestanden hierheen!', -'dump_creation' => 'DB dump aanmaken', +'drop_files_here' => 'Sleep bestanden hierheen', +'dump_creation' => 'DB-dump aanmaken', 'dump_creation_warning' => 'M.b.v. deze functie maakt U een DB dump file. het bestand wordt opgeslagen in uw data-map op de Server', 'dump_list' => 'Bestaande dump bestanden', 'dump_remove' => 'Verwijder dump bestand', -'duplicates' => 'Duplicaat', +'duplicates' => 'Dubbelen', 'duplicate_content' => 'Dubbele inhoud', 'edit' => 'Wijzigen', 'edit_attributes' => 'Bewerk attributen', @@ -429,10 +436,10 @@ URL: [url]', 'edit_document_props' => 'Wijzig document', 'edit_event' => 'Activiteit wijzigen', 'edit_existing_access' => 'Wijzig toegangslijst', -'edit_existing_attribute_groups' => '', +'edit_existing_attribute_groups' => 'Bewerk attribuutgroepen', 'edit_existing_notify' => 'Wijzig Notificatie lijst', 'edit_folder_access' => 'Wijzig toegang', -'edit_folder_attrdefgrp' => '', +'edit_folder_attrdefgrp' => 'Bewerk de groep van attributen', 'edit_folder_notify' => 'Map Notificatie Lijst', 'edit_folder_props' => 'Wijzig Map eigenschappen', 'edit_group' => 'Wijzig Groep', @@ -440,14 +447,14 @@ URL: [url]', 'edit_transmittal_props' => 'Opmerkingen bij verzending', 'edit_user' => 'Wijzig gebruiker', 'edit_user_details' => 'Wijzig gebruiker Details', -'edit_version' => '', -'el_GR' => 'Griek', +'edit_version' => 'Bewerk versie', +'el_GR' => 'Grieks', 'email' => 'E-mail', 'email_error_title' => 'Geen email ingevoerd', 'email_footer' => 'U kunt altijd uw e-mail instellingen wijzigen via de \'Mijn Account\' opties', 'email_header' => 'Dit is een automatisch gegenereerd bericht van de DMS server.', 'email_not_given' => 'Voer aub een geldig email adres in.', -'empty_attribute_group_list' => '', +'empty_attribute_group_list' => 'Lege lijst van attributen', 'empty_folder_list' => 'Geen documenten of mappen', 'empty_notify_list' => 'Geen gegevens', 'en_GB' => 'Engels (GB)', @@ -455,33 +462,33 @@ URL: [url]', 'error' => 'Fout', 'error_add_aro' => 'Verzoek om toegang toegevoegd', 'error_add_permission' => 'Voeg permissie toe', -'error_cleared_cache' => '', -'error_importfs' => '', +'error_cleared_cache' => 'Fout bij het leegmaken van de cache', +'error_importfs' => 'Fout bij het importeren van form file systeem', 'error_no_document_selected' => 'Geen document geselecteerd', 'error_no_folder_selected' => 'Geen map geselecteerd', 'error_occured' => 'Er is een fout opgetreden', -'error_remove_document' => '', -'error_remove_folder' => '', +'error_remove_document' => 'Fout bij het verwijderen van document', +'error_remove_folder' => 'Fout bij het verwijderen van map', 'error_remove_permission' => 'Verwijder permissie', 'error_toogle_permission' => 'Wijzig permissie', 'error_transfer_document' => '', 'es_ES' => 'Spaans', -'event_details' => 'Activiteit details', -'exclude_items' => 'Sluit iems uit', +'event_details' => 'Activiteit-details', +'exclude_items' => 'Sluit iets uit', 'expired' => 'Verlopen', -'expired_at_date' => '', +'expired_at_date' => 'Verloopdatum', 'expired_documents' => '', 'expires' => 'Verloopt', 'expire_by_date' => 'Vervaldatum', -'expire_in_1d' => '', -'expire_in_1h' => '', +'expire_in_1d' => 'Vervalt binnen 1 dag', +'expire_in_1h' => 'Vervalt binnen 1 uur', 'expire_in_1m' => 'Vervalt binnen 1 maand', 'expire_in_1w' => 'Vervalt binnen 1 week', 'expire_in_1y' => 'Vervalt binnen 1 jaar', -'expire_in_2h' => '', +'expire_in_2h' => 'Vervalt binnen 2 uur', 'expire_in_2y' => 'Vervalt binnen 2 jaar', -'expire_today' => '', -'expire_tomorrow' => '', +'expire_today' => 'Vervalt vandaag', +'expire_tomorrow' => 'Vervalt morgen', 'expiry_changed_email' => 'Verloopdatum gewijzigd', 'expiry_changed_email_body' => 'Vervaldatum gewijzigd Document: [name] @@ -503,7 +510,7 @@ URL: [url]', 'folder' => 'Map', 'folders' => 'Mappen', 'folders_and_documents_statistic' => 'Inhoudsopgave', -'folders_with_notification' => '', +'folders_with_notification' => 'Mappen met notificatie', 'folder_comment_changed_email' => 'Commentaar gewijzigd', 'folder_comment_changed_email_body' => 'Commentaar gewijzigd Map: [name] @@ -545,16 +552,16 @@ URL: [url]', 'fr_FR' => 'Frans', 'fullsearch' => 'Zoek in volledige tekst', 'fullsearch_hint' => 'Volledige tekst index', -'fulltextsearch_disabled' => '', +'fulltextsearch_disabled' => 'Fulltext-zoeken uitgeschakeld', 'fulltext_converters' => 'Index document conversie', 'fulltext_info' => 'Volledige tekst index info', -'global_attributedefinitiongroups' => '', +'global_attributedefinitiongroups' => 'Kennmerk-definitie groepen', 'global_attributedefinitions' => 'Kenmerk definities', 'global_default_keywords' => 'Algemene sleutelwoorden', -'global_document_categories' => 'Categorieen', +'global_document_categories' => 'Categorieën', 'global_workflows' => 'Workflows', -'global_workflow_actions' => 'Workflow acties', -'global_workflow_states' => 'Workflow status', +'global_workflow_actions' => 'Workflow-acties', +'global_workflow_states' => 'Workflow-status', 'group' => 'Groep', 'groups' => 'Groepen', 'group_approval_summary' => 'Groep [Goedkeuring] samenvatting', @@ -566,36 +573,36 @@ URL: [url]', 'group_review_summary' => 'Groep Beoordeling samenvatting', 'guest_login' => 'Login als Gast', 'guest_login_disabled' => 'Gast login is uitgeschakeld.', -'hash' => '', +'hash' => 'Hashcode', 'help' => 'Help', 'home_folder' => 'Thuismap', -'hook_name' => '', +'hook_name' => 'Naam vd hook', 'hourly' => 'Elk uur', -'hours' => 'uren', +'hours' => 'uur', 'hr_HR' => 'Kroatisch', -'human_readable' => 'Leesbaar Archief', +'human_readable' => 'Leesbaar archief', 'hu_HU' => 'Hongaars', 'id' => 'ID', 'identical_version' => 'Nieuwe versie is identiek aan de huidige versie', 'import' => 'Importeer', -'importfs' => '', +'importfs' => 'Importeer van bestandssysteem', 'import_fs' => 'Importeer van bestandssysteem', -'import_fs_warning' => 'Dit werkt alleen voor mappen in de drop-map. Alle mappen en bestanden worden recursief geimporteerd. Bestanden worden onmiddelijk vrijgegeven.', +'import_fs_warning' => 'Dit werkt alleen in de dropfolder. Mappen en bestanden worden recursief geïmporteerd. Bestanden worden direct ter beschikking gesteld.', 'include_content' => 'inclusief inhoud', 'include_documents' => 'Inclusief documenten', 'include_subdirectories' => 'Inclusief submappen', 'indexing_tasks_in_queue' => 'Indexerings taken in wachtrij', -'index_done' => '', -'index_error' => '', +'index_done' => 'Indexering gereed', +'index_error' => 'Fout bij indexering', 'index_folder' => 'Inhoud', -'index_pending' => '', -'index_waiting' => '', +'index_pending' => 'Indexering moet nog gebeuren', +'index_waiting' => 'Indexering wacht', 'individuals' => 'Individuen', 'indivіduals_in_groups' => 'Individuen in groepen', 'inherited' => 'overgeerfd', 'inherits_access_copy_msg' => 'Kopie lijst overerfde toegang', 'inherits_access_empty_msg' => 'Begin met lege toegangslijst', -'inherits_access_msg' => 'Toegang is (over/ge)erfd..', +'inherits_access_msg' => 'Toegang is (over/ge)erfd.', 'internal_error' => 'Interne fout', 'internal_error_exit' => 'Interne fout. Niet mogelijk om verzoek uit de voeren.', 'invalid_access_mode' => 'Foutmelding: verkeerde toegangsmode', @@ -604,7 +611,7 @@ URL: [url]', 'invalid_create_date_end' => 'Foutieve eind-datum voor het maken van een periode.', 'invalid_create_date_start' => 'Foutieve begin-datum voor het maken van een periode.', 'invalid_doc_id' => 'Foutief Document ID', -'invalid_dropfolder_folder' => '', +'invalid_dropfolder_folder' => 'Ongeldige dropfolder-map', 'invalid_expiration_date_end' => 'Foute expiratiedatum', 'invalid_expiration_date_start' => 'Foute startdatum', 'invalid_file_id' => 'Foutief Bestand ID', @@ -626,13 +633,13 @@ URL: [url]', 'is_hidden' => 'Afschermen van Gebruikerslijst', 'it_IT' => 'Italiaans', 'january' => 'januari', -'js_form_error' => '', -'js_form_errors' => '', -'js_invalid_email' => '', +'js_form_error' => 'Fout in JavaScript', +'js_form_errors' => 'Fouten in JavaScript', +'js_invalid_email' => 'Ongeldige email', 'js_no_approval_group' => 'Selecteer a.u.b. een Goedkeuring Groep', 'js_no_approval_status' => 'Selecteer a.u.b. een Goedkeuring Status', 'js_no_comment' => 'Er zijn geen commentaren', -'js_no_currentpwd' => '', +'js_no_currentpwd' => 'Geen geldig wachtwoord', 'js_no_email' => 'Voer uw e-mail adres in', 'js_no_file' => 'Selecteer een bestand', 'js_no_keywords' => 'Specificeer een aantal sleutelwoorden', @@ -646,8 +653,8 @@ URL: [url]', 'js_pwd_not_conf' => 'Wachtwoord en bevestigingswachtwoord zijn niet identiek', 'js_select_user' => 'Selecteer een Gebruiker', 'js_select_user_or_group' => 'Selecteer tenminste een Gebruiker of Groep', -'js_unequal_passwords' => '', -'july' => 'july', +'js_unequal_passwords' => 'Ongelijke wachtwoorden', +'july' => 'juli', 'june' => 'juni', 'keep' => 'Behouden', 'keep_doc_status' => 'Behoud status document', @@ -662,14 +669,14 @@ URL: [url]', 'librarydoc' => 'Bibliotheek', 'linked_documents' => 'Gerelateerde Documenten', 'linked_files' => 'Bijlagen', -'linked_to_current_version' => '', -'linked_to_document' => 'Gekoppeld aan document', -'linked_to_this_version' => '', +'linked_to_current_version' => 'Bijlagen bij huidige versie', +'linked_to_document' => 'Bijlage(n) bij document', +'linked_to_this_version' => 'Bijlage bij deze versie', 'link_alt_updatedocument' => 'Als u bestanden wilt uploaden groter dan het huidige maximum, gebruik aub de alternatieve upload pagina.', -'link_to_version' => '', -'list_access_rights' => 'Oplijsten toegangsrechten', -'list_contains_no_access_docs' => '', -'list_hooks' => '', +'link_to_version' => 'Bijlage(n) bij versie', +'list_access_rights' => 'Toegangsrechten', +'list_contains_no_access_docs' => 'Geen toegankelijke documenten', +'list_hooks' => 'Hooks', 'local_file' => 'Lokaal bestand', 'locked_by' => 'In gebruik door', 'lock_document' => 'Blokkeer', @@ -697,30 +704,30 @@ URL: [url]', 'march' => 'maart', 'max_upload_size' => 'Maximale upload omvang voor ieder bestand', 'may' => 'mei', -'menu_dropfolder' => '', +'menu_dropfolder' => 'Dropfolder', 'mimetype' => 'MIME Type', -'minutes' => 'Minuten', +'minutes' => 'minuten', 'misc' => 'Diversen', 'missing_checksum' => 'Controlesom ontbreekt', 'missing_file' => 'File ontbreekt', 'missing_filesize' => 'Bestandsgrootte ontbreekt', -'missing_reception' => '', +'missing_reception' => 'Ontvanger ontbreekt', 'missing_request_object' => 'Gevraagd object ontbreekt', 'missing_transition_user_group' => 'Gebruiker / groep ontbreekt voor de overdracht', -'monday' => 'Maandag', -'monday_abbr' => 'Ma', +'monday' => 'maandag', +'monday_abbr' => 'ma', 'monthly' => 'Maandelijks', -'month_view' => 'Maand Overzicht', +'month_view' => 'Maandoverzicht', 'move' => 'Verplaats', 'move_clipboard' => 'Verplaats klembord', 'move_document' => 'Verplaats document', -'move_folder' => 'Verplaats Map', +'move_folder' => 'Map verplaatsen', 'my_account' => 'Mijn Account', 'my_documents' => 'Mijn Documenten', 'my_transmittals' => 'Mijn zendingen', 'name' => 'Naam', 'needs_workflow_action' => 'Dit document vereist uw aandacht. Bekijk deze onder het tabblad workflows.', -'network_drive' => '', +'network_drive' => 'Networkdrive', 'never' => 'Nooit', 'new' => 'Nieuw', 'new_attrdef' => 'Voeg kenmerk definitie toe', @@ -780,7 +787,7 @@ URL: [url]', 'no_default_keywords' => 'Geen Sleutelwoorden beschikbaar', 'no_docs_checked_out' => 'Geen documenten in gebruik genomen', 'no_docs_locked' => 'Geen documenten in gebruik.', -'no_docs_rejected' => '', +'no_docs_rejected' => 'Geen documenten geweigerd', 'no_docs_to_approve' => 'Er zijn momenteel geen documenten die goedkeuring behoeven.', 'no_docs_to_look_at' => 'Geen documenten die aandacht behoeven.', 'no_docs_to_receipt' => 'Geen documenten te ontvangen', @@ -802,8 +809,8 @@ URL: [url]', 'no_version_modification' => 'Geen versiewijziging', 'no_workflow_available' => 'Geen workflow beschikbaar', 'objectcheck' => 'Map/Document controle', -'object_check_critical' => '', -'object_check_warning' => '', +'object_check_critical' => 'Ernstige fouten', +'object_check_warning' => 'Waarschuwingen', 'obsolete' => 'verouderd', 'october' => 'oktober', 'old' => 'Oude', @@ -850,36 +857,42 @@ Mocht u de komende minuten geen email ontvangen, probeer het dan nogmaals en con 'password_wrong' => 'Verkeerd wachtwoord', 'pdf_converters' => '', 'pending_approvals' => 'Wachten op goedkeuring', -'pending_receipt' => '', +'pending_receipt' => 'Wachten op ontvangs', 'pending_reviews' => 'Wachten op beoordeling', -'pending_revision' => '', +'pending_revision' => 'Wachten op herziening', 'pending_workflows' => 'Wachten op workflow', 'personal_default_keywords' => 'Persoonlijke sleutelwoorden', -'pl_PL' => 'Polen', +'pl_PL' => 'Pools', 'possible_substitutes' => 'Mogelijke alternatieven', -'preset_expires' => 'Standaard vervaltermijn', +'preset_expires' => 'Preset verloopt', 'preview' => 'Voorbeeld', 'preview_converters' => 'Converters', -'preview_images' => '', +'preview_images' => 'Voorbeelden', 'preview_markdown' => 'Voorbeeld in Markdown', 'preview_pdf' => '', 'preview_plain' => 'Voorbeeld in platte tekst', 'previous_state' => 'Vorige staat', 'previous_versions' => 'Vorige versies', -'process' => '', -'process_without_user_group' => '', +'process' => 'Proces', +'process_without_user_group' => 'Proces zonder gebruikersgroep', 'pt_BR' => 'Portugees (BR)', 'quota' => 'Quotum', 'quota_exceeded' => 'Uw data quotum is overschreden met [bytes].', 'quota_is_disabled' => 'Quota support is momenteel niet actief in de eigenschappen. Een user-quotum instellen zal geen effect hebben tot quota actief zijn', 'quota_warning' => 'Uw maximale datagebruik is overschreden met [bytes]. Gelieve documenten of eerdere versies te verwijderen.', -'receipts_accepted' => '', -'receipts_not_touched' => '', -'receipts_rejected' => '', -'receipts_without_group' => '', -'receipts_without_user' => '', -'receipt_deletion_email_body' => '', -'receipt_deletion_email_subject' => '', +'receipts_accepted' => '[no_receipts] ontvangen en geaccepteerd', +'receipts_not_touched' => '[no_receipts] ontvangen, nog niet behandeld', +'receipts_rejected' => '[no_receipts] ontvangen, geweigerd', +'receipts_without_group' => '[no_receipts] ontvangen, geen groep', +'receipts_without_user' => '[no_receipts] ontvangen, geen gebruiker', +'receipt_deletion_email_body' => 'Gebruiker is verwijderd uit de lijst van ontvangers +Document: [name] +Versie: [version] +Bovenliggende map: [folder_path] +Ontvanger: [recipient] +Gebruiker: [username] +URL: [url]', +'receipt_deletion_email_subject' => '[sitename]: [name] - Ontvanger verwijderd', 'receipt_log' => 'Log ontvangst', 'receipt_request_email_body' => 'Verzoek ontvangen Document: [name] @@ -890,13 +903,13 @@ URL: [url]', 'receipt_request_email_subject' => '[sitename]: [name] – Verzoek ontvangen', 'receipt_status' => 'Status ontvangst', 'receipt_summary' => 'Samenvatting', -'receipt_update_failed' => '', -'reception' => '', -'reception_acknowleged' => '', -'reception_noaction' => '', -'reception_rejected' => '', +'receipt_update_failed' => 'Update ontvangst mislukt', +'reception' => 'bestemming', +'reception_acknowleged' => 'bestemming OK', +'reception_noaction' => 'Geen actie', +'reception_rejected' => 'bestemming geweigerd', 'recipients' => 'Ontvangers', -'redraw' => '', +'redraw' => 'Nogmaals weergeven', 'refresh' => 'Verversen', 'rejected' => 'Afgewezen', 'released' => 'Gepubliceerd', @@ -917,7 +930,7 @@ Bovenliggende map: [folder_path] Gebruiker: [username] URL: [url]', 'removed_workflow_email_subject' => '[sitename]: [name] - Workflow verwijderd van document versie', -'removeFolderFromDropFolder' => 'Verwijder de map na de import', +'removeFolderFromDropFolder' => 'Map verwijderen uit Dropfilder', 'remove_marked_files' => 'Geselecteerde bestanden zijn verwijderd', 'repaired' => 'Gerepareerd', 'repairing_objects' => 'Documenten en mappen repareren.', @@ -931,7 +944,7 @@ Gebruiker: [username] URL: [url]', 'request_workflow_action_email_subject' => '[sitename]: [name] - Workflow – actie vereist', 'reset_checkout' => 'Beëindig het gebruik van het document', -'restrict_access' => '', +'restrict_access' => 'Toegang beperken', 'results_page' => 'Resultaten pagina', 'return_from_subworkflow' => 'Terug uit subworkflow', 'return_from_subworkflow_email_body' => 'Terug uit subworkflow @@ -947,11 +960,11 @@ URL: [url]', 'reviewers' => 'Beoordelaars', 'reviewer_already_assigned' => 'is reeds aangewezen als beoordelaar', 'reviewer_already_removed' => 'is reeds verwijderd uit het beoordelingsproces of heeft reeds een beoordeling uitgevoerd', -'reviews_accepted' => '', -'reviews_not_touched' => '', -'reviews_rejected' => '', -'reviews_without_group' => '', -'reviews_without_user' => '', +'reviews_accepted' => '[no_reviews] reviews geaccepteerd', +'reviews_not_touched' => '[no_reviews] reviews niet geopend', +'reviews_rejected' => '[no_reviews] reviews geweigerd', +'reviews_without_group' => 'reviews zonder groep', +'reviews_without_user' => 'reviews zonder gebruiker', 'review_deletion_email' => 'Beoordelingsverzoek verwijderd', 'review_deletion_email_body' => 'Beoordelingsverzoek verwijderd Document: [name] @@ -985,12 +998,12 @@ URL: [url]', 'review_update_failed' => 'Fout: bijwerken status beoordeling mislukt.', 'revise_document' => 'Document herzien', 'revise_document_on' => 'Volgende herziening van document op [date]', -'revisions_accepted' => '', -'revisions_not_touched' => '', -'revisions_pending' => '', -'revisions_rejected' => '', -'revisions_without_group' => '', -'revisions_without_user' => '', +'revisions_accepted' => '[no_revisions] revisies geaccepteerd', +'revisions_not_touched' => '[no_revisions] revisies geopend', +'revisions_pending' => '[no_revisions] revisies in afwachting', +'revisions_rejected' => '[no_revisions] revisies geweigerd', +'revisions_without_group' => '[no_revisions] revisies zonder groep', +'revisions_without_user' => '[no_revisions] revisies zonder gebruiker', 'revision_date' => 'Datum revisie', 'revision_log' => 'Log herziening', 'revision_request_email_body' => 'Verzoek tot herziening @@ -1016,12 +1029,12 @@ Gebruiker: [username] URL: [url]', 'rewind_workflow_email_subject' => '[sitename]: [name] - Workflow is teruggezet', 'rewind_workflow_warning' => 'Als u de workflow terugzet naar oorspronkelijke staat, dan wordt de workflow historie voor dit document verwijderd en onherstelbaar.', -'rm_attrdef' => 'Verwijder kenmerk definitie', -'rm_attrdefgroup' => '', -'rm_default_keyword_category' => 'Verwijder Categorie', -'rm_document' => 'Verwijder Document', +'rm_attrdef' => 'Verwijder kenmerkdefinitie', +'rm_attrdefgroup' => 'Verwijder kenmerkdefinitie-groep', +'rm_default_keyword_category' => 'Verwijder categorie', +'rm_document' => 'Verwijder document', 'rm_document_category' => 'Verwijder categorie', -'rm_event' => '', +'rm_event' => 'Verwijder gebeurtenis', 'rm_file' => 'Verwijder bestand', 'rm_folder' => 'Verwijder map', 'rm_from_clipboard' => 'Verwijder van klembord', @@ -1030,7 +1043,7 @@ URL: [url]', 'rm_transmittal' => 'Verwijder de verzending', 'rm_transmittalitem' => 'Verwijder verzonden item', 'rm_user' => 'Verwijder deze Gebruiker', -'rm_user_from_processes' => '', +'rm_user_from_processes' => 'Verwijder gebruiker uit het proces', 'rm_version' => 'Verwijder versie', 'rm_workflow' => 'Verwijder workflwo', 'rm_workflow_action' => 'Verwijder workflow actie', @@ -1041,8 +1054,8 @@ URL: [url]', 'role_guest' => 'Gast', 'role_info' => 'Informtie over de rol', 'role_management' => 'Rol-management', -'role_name' => 'Naam vd Rol', -'role_type' => '', +'role_name' => 'Naam vd rol', +'role_type' => 'Type rol', 'role_user' => 'Gebruiker', 'ro_RO' => 'Roemeens', 'run_subworkflow' => 'Voer sub workflow uit', @@ -1068,7 +1081,7 @@ URL: [url]', 'search_mode_or' => 'tenminste 1 woord', 'search_no_results' => 'Er zijn geen documenten gevonden die aan uw zoekvraag voldoen', 'search_query' => 'Zoeken naar', -'search_report' => '[count] documenten en [foldercount] mappen gevonden in [searchtime] sec.', +'search_report' => '[doccount] documenten en [foldercount] mappen gevonden in [searchtime] sec.', 'search_report_fulltext' => '[doccount] documenten gevonden', 'search_resultmode' => 'Zoek resultaat', 'search_resultmode_both' => 'Documenten en mappen', @@ -1077,14 +1090,14 @@ URL: [url]', 'search_time' => 'Verstreken tijd: [time] sec.', 'seconds' => 'seconden', 'selection' => 'Selectie', -'select_attrdefgrp_show' => '', +'select_attrdefgrp_show' => 'Toon attribut definities-groep', 'select_category' => 'klik om categorie te selecteren', 'select_groups' => 'Klik om groep te selecteren', 'select_grp_approvers' => 'Klik om beoordelaars te selecteren', 'select_grp_ind_approvers' => 'Klik om beoordelaars te selecteren', -'select_grp_ind_notification' => 'Klik om groep beoordelaar te selecteren', -'select_grp_ind_recipients' => '', -'select_grp_ind_reviewers' => 'Klik om groep beoordelaar te selecteren', +'select_grp_ind_notification' => 'Selecteerd de groep', +'select_grp_ind_recipients' => 'Selecteer de groep', +'select_grp_ind_reviewers' => 'Selecteer de groep', 'select_grp_ind_revisors' => '', 'select_grp_notification' => 'Klik voor groepsnotificatiebeoordelaars', 'select_grp_recipients' => 'Klik om groep beoordelaar te selecteren', @@ -1098,10 +1111,15 @@ URL: [url]', 'select_one' => 'Selecteer een', 'select_users' => 'Klik om gebruikers te selecteren', 'select_workflow' => 'Selecteer workflow', -'send_email' => '', -'send_login_data' => '', -'send_login_data_body' => '', -'send_login_data_subject' => '', +'send_email' => 'Verstuur email', +'send_login_data' => 'Verstuur Login-data', +'send_login_data_body' => 'Login data + +Login: [login] +Name: [username] + +[comment]', +'send_login_data_subject' => 'Onderwerp', 'send_test_mail' => 'Testmail versturen', 'september' => 'september', 'sequence' => 'Volgorde', @@ -1109,15 +1127,15 @@ URL: [url]', 'seq_end' => 'Op het einde', 'seq_keep' => 'Behoud Positie', 'seq_start' => 'Eerste positie', -'sessions' => '', +'sessions' => 'sessies', 'settings' => 'Instellingen', 'settings_activate_module' => 'Activeer module', 'settings_activate_php_extension' => 'Activeer PHP uitbreiding', 'settings_adminIP' => 'Beheer IP', 'settings_adminIP_desc' => 'Indien ingesteld kan de beheerder alleen vanaf het ingestelde IP adres inloggen. Leeg laten om controle te vermijden. Opmerking: Werkt alleen met lokale authenticatie (Geen LDAP)', 'settings_Advanced' => 'Uitgebreid', -'settings_advancedAcl' => '', -'settings_advancedAcl_desc' => '', +'settings_advancedAcl' => 'Advanced Access control', +'settings_advancedAcl_desc' => 'Advanced Access control staat het uit- en inschakelen van bepaalde modules toe. Het kan niet gebruikt worden voor het beheer van toegangsrechten van documenten en mappen.', 'settings_apache_mod_rewrite' => 'Apache - Module Rewrite', 'settings_Authentication' => 'Authenticatie instellingen', 'settings_autoLoginUser' => 'Automatische login', @@ -1126,15 +1144,15 @@ URL: [url]', => , => , =>', -'settings_available_languages' => 'Beschikbare talen', -'settings_available_languages_desc' => '', +'settings_available_languages' => 'Beschikbare vertalingen', +'settings_available_languages_desc' => 'Alleen de geselecteerde vertalingen worden beschikbaar in het taal-selectie-menu. De default-taal (EN) wordt altijd geladen.', 'settings_backupDir' => 'Instellingen backupmap', 'settings_backupDir_desc' => 'Instellingen backupmap', 'settings_cacheDir' => 'cache directory', 'settings_cacheDir_desc' => 'Waar de voorbeeld afbeeldingen zijn opgeslagen (het is het beste om te kiezen voor een pad, welke niet toegankelijk is door uw webserver)', -'settings_Calendar' => 'Kalender instellingen', -'settings_calendarDefaultView' => 'Kalender Standaard overzicht', -'settings_calendarDefaultView_desc' => 'Kalender standaard overzicht', +'settings_Calendar' => 'Instellingen van de agenda', +'settings_calendarDefaultView' => 'Standaard overzicht agenda', +'settings_calendarDefaultView_desc' => 'Pagina per dag/week/maand', 'settings_cannot_disable' => 'Bestand ENABLE_INSTALL_TOOL kon niet verwijderd worden', 'settings_checkOutDir' => 'Instellingen Checkoutmap', 'settings_checkOutDir_desc' => 'Instellingen Checkoutmap', @@ -1144,8 +1162,8 @@ URL: [url]', 'settings_contentDir_desc' => 'Waar de verzonden bestande opgeslagen worden (Kan het beste een map zijn die niet benaderbaar is voor de webserver.)', 'settings_contentOffsetDir' => 'Inhouds Basis Map', 'settings_contentOffsetDir_desc' => 'Om de beperkingen van het onderliggende bestandssysteem te omzeilen, is een nieuwe mappenstructuur bedacht dat binnen de inhoudsmap (Inhoudsmap) bestaat. Hiervoor is een map nodig als basis. Gebruikelijk is om dit de standaardwaarde te laten, 1048576, maar kan elke waarde of tekst bevatten dat nog niet bestaat binnen de (Inhoudsmap)', -'settings_convertToPdf' => '', -'settings_convertToPdf_desc' => '', +'settings_convertToPdf' => 'Document converteren naar PDF', +'settings_convertToPdf_desc' => 'Als een document niet geschikt is voor Preview, wordt het geconverteerd naar PDF.', 'settings_cookieLifetime' => 'Cookie Life time', 'settings_cookieLifetime_desc' => 'Hoe lang een cookie moet worden behouden. Indien ingesteld op 0 worden de cookies verwijderd bij het afsluiten van de browser.', 'settings_coreDir' => 'Core letoDMS map', @@ -1167,12 +1185,12 @@ URL: [url]', 'settings_dbUser' => 'Gebruikersnaam', 'settings_dbUser_desc' => 'De gebruikersnaam voor toegang tot de datbase ingevoerd tijdens de installatie. Verander de waarde niet tenzij echt nodig, bijvoorbeeld bij verplaatsing van de database naar een ander systeem.', 'settings_dbVersion' => 'Database schema te oud', -'settings_defaultAccessDocs' => '', -'settings_defaultAccessDocs_desc' => '', -'settings_defaultSearchMethod' => 'Default zoekmethode', -'settings_defaultSearchMethod_desc' => 'Default zoekmethode', -'settings_defaultSearchMethod_valdatabase' => 'Default zoekmethode (database)', -'settings_defaultSearchMethod_valfulltext' => 'Default fulltext-zoekmethode', +'settings_defaultAccessDocs' => 'Standaard toegangsrechten voor nieuwe documenten', +'settings_defaultAccessDocs_desc' => 'Als een nieuw document wordt gecreëerd, worden dit de nieuwe toegangsrechten.', +'settings_defaultSearchMethod' => 'Standaard zoekmethode', +'settings_defaultSearchMethod_desc' => 'Default zoekmethode = op documentnaam / fulltext-search', +'settings_defaultSearchMethod_valdatabase' => 'Default zoekmethode (Documentnaam)', +'settings_defaultSearchMethod_valfulltext' => 'Default fulltext-zoeken', 'settings_delete_install_folder' => 'Om SeedDMS te kunnen gebruiken moet het bestand ENABLE_INSTALL_TOOL uit de configuratiemap verwijderd worden.', 'settings_disableSelfEdit' => 'Uitschakelen Eigenprofiel wijzigen', 'settings_disableSelfEdit_desc' => 'Indien aangevinkt kan de gebruiker zijn eigen profiel niet wijzigen.', @@ -1181,59 +1199,59 @@ URL: [url]', 'settings_dropFolderDir' => 'Pad voor drop folder', 'settings_dropFolderDir_desc' => 'Dit pad kan gebruikt worden voor dropfiles op de server en hier vanaf te importeren in plaats van uploaden via de browser.', 'settings_Edition' => 'Uitgave instellingen', -'settings_editOnlineFileTypes' => 'Instellingen Filetypes', -'settings_editOnlineFileTypes_desc' => 'Online zoekmethoden bewerken', -'settings_enable2FactorAuthentication' => '', -'settings_enable2FactorAuthentication_desc' => '', +'settings_editOnlineFileTypes' => 'Online bewerken van de volgende filetypes', +'settings_editOnlineFileTypes_desc' => 'Bestanden met één van de volgende extensies kunnen online bewerkt worden (ALLEEN KLEINE LETTERS GEBRUIKEN!)', +'settings_enable2FactorAuthentication' => 'Schakel 2-factor-authenticatie in', +'settings_enable2FactorAuthentication_desc' => 'In/Uitschakelen 2-factor-authenticatie. Gebruikers moeten Google Authenticator op hun mobile telefoon installeren.', 'settings_enableAcknowledgeWorkflow' => 'Aanzetten Workflow-stappen', 'settings_enableAcknowledgeWorkflow_desc' => 'Aanzetten workflow-stappen', -'settings_enableAdminReceipt' => '', -'settings_enableAdminReceipt_desc' => '', +'settings_enableAdminReceipt' => 'Sta ontvangst van documenten door admins toe', +'settings_enableAdminReceipt_desc' => 'Inschakelen als u admins documenten wilt laten ontvangen', 'settings_enableAdminRevApp' => 'Inschakelen Beheer Contr/Beoord', 'settings_enableAdminRevApp_desc' => 'Uitvinken om beheerder niet te tonen als controleerder/beoordeler', -'settings_enableCalendar' => 'Inschakelen Kalendar', -'settings_enableCalendar_desc' => 'Inschakelen/uitschakelen kalender', +'settings_enableCalendar' => 'Agenda inschakelen', +'settings_enableCalendar_desc' => 'Inschakelen/uitschakelen agenda', 'settings_enableClipboard' => 'Activeer klembord', 'settings_enableClipboard_desc' => 'Activeer/ blokkeer het klembord', -'settings_enableConverting' => 'Inschakelen Conversie', -'settings_enableConverting_desc' => 'Inschakelen/uitschakelen conversie van bestanden', -'settings_enableDropFolderList' => '', -'settings_enableDropFolderList_desc' => '', +'settings_enableConverting' => 'Documenten converteren', +'settings_enableConverting_desc' => 'Inschakelen/uitschakelen conversie van bestanden naar PDF', +'settings_enableDropFolderList' => 'Inschakelen van de lijst van files in dropfolder.', +'settings_enableDropFolderList_desc' => 'De lijst van files in Dropfolder zichtbaar maken in het menu', 'settings_enableDropUpload' => 'Inschakelen Snelle Upload', 'settings_enableDropUpload_desc' => 'Aanzetten DropUpload', 'settings_enableDuplicateDocNames' => 'Sta duplicaten van documentnamen toe', 'settings_enableDuplicateDocNames_desc' => 'Staat het toe om documentnamen te dupliceren in een folder.', -'settings_enableEmail' => 'Inschakelen E-mail', +'settings_enableEmail' => 'E-mail inschakelen', 'settings_enableEmail_desc' => 'Inschakelen/uitschakelen automatische email notificatie', -'settings_enableFolderTree' => 'Inschakelen Mappenstructuur', +'settings_enableFolderTree' => 'Mappenstructuur tonen', 'settings_enableFolderTree_desc' => 'Uitschakelen om de mappenstructuur niet te tonen', -'settings_enableFullSearch' => 'Inschakelen volledigetekst zoekopdracht', +'settings_enableFullSearch' => 'Volledige-tekst zoeken', 'settings_enableFullSearch_desc' => 'Inschakelen zoeken in volledigetekst', -'settings_enableGuestAutoLogin' => 'Gast login automatisch aanzetten', +'settings_enableGuestAutoLogin' => 'Gastlogin automatisch aanzetten', 'settings_enableGuestAutoLogin_desc' => 'Gastlogin automatisch aanzetten', -'settings_enableGuestLogin' => 'Inschakelen Gast login', +'settings_enableGuestLogin' => 'Inschakelen Gastlogin', 'settings_enableGuestLogin_desc' => 'Als U iemand wilt laten inloggen als gast, schakel deze optie in. Opmerking: Gast login kan het beste alleen in een beveiligde omgeving ingeschakeld worden', 'settings_enableHelp' => 'Hulp aanzetten', 'settings_enableHelp_desc' => 'Hulp aanzetten', -'settings_enableLanguageSelector' => 'Activeer Taal instellen', +'settings_enableLanguageSelector' => 'Taal activerenen', 'settings_enableLanguageSelector_desc' => 'Laat selector zien voor taalinterface, nadat gebruikers inloggen.', -'settings_enableLargeFileUpload' => 'Inschakelen groot bestand upload', +'settings_enableLargeFileUpload' => 'Grote bestanden uploaden', 'settings_enableLargeFileUpload_desc' => 'Indien ingeschakeld, is bestandsupload ook beschikbaar via een java applet jumploader genaamd zonder een bestandsgrootte limiet door de browser. Het staat ook toe om meerdere bestanden in een keer te versturen.', 'settings_enableMenuTasks' => 'Menu-taken aanzetten', 'settings_enableMenuTasks_desc' => 'Menu-taken aanzetten', -'settings_enableMultiUpload' => '', -'settings_enableMultiUpload_desc' => '', -'settings_enableNotificationAppRev' => 'Inschakelen controleur/beoordeler notificatie', +'settings_enableMultiUpload' => 'Multi-upload', +'settings_enableMultiUpload_desc' => 'Bij multiupload kunnen tegelijkertijd verschillende bestanden worden geüpload. Ieder bestand wordt een nieuw document.', +'settings_enableNotificationAppRev' => 'Notificeren controleur/beoordeler', 'settings_enableNotificationAppRev_desc' => 'Vink aan om een notificatie te versturen naar de controleur/beoordeler als een nieuw document versie is toegevoegd.', 'settings_enableNotificationWorkflow' => 'Workflow-notificatie aanzetten', 'settings_enableNotificationWorkflow_desc' => 'Workflow-notificatie aanzetten', -'settings_enableOwnerNotification' => 'Inschakelen eigenaarnotificatie standaard', -'settings_enableOwnerNotification_desc' => 'Inschakelen van notificatie naar de eigenaar als een document is toegevoegd.', -'settings_enableOwnerReceipt' => '', -'settings_enableOwnerReceipt_desc' => '', +'settings_enableOwnerNotification' => 'Standaard eigenaar notificeren', +'settings_enableOwnerNotification_desc' => 'Inschakelen van notificatie naar de eigenaar als een document wordt toegevoegd.', +'settings_enableOwnerReceipt' => 'Laten weten wat er met het document gebeurt aan eigenaar', +'settings_enableOwnerReceipt_desc' => 'Inschakelen als u wilt dat de eigenaar van het document op de lijst van ontvangers komt.', 'settings_enableOwnerRevApp' => 'Beoordeling / goedkeuring voor eigenaar toestaan', 'settings_enableOwnerRevApp_desc' => 'Activeer dit als de eigenaar van een document genoteerd staat as beoordelaar/ goedkeurder en voor workflow overdrachten.', -'settings_enablePasswordForgotten' => 'Inschakelen wachtwoord vergeten', +'settings_enablePasswordForgotten' => '\'wachtwoord vergeten\' aanzetten', 'settings_enablePasswordForgotten_desc' => 'Inschakelen om een wachtwoord via mail te versturen als de gebruiker een nieuw wachtwoord heeft ingesteld.', 'settings_enableRecursiveCount' => 'Document/ map teller herhalen toestaan', 'settings_enableRecursiveCount_desc' => 'If turned on, the number of documents and folders in the folder view will be determined by counting all objects by recursively processing the folders and counting those documents and folders the user is allowed to access.', @@ -1241,14 +1259,14 @@ URL: [url]', 'settings_enableRevisionWorkflow_desc' => 'Herzieningsworkflow aanzetten', 'settings_enableSelfRevApp' => 'Beoordeling/ goedkeuring toestaan voor ingelogde gebruikers', 'settings_enableSelfRevApp_desc' => 'Schakel in indien the huidig ingelogde gebruiker wordt toegewezen als goedkeurder/ beoordelaar en voor workflow overgangen.', -'settings_enableSessionList' => '', -'settings_enableSessionList_desc' => '', -'settings_enableThemeSelector' => 'Selecteer thema', +'settings_enableSessionList' => 'Lijst van gebruikers online', +'settings_enableSessionList_desc' => 'Laat zien welke gebruikers online zijn', +'settings_enableThemeSelector' => 'Thema selecteren', 'settings_enableThemeSelector_desc' => 'Schakel thema selectie op de aanmeldpagina uit', -'settings_enableUpdateReceipt' => '', -'settings_enableUpdateReceipt_desc' => '', -'settings_enableUpdateRevApp' => '', -'settings_enableUpdateRevApp_desc' => '', +'settings_enableUpdateReceipt' => 'Veranderen van bestaande bestemming toestaan', +'settings_enableUpdateReceipt_desc' => 'Mag de gebruiker die een bestemming heeft opgesteld, zijn beslissing wijzigen?', +'settings_enableUpdateRevApp' => 'Wijzig bestaande review/goedkeuring', +'settings_enableUpdateRevApp_desc' => 'Mag de gebruiker die een review//goedkeuring heeft gegeven, zijn beslissing wijzigen (zolang de huidige stap in de workflow nog duurt)?', 'settings_enableUserImage' => 'Inschakelen Gebruikersplaatjes', 'settings_enableUserImage_desc' => 'Inschakelen Gebruikerplaatjes', 'settings_enableUsersView' => 'Inschakelen Gebruikers overzicht', @@ -1268,9 +1286,9 @@ URL: [url]', 'settings_Extensions' => 'Uitbreidingen', 'settings_extraPath' => 'Extra PHP include Path', 'settings_extraPath_desc' => 'Pad naar extra software. Dit pad bevat bv. het adodb pad of de extra pear packages.', -'settings_firstDayOfWeek' => 'Eerste weekdag', -'settings_firstDayOfWeek_desc' => 'Eerste dag van de week', -'settings_footNote' => 'Onderschrift', +'settings_firstDayOfWeek' => 'Eerste dag van de week', +'settings_firstDayOfWeek_desc' => 'Eerste dag van de (werk)week', +'settings_footNote' => 'Subtitel', 'settings_footNote_desc' => 'Bericht om onderop elke pagina te tonen', 'settings_fullSearchEngine' => 'Instellingen Fulltextsearch', 'settings_fullSearchEngine_desc' => 'Instellingen Fulltextsearch', @@ -1294,8 +1312,8 @@ URL: [url]', 'settings_install_welcome_text' => '

Wees er zeker van dat u een bestand, genaamd \'ENABLE_INSTALL_TOOL\', gemaakt heeft in de configuratiemap, voordat u de installatie van letDMS begint, anders zal de installatie niet werken. Op een Unix-Syteem kan dit makkelijk gedaan worden met \'touch conf/ENABLE_INSTALL_TOOL\'. Verwijder het bestand nadat de installatie afgerond is.

letoDMS heeft weinig installatievoorwaarden. U heeft een mysql database en een php-geschikte web server nodig. Voor de lucene volledige tekst zoekfunctie, moet Zend framework geinstalleerd zijn op schijf en gevonden worden door php. Vanaf versie 3.2.0 van letoDMS zal ADOdb geen deel meer uitmaken van de uitgave. Een kopie kan van http://adodb.sourceforge.net gehaald en geinstalleerd worden. Het pad kan later opgegeven worden tijdens de installatie.

Als u de database voor de installatie wilt aanmaken, dan kunt u het handmatig met uw favoriete gereedschap aanmaken. optioneel kan een database met gebruikerstoegang gemaakt worden en importeer een van de database dumps in de configuratiemap. Met het installatiescript kan dit ook, maar hiervoor is database toegang nodig met voldoende rechten om een database aan te maken.

', 'settings_install_welcome_title' => 'Welkom bij de installatie van letoDMS', 'settings_install_zendframework' => 'Installeer Zend Framework, als u volledigetekst zoekmechanisme wilt gebruiken', -'settings_language' => 'Standaard taal', -'settings_language_desc' => 'Standaard taal (naam van de submap in map "languages")', +'settings_language' => 'Standaardtaal', +'settings_language_desc' => 'Standaardtaal (naam van de submap in map "languages")', 'settings_libraryFolder' => 'Bibliotheekmap', 'settings_libraryFolder_desc' => 'In deze map kunnen documenten worden opgeslagen. Hiermee worden nieuwe documenten gecreëerd.', 'settings_logFileEnable' => 'Inschakelen Logbestand', @@ -1316,10 +1334,10 @@ URL: [url]', 'settings_maxItemsPerPage_desc' => '', 'settings_maxRecursiveCount' => 'Max. nummers of recursieve document/map telling', 'settings_maxRecursiveCount_desc' => 'Dit is het maximum aantal documenten of mappen dat zal worden gecontroleerd voor toegangsrechten bij recursieve objecten telling. Als dit aantal is overschreden, zal het aantal documenten en mappen in de het map overzicht worden geschat.', -'settings_maxSizeForFullText' => '', -'settings_maxSizeForFullText_desc' => '', -'settings_maxUploadSize' => '', -'settings_maxUploadSize_desc' => '', +'settings_maxSizeForFullText' => 'Maximum bestandsgrootte voor onmiddellijke indexering', +'settings_maxSizeForFullText_desc' => 'Alle nieuwe documenten kleiner dan deze waarde worden direct na het uploaden geïndexeerd. In alle andere gevallen worden alleen de metadata geïndexeerd.', +'settings_maxUploadSize' => 'Maximale omvang voor uploaden', +'settings_maxUploadSize_desc' => 'Dit is de maximale omvang voor te uploaden bestanden. Dat geldt voor bestanden en bijlagen.', 'settings_more_settings' => 'Meer instellingen. Standaard login: admin/admin', 'settings_notfound' => 'Niet gevonden', 'settings_Notification' => 'Notificatie instellingen', @@ -1356,12 +1374,12 @@ URL: [url]', 'settings_previewWidthList_desc' => 'Breedte van het voorbeeld weergegeven in lijsten', 'settings_previewWidthMenuList' => '', 'settings_previewWidthMenuList_desc' => '', -'settings_printDisclaimer' => 'Print Vrijwaring', -'settings_printDisclaimer_desc' => 'Indien ingeschakeld zal het vrijwarings bericht in de lang.inc bestanden worden getoond onderop de pagina', +'settings_printDisclaimer' => 'Vrijwaring afdrukken', +'settings_printDisclaimer_desc' => 'Indien ingeschakeld zal het vrijwaringsbericht bestanden worden getoond onderaan de pagina', 'settings_quota' => 'Gebruikersquotum', 'settings_quota_desc' => 'Het maximum aantal bytes een gebruiker op de schijf mag schrijven. Stel deze in op 0 voor een onbeperkte schijfruimte. Deze waarde kan worden overschreven voor elk gebruik in zijn profiel.', 'settings_removeFromDropFolder' => 'Verwijder het bestand uit de dropfolder na een succesvolle upload', -'settings_removeFromDropFolder_desc' => '', +'settings_removeFromDropFolder_desc' => 'Verwijder het bestand uit de dropfolder na een succesvolle upload', 'settings_restricted' => 'Beperkte toegang', 'settings_restricted_desc' => 'Sta alleen gebruiker toe om in te loggen die in de database zijn opgenomen (ongeacht succesvolle authenticatie met LDAP)', 'settings_rootDir' => 'Basismap', @@ -1371,15 +1389,15 @@ URL: [url]', 'settings_SaveError' => 'Opslagfout Configuratiebestand', 'settings_Server' => 'Server instellingen', 'settings_showFullPreview' => 'Toon volledige document', -'settings_showFullPreview_desc' => '', +'settings_showFullPreview_desc' => 'In/Uitschakelen preview van alle pagina\'s van het document.', 'settings_showMissingTranslations' => 'Ontbrekende vertalingen weergeven', 'settings_showMissingTranslations_desc' => 'Geef alle ontbrekende vertalingen onder aan de pagina weer. De gebruiker kan een verzoek tot vertaling indienen dat wordt opgeslagen als csv bestand. Let op! Zet deze functie niet aan in productieomgevingen!', -'settings_showSingleSearchHit' => '', -'settings_showSingleSearchHit_desc' => '', +'settings_showSingleSearchHit' => 'Spring rechtstreeks naar het enkele zoekresultaat', +'settings_showSingleSearchHit_desc' => 'Als er maar één zoekresultaat is, wordt dat in detail getoond.', 'settings_Site' => 'Web Locatie', -'settings_siteDefaultPage' => 'Locatie standaard pagina', -'settings_siteDefaultPage_desc' => 'Standaard pagina bij inloggen. Indien leeg is out/out.ViewFolder.php de standaard', -'settings_siteName' => 'Locatie Naam', +'settings_siteDefaultPage' => 'Locatie standaardpagina', +'settings_siteDefaultPage_desc' => 'Standaardpagina bij inloggen. Indien leeg is out/out.ViewFolder.php de standaard', +'settings_siteName' => 'Naam van de site', 'settings_siteName_desc' => 'Naam van de Locatie dat wordt gebruikt in de titel van de paginas. Standaard: letoDMS', 'settings_SMTP' => 'SMTP Server instellingen', 'settings_smtpPassword' => 'SMTP Server paswoord', @@ -1406,8 +1424,8 @@ URL: [url]', 'settings_start_install' => 'Begin installatie', 'settings_stopWordsFile' => 'Pad naar bestand met nietindex woorden', 'settings_stopWordsFile_desc' => 'Als volledigetekst zoekopdracht is ingeschakeld, bevat dit bestand woorden die niet geindexeerd zullen worden.', -'settings_strictFormCheck' => 'Stricte Form Controle', -'settings_strictFormCheck_desc' => 'Stricte formuleer controle. Indien ingeschakeld, worden alle velden in het formulier gecontroleer op een waarde. Indien uitgeschakeld, worden de meeste commentaar en invoervelden optioneel. Commentaren zijn altijd benodigd bij een review of modificatie van een documentstatus', +'settings_strictFormCheck' => 'Strikte formaatcontrole', +'settings_strictFormCheck_desc' => 'Strikte controle op het juiste formaat. Indien ingeschakeld, worden alle velden in het formulier gecontroleer op een waarde. Indien uitgeschakeld, worden de meeste commentaar en invoervelden opgevat als optioneel. Commentaren zijn altijd nodig bij een review of modificatie van een documentstatus', 'settings_suggestionvalue' => 'Voorgestelde waarde', 'settings_System' => 'Systeem', 'settings_theme' => 'Standaard thema', @@ -1423,7 +1441,7 @@ URL: [url]', 'settings_versioningFileName' => 'Versieinformatie Bestandsnaam', 'settings_versioningFileName_desc' => 'De naam van het versie informatie bestand gemaakt door het backupgereedschap', 'settings_versiontolow' => 'Versie te laag', -'settings_viewOnlineFileTypes' => 'Bekijk Online Bestandstypen', +'settings_viewOnlineFileTypes' => 'De volgende bestandstypen online bekijken', 'settings_viewOnlineFileTypes_desc' => 'Bestanden met een van de volgende extensies kunnen online bekeken worden (GEBRUIK ALLEEN KLEINE LETTERS)', 'settings_workflowMode' => 'Workflow mode', 'settings_workflowMode_desc' => 'De uitgebreide workflow maakt het mogelijk om uw eigen workflow op te geven voor documentversies.', @@ -1448,53 +1466,53 @@ URL: [url]', 'splash_add_group_member' => 'Nieuwe groepslid toegevoegd', 'splash_add_role' => 'Nieuwe rol toegevoegd', 'splash_add_to_transmittal' => 'Toevoegen aan verzending', -'splash_add_transmittal' => '', +'splash_add_transmittal' => 'Verzending toegevoegd', 'splash_add_user' => 'Nieuwe gebruiker toegevoegd', -'splash_cleared_cache' => '', +'splash_cleared_cache' => 'Cache leeggemaakt', 'splash_cleared_clipboard' => 'Klembord leeg gemaakt', 'splash_document_added' => 'Nieuw document toegevoegd', 'splash_document_checkedout' => 'Document in gebruik genomen', 'splash_document_edited' => 'Document opgeslagen', -'splash_document_indexed' => '', +'splash_document_indexed' => 'Document geïndexeerd', 'splash_document_locked' => 'Document vergrendeld', 'splash_document_unlocked' => 'Document ontgrendeld', 'splash_edit_attribute' => 'Attribuut opgeslagen', -'splash_edit_event' => '', +'splash_edit_event' => 'Gebeurtenis opgeslagen', 'splash_edit_group' => 'Groep opgeslagen', 'splash_edit_role' => 'Rol opgeslagen', 'splash_edit_user' => 'Gebruiker opgeslagen', 'splash_error_add_to_transmittal' => 'Fout: toevoeging aan verzending', -'splash_error_rm_download_link' => '', -'splash_error_send_download_link' => '', +'splash_error_rm_download_link' => 'Fout bij verwijderen download-link', +'splash_error_send_download_link' => 'Fout bij verzenden download-link', 'splash_folder_edited' => 'Opslaan mapwijzigingen', -'splash_importfs' => '', +'splash_importfs' => 'Geïmporteerd: [docs] documenten en [folders] mappen', 'splash_invalid_folder_id' => 'Ongeldige map ID', 'splash_invalid_searchterm' => 'Ongeldige zoekterm', 'splash_moved_clipboard' => 'Klembord verplaatst naar de huidige map', 'splash_move_document' => 'Document verplaatst', 'splash_move_folder' => 'Map verplaatst', -'splash_receipt_update_success' => '', +'splash_receipt_update_success' => 'Ontvangst succesvol toegevoegd', 'splash_removed_from_clipboard' => 'Verwijderd van het klembord', 'splash_rm_attribute' => 'Attribuut verwijderd', 'splash_rm_document' => 'Document verwijderd', -'splash_rm_download_link' => '', +'splash_rm_download_link' => 'Download-link verwijderd', 'splash_rm_folder' => 'Map verwijderd', 'splash_rm_group' => 'Groep verwijderd', 'splash_rm_group_member' => 'Lid van de groep verwijderd', 'splash_rm_role' => 'Rol verwijderd', 'splash_rm_transmittal' => 'Verzending verwijderd', 'splash_rm_user' => 'Gebruiker verwijderd', -'splash_rm_user_processes' => '', -'splash_saved_file' => '', -'splash_save_user_data' => '', -'splash_send_download_link' => '', -'splash_send_login_data' => '', +'splash_rm_user_processes' => 'Gebruiker uit alle processen verwijderd', +'splash_saved_file' => 'Bestand opgeslagen', +'splash_save_user_data' => 'Gebruikersgegevens opgeslagen', +'splash_send_download_link' => 'Download-link verzonden', +'splash_send_login_data' => 'Login-gegevens verzonden', 'splash_settings_saved' => 'Instellingen opgeslagen', 'splash_substituted_user' => 'Invallers gebruiker', 'splash_switched_back_user' => 'Teruggeschakeld naar de oorspronkelijke gebruiker', 'splash_toogle_group_manager' => 'Group manager toogled', 'splash_transfer_document' => '', -'splash_transfer_objects' => '', +'splash_transfer_objects' => 'Objecten overgedragen', 'state_and_next_state' => 'staat/ volgende staat', 'statistic' => 'Statistieken', 'status' => 'Status', @@ -1517,7 +1535,7 @@ URL: [url]', 'status_revisor_removed' => 'Verwijderd', 'status_unknown' => 'Onbekend', 'storage_size' => 'Omvang opslag', -'submit_2_fact_auth' => '', +'submit_2_fact_auth' => '2-factor-authentificatie verstuurd', 'submit_approval' => 'Verzend [Goedkeuring]', 'submit_login' => 'Log in', 'submit_password' => 'Nieuw wachtwoord instellen', @@ -1526,7 +1544,7 @@ URL: [url]', 'submit_review' => 'Verzend Beoordeling', 'submit_revision' => 'Herziening verzenden', 'submit_userinfo' => 'Wijzigingen opslaan', -'subsribe_timelinefeed' => '', +'subsribe_timelinefeed' => 'Subscribe to timeline feed', 'substitute_to_user' => 'Switch naar \'[username]\'', 'substitute_user' => 'Invaller/ vervanger Gebruiker', 'success_add_aro' => 'Access request object added', @@ -1537,13 +1555,13 @@ URL: [url]', 'sunday_abbr' => 'zo', 'sv_SE' => 'Zweeds', 'switched_to' => 'Overgeschakeld naar', -'takeOverAttributeValue' => '', +'takeOverAttributeValue' => 'Onthoud de waarde van het attribuut', 'takeOverGrpApprover' => 'Onthoud de laatste groep goedkeurders', 'takeOverGrpReviewer' => 'Onthoud de laatste groep herzieners', 'takeOverIndApprover' => 'Onthoud de laatste groep individuele goedkeurders', 'takeOverIndReviewer' => 'Onthoud de laatste groep individuele herzieners', 'tasks' => 'taken', -'temp_jscode' => '', +'temp_jscode' => 'Tijdelijke jscode', 'testmail_body' => 'Deze mail dient enkel voor het testen van de mail configuratie van SeedDMS', 'testmail_subject' => 'Test mail', 'theme' => 'Thema', @@ -1563,18 +1581,18 @@ URL: [url]', 'timeline_skip_status_change_1' => 'wacht op goedkeuring', 'timeline_skip_status_change_2' => 'gepubliceerd', 'timeline_skip_status_change_3' => 'binnen de workflow', -'timeline_skip_status_change_4' => '', -'timeline_skip_status_change_5' => '', +'timeline_skip_status_change_4' => 'in revisie', +'timeline_skip_status_change_5' => 'concept', 'timeline_status_change' => 'Versie [version]: [status]', 'to' => 'aan', 'toggle_manager' => 'Wijzig Beheerder', -'toggle_qrcode' => '', +'toggle_qrcode' => 'Tonen/Verbergen QR-code', 'to_before_from' => 'De einddatum mag niet voor de startdatum liggen', 'transfer_document' => 'Document overdragen', 'transfer_no_read_access' => '', 'transfer_no_write_access' => '', -'transfer_objects' => '', -'transfer_objects_to_user' => '', +'transfer_objects' => 'Objecten overdragen', +'transfer_objects_to_user' => 'Objecten overdragen aan gebruiker', 'transfer_to_user' => '', 'transition_triggered_email' => 'Workflow-overgang geactiveerd', 'transition_triggered_email_body' => 'Workflow Overgang @@ -1599,9 +1617,9 @@ URL: [url]', 'tr_TR' => 'Turks', 'tuesday' => 'dinsdag', 'tuesday_abbr' => 'di', -'type_of_hook' => '', +'type_of_hook' => 'Soort hook', 'type_to_search' => 'zoeken naar', -'uk_UA' => 'Oekraïne', +'uk_UA' => 'Oekraïens', 'under_folder' => 'In map', 'unknown_attrdef' => 'Onbekende attribuut definitie', 'unknown_command' => 'Opdracht niet herkend.', @@ -1634,12 +1652,12 @@ URL: [url]', 'uploading_zerosize' => 'Uploaden van een leeg bestand. Upload wordt geannuleerd.', 'used_discspace' => 'Gebruike schijf ruimte', 'user' => 'Gebruiker', -'userid_groupid' => 'Gebruiker id/Groep id', +'userid_groupid' => 'GebruikerID / Groep ID', 'users' => 'Gebruikers', 'users_and_groups' => 'Gebruikers / Groepen', 'users_done_work' => 'Uitgevoerd werk gebruikers', 'user_exists' => 'Gebruiker bestaat reeds.', -'user_group' => 'Gebruiker/Groep', +'user_group' => 'Gebruiker / Groep', 'user_group_management' => 'Gebruikers / Groepen beheer', 'user_image' => 'Afbeelding', 'user_info' => 'Gebruikers informatie', @@ -1650,7 +1668,7 @@ URL: [url]', 'use_comment_of_document' => 'Gebruik reactie van document', 'use_default_categories' => 'Gebruik voorgedefinieerde categorieen', 'use_default_keywords' => 'Gebruik bestaande sleutelwoorden', -'valid_till' => '', +'valid_till' => 'Geldig tot', 'version' => 'Versie', 'versioning_file_creation' => 'Aanmaken bestand versies', 'versioning_file_creation_warning' => 'Met deze handeling maakt U een bestand aan die de versie voortgang informatie van een compleet DMS bevat. Na het aanmaken wordt ieder bestand opgeslagen in de document map.', @@ -1673,23 +1691,23 @@ URL: [url]', 'weeks' => 'Weken', 'week_view' => 'Week Overzicht', 'workflow' => 'Workflow', -'workflows_involded' => '', +'workflows_involded' => 'Betrokken bij workflows', 'workflow_actions_management' => 'Workflow actiebeheer', 'workflow_action_in_use' => 'Deze actie wordt momenteel gebruikt door een workflow', 'workflow_action_name' => 'Naam', 'workflow_editor' => 'Workflow editor', 'workflow_group_summary' => 'Groepssamenvatting', -'workflow_has_cycle' => '', +'workflow_has_cycle' => 'Workflow heeft cyclus', 'workflow_initstate' => 'Begin status', 'workflow_in_use' => 'Deze workflow wordt momenteel gebruikt door documenten.', -'workflow_layoutdata_saved' => '', +'workflow_layoutdata_saved' => 'Sla de layout op', 'workflow_management' => 'Workflow beheer', 'workflow_name' => 'Naam', -'workflow_no_doc_rejected_state' => '', -'workflow_no_doc_released_state' => '', -'workflow_no_initial_state' => '', +'workflow_no_doc_rejected_state' => 'Het document ma in deze fase van de workflow niet geweigerd worden!', +'workflow_no_doc_released_state' => 'Het document ma in deze fase van de workflow niet gesloten worden', +'workflow_no_initial_state' => 'Gen enkele overdracht begint met de startfase van de workflow', 'workflow_no_states' => 'U moet eerst workflow-statussen definiëren, voordat u een workflow toevoegt.', -'workflow_save_layout' => '', +'workflow_save_layout' => 'Sla de layout op', 'workflow_state' => 'workflow_states_managementWorkflow status beheer', 'workflow_states_management' => 'Workflow status beheer', 'workflow_state_docstatus' => 'Document status',