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.'/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.'/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.'/chosen/css/chosen.css" rel="stylesheet">'."\n";
echo '<link href="../styles/'.$this->theme.'/jqtree/jqtree.css" rel="stylesheet">'."\n";
if($this->extraheader) if($this->extraheader)
echo $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="../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/'.$this->theme.'/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/'.$this->theme.'/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/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"; echo '<link rel="shortcut icon" href="../styles/'.$this->theme.'/favicon.ico" type="image/x-icon"/>'."\n";
if($this->params['session'] && $this->params['session']->getSu()) { if($this->params['session'] && $this->params['session']->getSu()) {
@ -703,22 +705,13 @@ background-image: linear-gradient(to bottom, #882222, #111111);;
} /* }}} */ } /* }}} */
function printDocumentChooser($formName) { /* {{{ */ 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 "<input type=\"hidden\" id=\"docid".$formName."\" name=\"docid".$formName."\">";
print "<div class=\"input-append\">\n"; 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 "<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".$formName."\" 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\" href=\"out.DocumentChooser.php?form=".$formName."&folderid=".$this->params['rootfolderid']."\" role=\"button\" class=\"btn\" data-toggle=\"modal\">".getMLText("document")."…</a>\n";
print "</div>\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"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="docChooserLabel"><?php printMLText("choose_target_document") ?></h3> <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> <button class="btn btn-primary" data-dismiss="modal" aria-hidden="true"><?php printMLText("close") ?></button>
</div> </div>
</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 <?php
} /* }}} */ } /* }}} */
@ -756,7 +757,9 @@ background-image: linear-gradient(to bottom, #882222, #111111);;
<script language="JavaScript"> <script language="JavaScript">
/* Set up a callback which is called when a folder in the tree is selected */ /* Set up a callback which is called when a folder in the tree is selected */
modalFolderChooser<?= $formName ?> = $('#folderChooser<?= $formName ?>'); modalFolderChooser<?= $formName ?> = $('#folderChooser<?= $formName ?>');
function folderSelectedCallback<?= $formName ?>(id, name) { function folderSelected(id, name) {
$('#targetid<?= $formName ?>').val(id);
$('#choosefoldersearch').val(name);
modalFolderChooser<?= $formName ?>.modal('hide'); modalFolderChooser<?= $formName ?>.modal('hide');
} }
</script> </script>
@ -1031,43 +1034,98 @@ function folderSelectedCallback<?= $formName ?>(id, name) {
if ($folderID == $this->params['rootfolderid']) print "</ul>\n"; if ($folderID == $this->params['rootfolderid']) print "</ul>\n";
} /* }}} */ } /* }}} */
function printTreeNavigation($folderid, $showtree){ /* {{{ */ function printNewTreeNavigation($folderid, $showtree, $showdocs=0) { /* {{{ */
?> function jqtree($path, $folder, $user, $showdocs=1) {
<script language="JavaScript"> if($path) {
function toggleTree(id){ $pathfolder = array_shift($path);
$subfolders = $folder->getSubFolders();
obj = document.getElementById("tree" + id); $subfolders = SeedDMS_Core_DMS::filterAccess($subfolders, $user, M_READ);
$children = array();
if ( obj.style.display == "none" ){ foreach($subfolders as $subfolder) {
obj.style.display = ""; $node = array('label'=>$subfolder->getName(), 'id'=>$subfolder->getID(), 'load_on_demand'=>$subfolder->hasSubFolders() ? true : false, 'is_folder'=>true);
$("i[name='treeimg" +id+ "']").removeClass("icon-folder-close"); if($pathfolder->getID() == $subfolder->getID()) {
$("i[name='treeimg" +id+ "']").addClass("icon-folder-open"); if($showdocs) {
$("i[name='treedot" +id+ "']").removeClass("icon-plus-sign"); $documents = $folder->getDocuments();
$("i[name='treedot" +id+ "']").addClass("icon-minus-sign"); $documents = SeedDMS_Core_DMS::filterAccess($documents, $user, M_READ);
}else{ foreach($documents as $document) {
obj.style.display = "none"; $node2 = array('label'=>$document->getName(), 'id'=>$document->getID(), 'load_on_demand'=>false, 'is_folder'=>false);
$("i[name='treeimg" +id+ "']").removeClass("icon-folder-open"); $children[] = $node2;
$("i[name='treeimg" +id+ "']").addClass("icon-folder-close"); }
$("i[name='treedot" +id+ "']").removeClass("icon-minus-sign"); }
$("i[name='treedot" +id+ "']").addClass("icon-plus-sign"); $node['children'] = jqtree($path, $subfolder, $user, $showdocs);
}
$children[] = $node;
}
return $children;
} else
return array();
} }
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();
?>
<script language="JavaScript">
function folderSelected(id, name) {
window.location = '../out/out.ViewFolder.php?folderid=' + id;
} }
</script> </script>
<?php <?php
$this->printNewTreeNavigation($folderid, $showtree, 0);
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);
$this->contentContainerEnd(); $this->contentContainerEnd();
} else { } else {
$this->contentHeading("<a href=\"../out/out.ViewFolder.php?folderid=". $folderid."&showtree=1\"><i class=\"icon-plus-sign\"></i></a>", true); $this->contentHeading("<a href=\"../out/out.ViewFolder.php?folderid=". $folderid."&showtree=1\"><i class=\"icon-plus-sign\"></i></a>", true);
} }
} /* }}} */ } /* }}} */
function printClipboard($clipboard){ /* {{{ */ 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 "<ul style='list-style-type: none;'>\n";
} }
print " <li>\n"; print " <li>\n";
print "<img class='treeicon' src=\""; print "<i class=\"";
if ($level == 0) $this->printImgPath("minus.png"); if ($level == 0) echo "icon-minus-sign";
else if (count($subFolders) + count($documents) > 0) $this->printImgPath("minus.png"); else if (count($subFolders) + count($documents) > 0) echo "icon-minus-sign";
else $this->printImgPath("blank.png"); else $this->printImgPath("blank.png");
print "\" border=0>\n"; print "\"></i>\n";
if ($folder->getAccessMode($this->user) >= M_READ) { if ($folder->getAccessMode($this->user) >= M_READ) {
print "<img src=\"".$this->getImgPath("folder_opened.gif")."\" border=0>".htmlspecialchars($folder->getName())."\n"; print "<i class=\"icon-folder-open\"></i> ".htmlspecialchars($folder->getName())."\n";
} } else
else print "<i class=\"icon-folder-open\"></i> ".htmlspecialchars($folder->getName())."\n";
print "<img src=\"".$this->getImgPath("folder_opened.gif")."\" width=18 height=18 border=0>".htmlspecialchars($folder->getName())."\n";
print " </li>\n"; print " </li>\n";
print "<ul style='list-style-type: none;'>"; 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); $documents_ = SeedDMS_Core_DMS::filterAccess($subFolders[$i]->getDocuments(), $this->user, M_READ);
if (count($subFolders_) + count($documents_) > 0) 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 else
print "<img class='treeicon' src=\"".$this->getImgPath("blank.png")."\">"; print "<i class='icon-circle'></i> ";
print "<img src=\"".$this->getImgPath("folder_closed.gif")."\" border=0>".htmlspecialchars($subFolders[$i]->getName())."\n"; print "<i class=\"icon-folder-close\"></i> ".htmlspecialchars($subFolders[$i]->getName())."\n";
print "</li>"; print "</li>";
} }
} }
for ($i = 0; $i < count($documents); $i++) { for ($i = 0; $i < count($documents); $i++) {
print "<li>\n"; print "<li>\n";
print "<img class='treeicon' src=\"images/blank.png\">"; print "<i class='icon-circle'></i> ";
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-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>"; print "</li>";
} }
@ -98,36 +97,11 @@ class SeedDMS_View_DocumentChooser extends SeedDMS_Bootstrap_Style {
$this->form = $this->params['form']; $this->form = $this->params['form'];
$this->htmlStartPage(getMLText("choose_target_document")); $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->contentContainerStart();
$this->printNewTreeNavigation($folderid, $showtree, 1);
$this->printTree($folder->getPath()); $this->printTree($folder->getPath());
$this->contentContainerEnd(); $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"; 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']; $rootfolderid = $this->params['rootfolderid'];
$this->htmlStartPage(getMLText("choose_target_folder")); $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->contentContainerStart();
$this->printFoldersTree($mode, $exclude, $rootfolderid); $this->printNewTreeNavigation($folderid, $showtree, 0);
// $this->printFoldersTree($mode, $exclude, $rootfolderid);
$this->contentContainerEnd(); $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"; echo "</body>\n</html>\n";
// $this->htmlEndPage();
} /* }}} */ } /* }}} */
} }
?> ?>