diff --git a/CHANGELOG b/CHANGELOG index 3d07c996c..8182f3ff2 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,8 @@ +-------------------------------------------------------------------------------- + Changes in version 5.0.1 +-------------------------------------------------------------------------------- +- merged changes from 4.3.25 + -------------------------------------------------------------------------------- Changes in version 5.0.1 -------------------------------------------------------------------------------- @@ -13,6 +18,15 @@ - add .xml to online file types by default - add home folder for users +-------------------------------------------------------------------------------- + Changes in version 4.3.25 +-------------------------------------------------------------------------------- +- much more consistent drag & drop +- various translation updates +- take out file deletion because it was (and probabbly never has been) useful +- send notification if folder is deleted by ajax call +- add page ImportFS for mass importing files from drop folder + -------------------------------------------------------------------------------- Changes in version 4.3.24 -------------------------------------------------------------------------------- diff --git a/SeedDMS_Core/Core/inc.ClassGroup.php b/SeedDMS_Core/Core/inc.ClassGroup.php index 9425fccb1..5f9e1d969 100644 --- a/SeedDMS_Core/Core/inc.ClassGroup.php +++ b/SeedDMS_Core/Core/inc.ClassGroup.php @@ -507,7 +507,7 @@ class SeedDMS_Core_Group { * @param integer $type type of item (T_DOCUMENT or T_FOLDER) * @return array array of notifications */ - function getNotificationsByGroup($type=0) { /* {{{ */ + function getNotifications($type=0) { /* {{{ */ $db = $this->_dms->getDB(); $queryStr = "SELECT `tblNotify`.* FROM `tblNotify` ". "WHERE `tblNotify`.`groupID` = ". $this->_id; diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index ba970d499..21147e298 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -12,7 +12,7 @@ uwe@steinmann.cx yes - 2016-02-24 + 2016-03-09 5.1.0 @@ -987,11 +987,13 @@ SeedDMS_Core_DMS::getNotificationsByUser() are deprecated - 2016-01-22 - +<<<<<<< HEAD +======= + 2016-01-21 + - 5.0.1 - 5.0.1 + 4.3.24 + 4.3.24 stable @@ -999,8 +1001,48 @@ SeedDMS_Core_DMS::getNotificationsByUser() are deprecated GPL License +- make sure boolean attribute is saved as 0/1 +- add SeedDMS_Core_User::[g|s]etMandatoryWorkflows() +- add SeedDMS_Core_User::getNotifications() +- add SeedDMS_Core_Group::getNotifications() +- SeedDMS_Core_DMS::getNotificationsByGroup() and +SeedDMS_Core_DMS::getNotificationsByUser() are deprecated +- SeedDMS_Core_DocumentCategory::getDocumentsByCategory() now returns the documents +- add SeedDMS_Core_Group::getWorkflowStatus() +- SeedDMS_Core_User::getDocumentsLocked() sets locking user propperly + + + + 2016-01-22 + + + 5.0.1 + 5.0.1 + + + stable + stable + + GPL License + - all changes from 4.3.24 merged + + 2016-03-09 + + + 5.0.2 + 5.0.2 + + + stable + stable + + GPL License + +- all changes from 4.3.25 merged + + diff --git a/SeedDMS_Preview/Preview/Previewer.php b/SeedDMS_Preview/Preview/Previewer.php index 8db8b67fa..7284cbc18 100644 --- a/SeedDMS_Preview/Preview/Previewer.php +++ b/SeedDMS_Preview/Preview/Previewer.php @@ -126,6 +126,9 @@ class SeedDMS_Preview_Previewer { * @return string file name of preview image */ protected function getFileName($object, $width) { /* {{{ */ + if(!$object) + return false; + $document = $object->getDocument(); $dir = $this->previewDir.'/'.$document->getDir(); switch(get_class($object)) { @@ -206,6 +209,9 @@ class SeedDMS_Preview_Previewer { } /* }}} */ public function createPreview($object, $width=0) { /* {{{ */ + if(!$object) + return false; + if($width == 0) $width = $this->width; else @@ -286,6 +292,9 @@ class SeedDMS_Preview_Previewer { } /* }}} */ public function hasPreview($object, $width=0) { /* {{{ */ + if(!$object) + return false; + if($width == 0) $width = $this->width; else diff --git a/SeedDMS_Preview/package.xml b/SeedDMS_Preview/package.xml index 91233e440..f3162f2ac 100644 --- a/SeedDMS_Preview/package.xml +++ b/SeedDMS_Preview/package.xml @@ -11,11 +11,11 @@ uwe@steinmann.cx yes - 2016-02-11 + 2016-03-08 - 1.1.5 - 1.1.5 + 1.1.6 + 1.1.6 stable @@ -27,6 +27,7 @@ - command for creating the preview will be called with a given timeout add method getFilesize() timeout for external commands can be passed to contructor of SeedDMS_Preview_Previewer +check if object passed to createPreview(), hasPreview() is not null @@ -150,5 +151,22 @@ preview images will also be recreated if the object this image belongs is of new command for creating the preview will be called with a given timeout + + 2016-02-11 + + + 1.1.5 + 1.1.5 + + + stable + stable + + GPL License + +add method getFilesize() +timeout for external commands can be passed to contructor of SeedDMS_Preview_Previewer + + diff --git a/op/op.Ajax.php b/op/op.Ajax.php index 64a69c84b..e286b0cb9 100644 --- a/op/op.Ajax.php +++ b/op/op.Ajax.php @@ -237,26 +237,26 @@ switch($command) { if($folder->getAccessMode($user) >= M_READWRITE) { if($mfolder->setParent($folder)) { header('Content-Type: application/json'); - echo json_encode(array('success'=>true, 'message'=>'Folder moved', 'data'=>'')); + echo json_encode(array('success'=>true, 'message'=>getMLText('splash_move_folder'), 'data'=>'')); } else { header('Content-Type: application/json'); echo json_encode(array('success'=>false, 'message'=>'Error moving folder', 'data'=>'')); } } else { header('Content-Type: application/json'); - echo json_encode(array('success'=>false, 'message'=>'No access on destination folder', 'data'=>'')); + echo json_encode(array('success'=>false, 'message'=>getMLText('access_denied'), 'data'=>'')); } } else { header('Content-Type: application/json'); - echo json_encode(array('success'=>false, 'message'=>'No destination folder', 'data'=>'')); + echo json_encode(array('success'=>false, 'message'=>getMLText('invalid_folder_id'), 'data'=>'')); } } else { header('Content-Type: application/json'); - echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); + echo json_encode(array('success'=>false, 'message'=>getMLText('access_denied'), 'data'=>'')); } } else { header('Content-Type: application/json'); - echo json_encode(array('success'=>false, 'message'=>'No folder', 'data'=>'')); + echo json_encode(array('success'=>false, 'message'=>getMLText('invalid_folder_id'), 'data'=>'')); } } } @@ -278,23 +278,23 @@ switch($command) { echo json_encode(array('success'=>true, 'message'=>getMLText('splash_move_document'), 'data'=>'')); } else { header('Content-Type: application/json'); - echo json_encode(array('success'=>false, 'message'=>'Error moving folder', 'data'=>'')); + echo json_encode(array('success'=>false, 'message'=>'Error moving document', 'data'=>'')); } } else { header('Content-Type: application/json'); - echo json_encode(array('success'=>false, 'message'=>'No access on destination folder', 'data'=>'')); + echo json_encode(array('success'=>false, 'message'=>getMLText('access_denied'), 'data'=>'')); } } else { header('Content-Type: application/json'); - echo json_encode(array('success'=>false, 'message'=>'No destination folder', 'data'=>'')); + echo json_encode(array('success'=>false, 'message'=>getMLText('invalid_folder_id'), 'data'=>'')); } } else { header('Content-Type: application/json'); - echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); + echo json_encode(array('success'=>false, 'message'=>getMLText('access_denied'), 'data'=>'')); } } else { header('Content-Type: application/json'); - echo json_encode(array('success'=>false, 'message'=>'No folder', 'data'=>'')); + echo json_encode(array('success'=>false, 'message'=>getMLText('invalid_doc_id'), 'data'=>'')); } } } @@ -310,6 +310,21 @@ switch($command) { if($folder) { if ($folder->getAccessMode($user) >= M_READWRITE) { if($folder->remove()) { + if ($notifier) { + $subject = "folder_deleted_email_subject"; + $message = "folder_deleted_email_body"; + $params = array(); + $params['name'] = $foldername; + $params['folder_path'] = $parent->getFolderPathPlain(); + $params['username'] = $user->getFullName(); + $params['sitename'] = $settings->_siteName; + $params['http_root'] = $settings->_httpRoot; + $params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$parent->getID(); + $notifier->toList($user, $nl["users"], $subject, $message, $params); + foreach ($nl["groups"] as $grp) { + $notifier->toGroup($user, $grp, $subject, $message, $params); + } + } header('Content-Type: application/json'); echo json_encode(array('success'=>true, 'message'=>'', 'data'=>'')); } else { @@ -318,11 +333,11 @@ switch($command) { } } else { header('Content-Type: application/json'); - echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); + echo json_encode(array('success'=>false, 'message'=>getMLText('access_denied'), 'data'=>'')); } } else { header('Content-Type: application/json'); - echo json_encode(array('success'=>false, 'message'=>'No folder', 'data'=>'')); + echo json_encode(array('success'=>false, 'message'=>getMLText('invalid_folder_id'), 'data'=>'')); } } } @@ -382,11 +397,11 @@ switch($command) { } } else { header('Content-Type: application/json'); - echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); + echo json_encode(array('success'=>false, 'message'=>getMLText('access_denied'), 'data'=>'')); } } else { header('Content-Type: application/json'); - echo json_encode(array('success'=>false, 'message'=>'No document', 'data'=>'')); + echo json_encode(array('success'=>false, 'message'=>getMLText('invalid_doc_id'), 'data'=>'')); } } } @@ -405,11 +420,11 @@ switch($command) { echo json_encode(array('success'=>false, 'message'=>'Error unlocking document', 'data'=>'')); } else { header('Content-Type: application/json'); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>'')); + echo json_encode(array('success'=>true, 'message'=>getMLText('splash_document_unlocked'), 'data'=>'')); } } else { header('Content-Type: application/json'); - echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); + echo json_encode(array('success'=>false, 'message'=>getMLText('access_denied'), 'data'=>'')); } } else { if (!$document->setLocked($user)) { @@ -417,16 +432,16 @@ switch($command) { echo json_encode(array('success'=>false, 'message'=>'Error locking document', 'data'=>'')); } else { header('Content-Type: application/json'); - echo json_encode(array('success'=>true, 'message'=>'', 'data'=>'')); + echo json_encode(array('success'=>true, 'message'=>getMLText('splash_document_locked'), 'data'=>'')); } } } else { header('Content-Type: application/json'); - echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); + echo json_encode(array('success'=>false, 'message'=>getMLText('access_denied'), 'data'=>'')); } } else { header('Content-Type: application/json'); - echo json_encode(array('success'=>false, 'message'=>'No document', 'data'=>'')); + echo json_encode(array('success'=>false, 'message'=>getMLText('invalid_doc_id'), 'data'=>'')); } } break; /* }}} */ diff --git a/op/op.ImportFS.php b/op/op.ImportFS.php new file mode 100644 index 000000000..162633fc3 --- /dev/null +++ b/op/op.ImportFS.php @@ -0,0 +1,82 @@ +getFolder($targetid); +if (!is_object($folder)) { + echo "Could not find specified folder\n"; + exit(1); +} + +if ($folder->getAccessMode($user) < M_READWRITE) { + UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); +} + +if (empty($_GET["dropfolderfileform1"])) { + UI::exitError(getMLText("admin_tools"),getMLText("invalid_target_folder")); +} +$dirname = $settings->_dropFolderDir.'/'.$user->getLogin()."/".$_GET["dropfolderfileform1"]; +if(!is_dir($dirname)) { + UI::exitError(getMLText("admin_tools"),getMLText("invalid_target_folder")); +} + +function import_folder($dirname, $folder) { /* {{{ */ + global $user; + + $d = dir($dirname); + $sequence = 1; + while(false !== ($entry = $d->read())) { + $path = $dirname.'/'.$entry; + if($entry != '.' && $entry != '..' && $entry != '.svn') { + if(is_file($path)) { + $name = basename($path); + $filetmp = $path; + + $reviewers = array(); + $approvers = array(); + $comment = ''; + $version_comment = ''; + $reqversion = 1; + $expires = false; + $keywords = ''; + $categories = array(); + + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $mimetype = finfo_file($finfo, $path); + $lastDotIndex = strrpos($path, "."); + if (is_bool($lastDotIndex) && !$lastDotIndex) $filetype = "."; + else $filetype = substr($path, $lastDotIndex); + + echo $mimetype." - ".$filetype." - ".$path."\n"; + $res = $folder->addDocument($name, $comment, $expires, $user, $keywords, + $categories, $filetmp, $name, + $filetype, $mimetype, $sequence, $reviewers, + $approvers, $reqversion, $version_comment); + + if (is_bool($res) && !$res) { + echo "Could not add document to folder\n"; + exit(1); + } + set_time_limit(1200); + } elseif(is_dir($path)) { + $name = basename($path); + $newfolder = $folder->addSubFolder($name, '', $user, $sequence); + import_folder($path, $newfolder); + } + $sequence++; + } + } +} /* }}} */ + +header("Content-Type: text/plain"); +import_folder($dirname, $folder); + diff --git a/out/out.DropFolderChooser.php b/out/out.DropFolderChooser.php index 8c94d917e..f5f58c661 100644 --- a/out/out.DropFolderChooser.php +++ b/out/out.DropFolderChooser.php @@ -38,12 +38,18 @@ if(substr($settings->_dropFolderDir, -1, 1) == DIRECTORY_SEPARATOR) else $dropfolderdir = $settings->_dropFolderDir; +if(isset($_GET['showfolders']) && $_GET['showfolders']) + $showfolders = true; +else + $showfolders = false; + $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); $view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user, 'dropfolderdir'=>$dropfolderdir, 'dropfolderfile'=>$_GET["dropfolderfile"], 'form'=>$form)); if($view) { $view->setParam('cachedir', $settings->_cacheDir); $view->setParam('previewWidthList', $settings->_previewWidthList); $view->setParam('timeout', $settings->_cmdTimeout); + $view->setParam('showfolders', $showfolders); $view($_GET); exit; } diff --git a/out/out.ImportFS.php b/out/out.ImportFS.php new file mode 100644 index 000000000..ff9a44ded --- /dev/null +++ b/out/out.ImportFS.php @@ -0,0 +1,37 @@ +isAdmin()) { + UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); +} + +$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); +$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user, 'dropfolderdir'=>$settings->_dropFolderDir)); +if($view) { + $view($_GET); + exit; +} + + diff --git a/styles/bootstrap/application.js b/styles/bootstrap/application.js index cd641a69d..2ab0f7b57 100644 --- a/styles/bootstrap/application.js +++ b/styles/bootstrap/application.js @@ -136,7 +136,6 @@ $(document).ready( function() { $.get('../op/op.Ajax.php', { command: 'addtoclipboard', type: type, id: id }, function(data) { - console.log(data); if(data.success) { $("#main-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=mainclipboard') $("#menu-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=menuclipboard') @@ -172,7 +171,6 @@ $(document).ready( function() { $.get('../op/op.Ajax.php', { command: 'removefromclipboard', type: type, id: id }, function(data) { - console.log(data); if(data.success) { $("#main-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=mainclipboard') $("#menu-clipboard").html('Loading').load('../op/op.Ajax.php?command=view&view=menuclipboard') @@ -207,7 +205,6 @@ $(document).ready( function() { $.get('../op/op.Ajax.php', { command: 'tooglelockdocument', id: id }, function(data) { - console.log(data); if(data.success) { $("#table-row-document-"+id).html('Loading').load('../op/op.Ajax.php?command=view&view=documentlistrow&id='+id) noty({ @@ -243,7 +240,6 @@ $(document).ready( function() { { command: 'movefolder', folderid: attr_source, targetfolderid: attr_dest, formtoken: attr_formtoken }, function(data) { if(data.success) { - console.log(data); noty({ text: data.msg, type: data.success ? 'success' : 'error', @@ -268,7 +264,6 @@ $(document).ready( function() { { command: 'movedocument', docid: attr_source, targetfolderid: attr_dest, formtoken: attr_formtoken }, function(data) { if(data.success) { - console.log(data); noty({ text: data.msg, type: data.success ? 'success' : 'error', @@ -298,7 +293,6 @@ $(document).ready( function() { phrase: $(ev.target).parent().children('[name=missing-lang-translation]').val() }, success: function(data, textStatus) { -// console.log(data); noty({ text: data.message, type: data.success ? 'success' : 'error', @@ -343,7 +337,6 @@ $(document).ready( function() { } } else url = href; - // console.log('Calling '+url); $.get(url, function(data) { element.html(data); $(".chzn-select").chosen(); @@ -367,7 +360,6 @@ $(document).ready( function() { } else { url += "&"+param1; } - // console.log("Calling: "+url); element.prepend('
'); $.get(url, function(data) { element.html(data); @@ -487,7 +479,6 @@ function onAddClipboard(ev) { /* {{{ */ data: formData, success: function(data){ status.setProgress(100); -// console.log(data); if(data.success) { noty({ text: data.message, diff --git a/views/bootstrap/class.BackupTools.php b/views/bootstrap/class.BackupTools.php index 6187f0fba..e15a998d1 100644 --- a/views/bootstrap/class.BackupTools.php +++ b/views/bootstrap/class.BackupTools.php @@ -174,7 +174,7 @@ class SeedDMS_View_BackupTools extends SeedDMS_Bootstrap_Style { $this->contentContainerEnd(); // files deletion ////////////////////////////////////////////////////////////// - + /* $this->contentHeading(getMLText("files_deletion")); $this->contentContainerStart(); print "

".getMLText("files_deletion_warning")."

\n"; @@ -185,6 +185,7 @@ class SeedDMS_View_BackupTools extends SeedDMS_Bootstrap_Style { print "\n"; $this->contentContainerEnd(); + */ $this->htmlEndPage(); } /* }}} */ diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 85a17dcfb..41ca2dd9d 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -1295,11 +1295,11 @@ $('#acceptkeywords').click(function(ev) { } } /* }}} */ - function printDropFolderChooserHtml($formName, $dropfolderfile="") { /* {{{ */ + function printDropFolderChooserHtml($formName, $dropfolderfile="", $showfolders=0) { /* {{{ */ print "
\n"; print ""; print ""; - print "".getMLText("choose_target_file")."…\n"; + print "".getMLText("choose_target_file")."…\n"; print "
\n"; ?>