mirror of
				https://git.code.sf.net/p/seeddms/code
				synced 2025-10-25 02:01:19 +00:00 
			
		
		
		
	new implementation of folder hierachy
This commit is contained in:
		
							parent
							
								
									a404dfd03f
								
							
						
					
					
						commit
						aae4b76907
					
				|  | @ -42,13 +42,15 @@ class SeedDMS_Bootstrap_Style extends SeedDMS_View_Common { | |||
| 		echo '<link href="../styles/'.$this->theme.'/font-awesome/css/font-awesome.css" rel="stylesheet">'."\n"; | ||||
| 		echo '<link href="../styles/'.$this->theme.'/datepicker/css/datepicker.css" rel="stylesheet">'."\n"; | ||||
| 		echo '<link href="../styles/'.$this->theme.'/chosen/css/chosen.css" rel="stylesheet">'."\n"; | ||||
| 		echo '<link href="../styles/'.$this->theme.'/jqtree/jqtree.css" rel="stylesheet">'."\n"; | ||||
| 		if($this->extraheader) | ||||
| 			echo $this->extraheader; | ||||
| 		echo '<script type="text/javascript" src="../styles/bootstrap/jquery/jquery.min.js"></script>'."\n"; | ||||
| 		echo '<script type="text/javascript" src="../styles/'.$this->theme.'/jquery/jquery.min.js"></script>'."\n"; | ||||
| 		echo '<script type="text/javascript" src="../js/jquery.passwordstrength.js"></script>'."\n"; | ||||
| 		echo '<script type="text/javascript" src="../styles/bootstrap/noty/jquery.noty.js"></script>'."\n"; | ||||
| 		echo '<script type="text/javascript" src="../styles/bootstrap/noty/layouts/topRight.js"></script>'."\n"; | ||||
| 		echo '<script type="text/javascript" src="../styles/bootstrap/noty/themes/default.js"></script>'."\n"; | ||||
| 		echo '<script type="text/javascript" src="../styles/'.$this->theme.'/noty/jquery.noty.js"></script>'."\n"; | ||||
| 		echo '<script type="text/javascript" src="../styles/'.$this->theme.'/noty/layouts/topRight.js"></script>'."\n"; | ||||
| 		echo '<script type="text/javascript" src="../styles/'.$this->theme.'/noty/themes/default.js"></script>'."\n"; | ||||
| 		echo '<script type="text/javascript" src="../styles/'.$this->theme.'/jqtree/tree.jquery.js"></script>'."\n"; | ||||
| 
 | ||||
| 		echo '<link rel="shortcut icon" href="../styles/'.$this->theme.'/favicon.ico" type="image/x-icon"/>'."\n"; | ||||
| 		if($this->params['session'] && $this->params['session']->getSu()) { | ||||
|  | @ -703,22 +705,13 @@ background-image: linear-gradient(to bottom, #882222, #111111);; | |||
| 	} /* }}} */ | ||||
| 	 | ||||
| 	function printDocumentChooser($formName) { /* {{{ */ | ||||
| ?>
 | ||||
| 		<script language="JavaScript"> | ||||
| 		var openDlg; | ||||
| 		function chooseDoc<?php print $formName ?>() {
 | ||||
| 			openDlg = open("../out/out.DocumentChooser.php?folderid=<?php echo $this->params['rootfolderid']?>&form=<?php echo urlencode($formName)?>", "openDlg", "width=480,height=480,scrollbars=yes,resizable=yes,status=yes"); | ||||
| 		} | ||||
| 		</script> | ||||
| 		<?php | ||||
| 		print "<input type=\"hidden\" id=\"docid".$formName."\" name=\"docid".$formName."\">"; | ||||
| 		print "<div class=\"input-append\">\n"; | ||||
| 		print "<input type=\"text\" id=\"choosedocsearch\" data-provide=\"typeahead\" name=\"docname".$formName."\" placeholder=\"".getMLText('type_to_search')."\" autocomplete=\"off\" />"; | ||||
| //		print "<button type=\"button\"  onclick=\"chooseDoc".$formName."();\">".getMLText("document")."...</button>";
 | ||||
| 		print "<a data-target=\"#docChooser\" href=\"out.DocumentChooser.php?form=".$formName."&folderid=".$this->params['rootfolderid']."\" role=\"button\" class=\"btn\" data-toggle=\"modal\">".getMLText("document")."…</a>\n"; | ||||
| 		print "<a data-target=\"#docChooser".$formName."\" href=\"out.DocumentChooser.php?form=".$formName."&folderid=".$this->params['rootfolderid']."\" role=\"button\" class=\"btn\" data-toggle=\"modal\">".getMLText("document")."…</a>\n"; | ||||
| 		print "</div>\n"; | ||||
| ?>
 | ||||
| <div class="modal hide" id="docChooser" tabindex="-1" role="dialog" aria-labelledby="docChooserLabel" aria-hidden="true"> | ||||
| <div class="modal hide" id="docChooser<?= $formName ?>" tabindex="-1" role="dialog" aria-labelledby="docChooserLabel" aria-hidden="true"> | ||||
|   <div class="modal-header"> | ||||
|     <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> | ||||
|     <h3 id="docChooserLabel"><?php printMLText("choose_target_document") ?></h3>
 | ||||
|  | @ -730,6 +723,14 @@ background-image: linear-gradient(to bottom, #882222, #111111);; | |||
|     <button class="btn btn-primary" data-dismiss="modal" aria-hidden="true"><?php printMLText("close") ?></button>
 | ||||
|   </div> | ||||
| </div> | ||||
| 		<script language="JavaScript"> | ||||
| modalDocChooser<?= $formName ?> = $('#docChooser<?= $formName ?>');
 | ||||
| function documentSelected(id, name) { | ||||
| 	$('#docid<?= $formName ?>').val(id); | ||||
| 	$('#choosedocsearch').val(name); | ||||
| 	modalDocChooser<?= $formName ?>.modal('hide');
 | ||||
| } | ||||
| 		</script> | ||||
| <?php | ||||
| 	} /* }}} */ | ||||
| 
 | ||||
|  | @ -756,7 +757,9 @@ background-image: linear-gradient(to bottom, #882222, #111111);; | |||
| <script language="JavaScript"> | ||||
| /* Set up a callback which is called when a folder in the tree is selected */ | ||||
| modalFolderChooser<?= $formName ?> = $('#folderChooser<?= $formName ?>');
 | ||||
| function folderSelectedCallback<?= $formName ?>(id, name) {
 | ||||
| function folderSelected(id, name) { | ||||
| 	$('#targetid<?= $formName ?>').val(id); | ||||
| 	$('#choosefoldersearch').val(name); | ||||
| 	modalFolderChooser<?= $formName ?>.modal('hide');
 | ||||
| } | ||||
| </script> | ||||
|  | @ -1031,43 +1034,98 @@ function folderSelectedCallback<?= $formName ?>(id, name) { | |||
| 		if ($folderID == $this->params['rootfolderid']) print "</ul>\n"; | ||||
| 	} /* }}} */ | ||||
| 
 | ||||
| 	function printTreeNavigation($folderid, $showtree){ /* {{{ */ | ||||
| ?>
 | ||||
| 		<script language="JavaScript"> | ||||
| 		function toggleTree(id){ | ||||
| 			 | ||||
| 			obj = document.getElementById("tree" + id); | ||||
| 			 | ||||
| 			if ( obj.style.display == "none" ){ | ||||
| 				obj.style.display = ""; | ||||
| 				$("i[name='treeimg" +id+ "']").removeClass("icon-folder-close"); | ||||
| 				$("i[name='treeimg" +id+ "']").addClass("icon-folder-open"); | ||||
| 				$("i[name='treedot" +id+ "']").removeClass("icon-plus-sign"); | ||||
| 				$("i[name='treedot" +id+ "']").addClass("icon-minus-sign");		 | ||||
| 			}else{ | ||||
| 				obj.style.display = "none"; | ||||
| 				$("i[name='treeimg" +id+ "']").removeClass("icon-folder-open"); | ||||
| 				$("i[name='treeimg" +id+ "']").addClass("icon-folder-close"); | ||||
| 				$("i[name='treedot" +id+ "']").removeClass("icon-minus-sign"); | ||||
| 				$("i[name='treedot" +id+ "']").addClass("icon-plus-sign"); | ||||
| 			} | ||||
| 
 | ||||
| 	function printNewTreeNavigation($folderid, $showtree, $showdocs=0) { /* {{{ */ | ||||
| 		function jqtree($path, $folder, $user, $showdocs=1) { | ||||
| 			if($path) { | ||||
| 				$pathfolder = array_shift($path); | ||||
| 				$subfolders = $folder->getSubFolders(); | ||||
| 				$subfolders = SeedDMS_Core_DMS::filterAccess($subfolders, $user, M_READ); | ||||
| 				$children = array(); | ||||
| 				foreach($subfolders as $subfolder) { | ||||
| 					$node = array('label'=>$subfolder->getName(), 'id'=>$subfolder->getID(), 'load_on_demand'=>$subfolder->hasSubFolders() ? true : false, 'is_folder'=>true); | ||||
| 					if($pathfolder->getID() == $subfolder->getID()) { | ||||
| 						if($showdocs) { | ||||
| 							$documents = $folder->getDocuments(); | ||||
| 							$documents = SeedDMS_Core_DMS::filterAccess($documents, $user, M_READ); | ||||
| 							foreach($documents as $document) { | ||||
| 								$node2 = array('label'=>$document->getName(), 'id'=>$document->getID(), 'load_on_demand'=>false, 'is_folder'=>false); | ||||
| 								$children[] = $node2; | ||||
| 							} | ||||
| 						} | ||||
| 						$node['children'] = jqtree($path, $subfolder, $user, $showdocs); | ||||
| 					} | ||||
| 					$children[] = $node; | ||||
| 				} | ||||
| 				return $children; | ||||
| 			} else | ||||
| 				return array(); | ||||
| 		} | ||||
| 		</script> | ||||
| 
 | ||||
| 		if($folderid) { | ||||
| 			$folder = $this->params['dms']->getFolder($folderid); | ||||
| 			$path = $folder->getPath(); | ||||
| 			$folder = array_shift($path); | ||||
| 			$node = array('label'=>$folder->getName(), 'id'=>$folder->getID(), 'load_on_demand'=>true, 'is_folder'=>true); | ||||
| 			if(!$folder->hasSubFolders()) { | ||||
| 				$node['load_on_demand'] = false; | ||||
| 				$node['children'] = array(); | ||||
| 			} else { | ||||
| 				$node['children'] = jqtree($path, $folder, $this->params['user'], $showdocs); | ||||
| 			} | ||||
| 			$tree[] = $node; | ||||
| 			 | ||||
| 		} else { | ||||
| 			$root = $this->params['dms']->getFolder($this->params['rootfolderid']); | ||||
| 			$tree = array(array('label'=>$root->getName(), 'id'=>$root->getID(), 'load_on_demand'=>true, 'is_folder'=>true)); | ||||
| 		} | ||||
| 
 | ||||
| 		echo "<div id=\"jqtree\" style=\"margin-left: 20px;\" data-url=\"../op/op.Ajax.php?command=subtree&showdocs=".$showdocs."\"></div>\n"; | ||||
| ?>
 | ||||
| 	<script language="JavaScript"> | ||||
| var data = <?php echo json_encode($tree); ?>;
 | ||||
| $(function() { | ||||
|   $('#jqtree').tree({ | ||||
| 		data: data, | ||||
| 		openedIcon: '<i class="icon-minus-sign"></i>', | ||||
| 		closedIcon: '<i class="icon-plus-sign"></i>', | ||||
| 		onCanSelectNode: function(node) { | ||||
| 			if(node.is_folder) | ||||
| 				folderSelected(node.id, node.name); | ||||
| 			else | ||||
| 				documentSelected(node.id, node.name); | ||||
| 			console.log(node); | ||||
| 		}, | ||||
| 		autoOpen: true, | ||||
| 		drapAndDrop: true, | ||||
|     onCreateLi: function(node, $li) { | ||||
|         // Add 'icon' span before title
 | ||||
| 				if(node.is_folder) | ||||
| 					$li.find('.jqtree-title').before('<i class="icon-folder-close-alt" rel="folder_' + node.id + '" ondragover="allowDrop(event)" ondrop="onDrop(event)"></i> ').attr('rel', 'folder_' + node.id).attr('ondragover', 'allowDrop(event)').attr('ondrop', 'onDrop(event)'); | ||||
| 				else | ||||
| 					$li.find('.jqtree-title').before('<i class="icon-file"></i> '); | ||||
|     } | ||||
|   }); | ||||
| }); | ||||
| 	</script> | ||||
| <?php | ||||
| 	} /* }}} */ | ||||
| 
 | ||||
| 	function printTreeNavigation($folderid, $showtree){ /* {{{ */ | ||||
| 		if ($showtree==1){ | ||||
| 
 | ||||
| 			$this->contentHeading("<a href=\"../out/out.ViewFolder.php?folderid=". $folderid."&showtree=0\"><i class=\"icon-minus-sign\"></i></a>", true); | ||||
| 			$this->contentContainerStart(); | ||||
| 			$this->printFoldersTree(M_READ, -1, $this->params['rootfolderid'], $folderid, true); | ||||
| ?>
 | ||||
| 	<script language="JavaScript"> | ||||
| 	function folderSelected(id, name) { | ||||
| 		window.location = '../out/out.ViewFolder.php?folderid=' + id; | ||||
| 	} | ||||
| 	</script> | ||||
| <?php | ||||
| 			$this->printNewTreeNavigation($folderid, $showtree, 0); | ||||
| 			$this->contentContainerEnd(); | ||||
| 
 | ||||
| 		}else{ | ||||
| 		 | ||||
| 		} else { | ||||
| 			$this->contentHeading("<a href=\"../out/out.ViewFolder.php?folderid=". $folderid."&showtree=1\"><i class=\"icon-plus-sign\"></i></a>", true); | ||||
| 		} | ||||
| 
 | ||||
| 	} /* }}} */ | ||||
| 
 | ||||
| 	function printClipboard($clipboard){ /* {{{ */ | ||||
|  |  | |||
|  | @ -47,16 +47,15 @@ class SeedDMS_View_DocumentChooser extends SeedDMS_Bootstrap_Style { | |||
| 			print "<ul style='list-style-type: none;'>\n"; | ||||
| 		} | ||||
| 		print "  <li>\n"; | ||||
| 		print "<img class='treeicon' src=\""; | ||||
| 		if ($level == 0) $this->printImgPath("minus.png"); | ||||
| 		else if (count($subFolders) + count($documents) > 0) $this->printImgPath("minus.png"); | ||||
| 		print "<i class=\""; | ||||
| 		if ($level == 0) echo "icon-minus-sign"; | ||||
| 		else if (count($subFolders) + count($documents) > 0) echo "icon-minus-sign"; | ||||
| 		else $this->printImgPath("blank.png"); | ||||
| 		print "\" border=0>\n"; | ||||
| 		print "\"></i>\n"; | ||||
| 		if ($folder->getAccessMode($this->user) >= M_READ) { | ||||
| 			print "<img src=\"".$this->getImgPath("folder_opened.gif")."\" border=0>".htmlspecialchars($folder->getName())."\n"; | ||||
| 		} | ||||
| 		else | ||||
| 			print "<img src=\"".$this->getImgPath("folder_opened.gif")."\" width=18 height=18 border=0>".htmlspecialchars($folder->getName())."\n"; | ||||
| 			print "<i class=\"icon-folder-open\"></i> ".htmlspecialchars($folder->getName())."\n"; | ||||
| 		} else | ||||
| 			print "<i class=\"icon-folder-open\"></i> ".htmlspecialchars($folder->getName())."\n"; | ||||
| 		print "  </li>\n"; | ||||
| 
 | ||||
| 		print "<ul style='list-style-type: none;'>"; | ||||
|  | @ -70,17 +69,17 @@ class SeedDMS_View_DocumentChooser extends SeedDMS_Bootstrap_Style { | |||
| 				$documents_  = SeedDMS_Core_DMS::filterAccess($subFolders[$i]->getDocuments(), $this->user, M_READ); | ||||
| 				 | ||||
| 				if (count($subFolders_) + count($documents_) > 0) | ||||
| 					print "<a href=\"out.DocumentChooser.php?form=".$this->form."&folderid=".$subFolders[$i]->getID()."\"><img class='treeicon' src=\"".$this->getImgPath("plus.png")."\" border=0></a>"; | ||||
| 					print "<a href=\"out.DocumentChooser.php?form=".$this->form."&folderid=".$subFolders[$i]->getID()."\"><i class='icon-plus-sign'></i></a> "; | ||||
| 				else | ||||
| 					print "<img class='treeicon' src=\"".$this->getImgPath("blank.png")."\">"; | ||||
| 				print "<img src=\"".$this->getImgPath("folder_closed.gif")."\" border=0>".htmlspecialchars($subFolders[$i]->getName())."\n"; | ||||
| 					print "<i class='icon-circle'></i> "; | ||||
| 				print "<i class=\"icon-folder-close\"></i> ".htmlspecialchars($subFolders[$i]->getName())."\n"; | ||||
| 				print "</li>"; | ||||
| 			} | ||||
| 		} | ||||
| 		for ($i = 0; $i < count($documents); $i++) { | ||||
| 			print "<li>\n"; | ||||
| 			print "<img class='treeicon' src=\"images/blank.png\">"; | ||||
| 			print "<a  class=\"foldertree_selectable\" href=\"javascript:documentSelected(".$documents[$i]->getID().",'".str_replace("'", "\\'", htmlspecialchars($documents[$i]->getName()))."');\"><img src=\"images/file.gif\" border=0>".htmlspecialchars($documents[$i]->getName())."</a>"; | ||||
| 			print "<i class='icon-circle'></i> "; | ||||
| 			print "<i class=\"icon-file\"></i> <a class=\"foldertree_selectable\" href=\"javascript:documentSelected(".$documents[$i]->getID().",'".str_replace("'", "\\'", htmlspecialchars($documents[$i]->getName()))."');\">".htmlspecialchars($documents[$i]->getName())."</a>"; | ||||
| 			print "</li>"; | ||||
| 		} | ||||
| 
 | ||||
|  | @ -98,36 +97,11 @@ class SeedDMS_View_DocumentChooser extends SeedDMS_Bootstrap_Style { | |||
| 		$this->form = $this->params['form']; | ||||
| 
 | ||||
| 		$this->htmlStartPage(getMLText("choose_target_document")); | ||||
| //		$this->globalBanner();
 | ||||
| //		$this->pageNavigation(getMLText("choose_target_document"));
 | ||||
| ?>
 | ||||
| 
 | ||||
| <script language="JavaScript"> | ||||
| var targetName; | ||||
| var targetID; | ||||
| 
 | ||||
| function documentSelected(id, name) { | ||||
| 	targetName.value = name; | ||||
| 	targetID.value = id; | ||||
| //	window.close();
 | ||||
| //	return true;
 | ||||
| } | ||||
| </script> | ||||
| 
 | ||||
| <?php | ||||
| 		$this->contentContainerStart(); | ||||
| 		$this->printNewTreeNavigation($folderid, $showtree, 1); | ||||
| 		$this->printTree($folder->getPath()); | ||||
| 		$this->contentContainerEnd(); | ||||
| ?>
 | ||||
| 
 | ||||
| <script language="JavaScript"> | ||||
| targetName = document.<?php echo $this->form?>.docname<?php print $this->form ?>;
 | ||||
| targetID   = document.<?php echo $this->form?>.docid<?php print $this->form ?>;
 | ||||
| </script> | ||||
| 
 | ||||
| <?php | ||||
| 		echo "</body>\n</html>\n"; | ||||
| //		$this->htmlEndPage();
 | ||||
| 	} /* }}} */ | ||||
| } | ||||
| ?>
 | ||||
|  |  | |||
|  | @ -40,40 +40,11 @@ class SeedDMS_View_FolderChooser extends SeedDMS_Bootstrap_Style { | |||
| 		$rootfolderid = $this->params['rootfolderid']; | ||||
| 
 | ||||
| 		$this->htmlStartPage(getMLText("choose_target_folder")); | ||||
| //		$this->globalBanner();
 | ||||
| ?>
 | ||||
| 
 | ||||
| <script language="JavaScript"> | ||||
| function toggleTree(id){ | ||||
| 	obj = document.getElementById("tree" + id); | ||||
| 	if ( obj.style.display == "none" ) obj.style.display = ""; | ||||
| 	else obj.style.display = "none"; | ||||
| } | ||||
| 
 | ||||
| var targetName; | ||||
| var targetID; | ||||
| function folderSelected(id, name) { | ||||
| 	targetName.value = name; | ||||
| 	targetID.value = id; | ||||
| 	if(typeof(folderSelectedCallback<?= $form ?>) !== 'undefined')
 | ||||
| 		folderSelectedCallback<?= $form ?>(id, name);
 | ||||
| } | ||||
| </script> | ||||
| 
 | ||||
| <?php | ||||
| 		$this->contentContainerStart(); | ||||
| 		$this->printFoldersTree($mode, $exclude, $rootfolderid); | ||||
| 		$this->printNewTreeNavigation($folderid, $showtree, 0); | ||||
| //		$this->printFoldersTree($mode, $exclude, $rootfolderid);
 | ||||
| 		$this->contentContainerEnd(); | ||||
| ?>
 | ||||
| 
 | ||||
| <script language="JavaScript"> | ||||
| targetName = document.<?php echo $form?>.targetname<?php print $form ?>;
 | ||||
| targetID   = document.<?php echo $form?>.targetid<?php print $form ?>;
 | ||||
| </script> | ||||
| 
 | ||||
| <?php | ||||
| 		echo "</body>\n</html>\n"; | ||||
| //		$this->htmlEndPage();
 | ||||
| 	} /* }}} */ | ||||
| } | ||||
| ?>
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Uwe Steinmann
						Uwe Steinmann