Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
I
intranet-rest-fs-openacs
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
project-open
intranet-rest-fs-openacs
Commits
9f6378d9
Commit
9f6378d9
authored
Aug 27, 2018
by
Frank Bergmann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
- Added automatic creation of object folder
parent
89b530d1
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
177 additions
and
2 deletions
+177
-2
file-tree.adp
lib/file-tree.adp
+110
-0
intranet-rest-fs-openacs-procs.tcl
tcl/intranet-rest-fs-openacs-procs.tcl
+11
-0
file-tree.json.tcl
www/file-tree.json.tcl
+56
-2
No files found.
lib/file-tree.adp
0 → 100644
View file @
9f6378d9
<div id="@file_tree_id@" style="height: 600px; overflow: hidden; -webkit-user-select: none; -moz-user-select: none; -khtml-user-select: none; -ms-user-select: none; "></div>
<script type='text/javascript'>
Ext.Loader.setPath('PO', '/sencha-core');
Ext.Loader.setPath('FileStorage', '/intranet-rest-fs-openacs');
// Disable the ?_dc=123456789 parameter from loader
Ext.Loader.setConfig({disableCaching: false});
Ext.require([
'Ext.data.*',
'Ext.grid.*',
'Ext.tree.*',
'Ext.panel.*',
'PO.Utilities',
'PO.controller.StoreLoadCoordinator',
'FileStorage.File',
'FileStorage.FileTreeStore',
'FileStorage.FileTreePanel',
'FileStorage.FileTreePanelController'
]);
/**
* Launch the display
*/
function launchFileTree(debug){
var fileTreeStore = Ext.StoreManager.get('fileTreeStore');
var renderDiv = Ext.get("@file_tree_id@");
var gifPath = "/intranet/images/navbar_default/";
// Left-hand side file tree
var fileTreePanel = Ext.create('FileStorage.FileTreePanel', {
id: 'fileTreePanel',
debug: debug,
width: 600,
height: 300,
renderTo: renderDiv,
store: fileTreeStore,
tbar: [
{ icon: gifPath+'add.png', tooltip: 'Add a new task', id: 'buttonAddFile'},
{ icon: gifPath+'folder_add.png', tooltip: 'Reduce Indent', id: 'buttonAddFolder'},
{ icon: gifPath+'delete.png', tooltip: 'Delete a task', id: 'buttonDelete'},
{ xtype: 'tbseparator' }
]
}).show();
var fileTreePanelController = Ext.create('FileStorage.FileTreePanelController', {
fileTreePanel: fileTreePanel,
debug: debug
});
fileTreePanelController.init(this);
xxx;
};
/**
* onReady() - Launch the application
* Uses StoreCoordinator to load essential data
* before calling launchFileTree() to start the
* actual applicaiton.
*/
Ext.onReady(function() {
Ext.QuickTips.init(); // No idea why this is necessary, but it is...
Ext.getDoc().on('contextmenu', function(ev) { ev.preventDefault(); }); // Disable Right-click context menu on browser background
var debug = false;
/* ***********************************************************************
*
*********************************************************************** */
var fileTreeStore = Ext.create('FileStorage.FileTreeStore');
// Store Coodinator starts app after all stores have been loaded:
var coordinator = Ext.create('PO.controller.StoreLoadCoordinator', {
debug: debug,
stores: [
'fileTreeStore'
],
listeners: {
load: function() {
if ("boolean" == typeof this.loadedP) { return; } // Check if the application was launched before
launchFileTree(debug); // Launch the actual application.
this.loadedP = true; // Mark the application as launched
}
}
});
// Load store that need parameters
fileTreeStore.getProxy().extraParams = { object_id: @object_id@ };
fileTreeStore.load({
callback: function(records, operation, success) {
var me = this;
if (debug) console.log('FileStorage.FileTreeStore: loaded');
if (!success) {
PO.Utilities.reportStoreError("FileTreeStore", operation);
return;
}
var mainNode = records[0];
me.setRootNode(mainNode);
}
});
});
</script>
tcl/intranet-rest-fs-openacs-procs.tcl
View file @
9f6378d9
...
...
@@ -26,6 +26,17 @@ ad_proc -public im_rest_fs_component {
}
{
Returns a HTML 5 component to show project related files
}
{
# Check if object_id is a sub-project or task
# and move to top-element. Is is a frequent case...
set main_project_id
[
db_string main_p
"
select main_p.project_id
from im_projects main_p,
im_projects p
where p.project_id = :object_id and
main_p.tree_sortkey = tree_root_key(p.tree_sortkey)
"
]
if
{
""
ne
$main
_project_id
}
{
set object_id
$main
_project_id
}
# Sencha check and permissions
if
{
!
[
im_sencha_extjs_installed_p
]}
{
return
""
}
im_sencha_extjs_load_libraries
...
...
www/file-tree.json.tcl
View file @
9f6378d9
...
...
@@ -20,6 +20,8 @@ ad_page_contract {
set
root_file_id
$object
_id
if
{
""
ne
$node
&&
[
string
is integer
$node
]}
{
set root_file_id
$node
}
# --------------------------------------------
# Security & Permissions
#
...
...
@@ -33,8 +35,60 @@ set ttt {
}
}
set
folder_id
[
fs_get_root_folder
]
set
folder_id 36012
# --------------------------------------------
# Determine folder for object and create if necessary
#
set
folder_id
[
db_string fs_folder
"
select min(ci.item_id)
from acs_rels r,
cr_items ci,
cr_folders cf
where r.object_id_one = :object_id and
r.object_id_two = ci.item_id and
r.object_id_two = cf.folder_id
"
-default
""
]
if
{
""
eq
$folder
_id
}
{
# Create folder and associate with project
set object_name
[
acs_object_name
$object
_id
]
set parent_id
""
set description
"Default folder for
$object
_name"
set folder_id
[
db_string fs_folder
"
select min(ci.item_id)
from cr_items ci,
cr_folders cf
where ci.item_id = cf.folder_id and
ci.name = :object_name
"
-default
""
]
if
{
""
eq
$folder
_id
}
{
set folder_id
[
fs::new_folder
\
-name
$object
_name
\
-pretty_name
$object
_name
\
-parent_id
$parent
_id
\
-creation_user
$current
_user_id
\
-creation_ip
[
ad_conn peeraddr
]
\
-description
$description
\
]
}
set rel_id
[
db_string create_rel
"
select acs_rel__new (
null,
'im_biz_object_member',
:object_id,
:folder_id,
null,
:current_user_id,
'
[
ad_conn peeraddr
]
'
)
"
]
}
# permission::require_permission -party_id $current_user_id -object_id $folder_id -privilege "read"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment