new implementation of folder hierachy

This commit is contained in:
Uwe Steinmann 2013-05-24 17:32:12 +02:00
parent a404dfd03f
commit aae4b76907
3 changed files with 119 additions and 116 deletions

View File

@ -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>
<?php
if ($showtree==1){
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){ /* {{{ */

View File

@ -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();
} /* }}} */
}
?>

View File

@ -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();
} /* }}} */
}
?>