Commit 9f6378d9 authored by Frank Bergmann's avatar Frank Bergmann

- Added automatic creation of object folder

parent 89b530d1
<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>
......@@ -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
......
......@@ -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"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment