Files
2024-04-27 09:23:34 +02:00

187 lines
6.3 KiB
JavaScript

/*********************************************************************************
* SugarCRM is a customer relationship management program developed by
* SugarCRM, Inc. Copyright (C) 2004-2010 SugarCRM Inc.
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License version 3 as published by the
* Free Software Foundation with the addition of the following permission added
* to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
* IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
* OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License along with
* this program; if not, see http://www.gnu.org/licenses or write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*
* You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
* SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU Affero General Public License version 3.
*
* In accordance with Section 7(b) of the GNU Affero General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* SugarCRM" logo. If the display of the logo is not reasonably feasible for
* technical reasons, the Appropriate Legal Notices must display the words
* "Powered by SugarCRM".
********************************************************************************/
function treeinit(tree,treedata,treediv,params) {
tree = new YAHOO.widget.TreeView(treediv);
//create a name space for the tree.
//and store the module name;
YAHOO.namespace(treediv).param=params;
var root= tree.getRoot();
var tmpNode;
var data=treedata;
//loop thru all root level nodes.
for (nodedata in data) {
for (node in data[nodedata]) {
addNode(root, data[nodedata][node]);
}
}
tree.subscribe("clickEvent", function(o){
set_selected_node(this.id, null, o.node);
});
tree.draw();
}
//set clicked node's id in tree's name space.
function set_selected_node(treeid, nodeid, node) {
if (typeof(node) == 'undefined')
node=YAHOO.widget.TreeView.getNode(treeid,nodeid);
if (typeof(node) != 'undefined') {
YAHOO.namespace(treeid).selectednode=node;
} else {
//clear selection.
YAHOO.namespace(treeid).selectednode=null;
}
}
//add a node to the tree, function adds nodes recursively.
//change this function
function addNode(parentnode,nodedef) {
var dynamicload=false;
var dynamicloadfunction;
var childnodes;
var expanded=false;
if (nodedef['data'] != 'undefined') {
//get custom property values;
if (typeof(nodedef['custom']) != 'undefined') {
dynamicload=nodedef['custom']['dynamicload'];
dynamicloadfunction=nodedef['custom']['dynamicloadfunction'];
expanded=nodedef['custom']['expanded'];
}
var tmpNode=new YAHOO.widget.TextNode(nodedef['data'], parentnode, expanded);
if (dynamicload) {
tmpNode.setDynamicLoad(eval(dynamicloadfunction));
}
//add child nodes.
if (typeof(nodedef['nodes']) != 'undefined') {
for (childnodes in nodedef['nodes']) {
addNode(tmpNode, nodedef['nodes'][childnodes]);
}
}
}
}
//use this function to respond to node click.
//the clicked node is set by set_selected_node, in the tree's name space.
//function will make an ajax call and populate the results in the target.
//target type should be of type div, the function does not support other
//target types.
function node_click(treeid,target,targettype,functioname) {
node=YAHOO.namespace(treeid).selectednode;
//request url.
var url=site_url.site_url + "/index.php?entryPoint=TreeData&function="+functioname+ construct_url_from_tree_param(node);
var callback = {
success: function(o) {
var targetdiv=document.getElementById(o.argument[0]);
targetdiv.innerHTML=o.responseText;
SUGAR.util.evalScript(o.responseText);
},
failure: function(o) {/*failure handler code*/},
argument: [target, targettype]
}
var trobj = YAHOO.util.Connect.asyncRequest('GET',url, callback, null);
}
//construs url parameters from node and tree parameters.
function construct_url_from_tree_param(node) {
var treespace=YAHOO.namespace(node.tree.id);
url="&PARAMT_depth="+node.depth;
//add request parameters from the trees name space.
if (treespace != 'undefined') {
for (tparam in treespace.param) {
url=url+"&PARAMT_"+tparam+'='+treespace.param[tparam];
}
}
//add parent nodes id to the url.
for (i=node.depth;i>=0;i--) {
var currentnode;
if (i==node.depth) {
currentnode=node;
} else {
currentnode=node.getAncestor(i);
}
//add id to url.
url=url+"&PARAMN_id"+'_'+currentnode.depth+'='+currentnode.data.id;
//add other requested parameters.
if (currentnode.data.param != 'undefined') {
for (nparam in currentnode.data.param) {
url=url+"&PARAMN_"+nparam+'_'+currentnode.depth+'='+currentnode.data.param[nparam];
}
}
}
return url;
}
//following function uses an AJAX call to load the children nodes dynamically.
//this methods assumes that you have TreeData.php in the root of you application.
//the file must have get_node_data function.
//return value must be an array of nodes.
function loadDataForNode(node, onCompleteCallback) {
var id= node.data.id;
var params="entryPoint=TreeData&function=get_node_data" + construct_url_from_tree_param(node);
var callback = {
success: function(o) {
node=o.argument[0];
var nodes=JSON.parse(o.responseText);
var tmpNode;
for (nodedata in nodes) {
for (node1 in nodes[nodedata]) {
addNode(node, nodes[nodedata][node1]);
}
}
o.argument[1]();
},
failure: function(o) {/*failure handler code*/},
argument: [node, onCompleteCallback]
}
var trobj = YAHOO.util.Connect.asyncRequest('POST','index.php', callback, params);
}