2 /*********************************************************************************
3 * SugarCRM is a customer relationship management program developed by
4 * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
6 * This program is free software; you can redistribute it and/or modify it under
7 * the terms of the GNU Affero General Public License version 3 as published by the
8 * Free Software Foundation with the addition of the following permission added
9 * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
10 * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
11 * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
13 * This program is distributed in the hope that it will be useful, but WITHOUT
14 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15 * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
18 * You should have received a copy of the GNU Affero General Public License along with
19 * this program; if not, see http://www.gnu.org/licenses or write to the Free
20 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23 * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
24 * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
26 * The interactive user interfaces in modified source and object code versions
27 * of this program must display Appropriate Legal Notices, as required under
28 * Section 5 of the GNU Affero General Public License version 3.
30 * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
31 * these Appropriate Legal Notices must retain the display of the "Powered by
32 * SugarCRM" logo. If the display of the logo is not reasonably feasible for
33 * technical reasons, the Appropriate Legal Notices must display the words
34 * "Powered by SugarCRM".
35 ********************************************************************************/
38 <script type="text/javascript" src="{sugar_getjspath file='include/javascript/sugar_grp_yui_widgets.js'}"></script>
42 * a reference to an instance of PackageManagerGrid
46 if(typeof PackageManager == 'undefined') {
47 PackageManager = function() {
53 height: { to: MAX_HEIGHT }
56 var keys = [ "local_upload","server_upload"];
57 var tabPreviousKey = '';
59 * Maintain an array to hold which packages we would like to download
63 * Keep track of the current number of packages that have successfully
66 var _numDownloadsComplete = 0;
68 * The number of downloads we have to retrieve
70 var _numPackagesToDownload = 0;
77 PackageManager.showWaiting();
78 var searchTerm = document.getElementById('search_term').value;
79 postData = 'entryPoint=HandleAjaxCall&to_pdf=1&module=Administration&action=HandleAjaxCall&method=performBasicSearch&search_term=' + searchTerm;
80 var cObj = YAHOO.util.Connect.asyncRequest('POST','index.php',
81 {success: PackageManager.completeSearch, failure: PackageManager.completeSearch}, postData);
83 initWorkingDiv : function(){
84 statusDiv = document.getElementById('workingStatusDiv');
85 statusDiv.className = 'dataLabel';
86 statusDiv.style.position = 'absolute';
87 var fileview = document.getElementById('treeview');
88 var top = fileview.offsetTop;
89 var height = fileview.offsetHeight;
90 var left = fileview.offsetLeft;
91 var width = fileview.offsetWidth;
92 statusDiv.style.top = (top+(height/2));
93 statusDiv.style.left = (left+(width/2));
95 initDocumentationDiv : function(){
96 documentationDiv = document.createElement('div');
97 //documentationDiv.className = 'dataLabel';
98 //documentationDiv.style.background = '#ffffff';
99 documentationDiv.style.position = 'absolute';
100 var fileview = document.getElementById('catview');
101 var top = fileview.offsetTop;
102 var height = fileview.offsetHeight;
103 var left = fileview.offsetLeft;
104 var width = fileview.offsetWidth;
105 documentationDiv.style.top = (top+(height/2));
106 documentationDiv.style.left = (left+(width/2));
107 documentationDiv.id = 'documentation-div';
108 documentationDiv.style.display = 'block';
109 formDiv = document.createElement('form');
110 documentationDiv.appendChild(formDiv);
111 document.body.appendChild(documentationDiv);
117 //PackageManager.showLoginDialog();
118 {/literal}{if $module_load == 'true'}{literal}
119 PackageManager.initTabs();
120 _pmg = new PackageManagerGrid();
122 //PackageManager.initWorkingDiv();
123 //PackageManager.initDocumentationDiv();
124 {/literal}{elseif $IS_ALIVE == 'true'}{literal}
126 new YAHOO.widget.Panel("wait",
133 effect:{effect:YAHOO.widget.ContainerEffect.FADE, duration:0.5}
137 _loadingBar.setHeader("{/literal}{$MOD.SEARCHING_UPDATES}{literal}");
138 _loadingBar.setBody("<img src=\"include/javascript/yui/assets/rel_interstitial_loading.gif\"/>");
139 _loadingBar.render(document.body);
141 _pmg = new PackageManagerGrid();
142 PackageManager.refreshGrid();
144 {/literal}{/if}{literal}
145 //PackageManager.initLicenseDiv();
146 //PackageManager.initModuleStaging();
148 var tabView = new YAHOO.widget.TabView('demo');
149 PackageManager.checkForUpdates();
151 download : function(){
152 if(confirm('{/literal}{$MOD.DOWNLOAD_QUESTION}{literal}')){
154 _numDownloadsComplete = 0;
155 _numPackagesToDownload = 0;
156 var tree = YAHOO.widget.TreeView.getTree('treeview');
157 var nodes = tree.getNodesByProperty('isSelected', true);
159 //var nodes = YAHOO.widget.TreeView.getNode(treeid, index);
161 PackageManager.showWaiting();
163 new YAHOO.widget.Panel("wait",
170 effect:{effect:YAHOO.widget.ContainerEffect.FADE, duration:0.5}
174 _loadingBar.setHeader("{/literal}{$MOD.DOWNLOADING}{literal}");
175 _loadingBar.setBody("<img src=\"include/javascript/yui/assets/rel_interstitial_loading.gif\"/>");
176 _loadingBar.render(document.body);
178 //_numPackagesToDownload = nodes.length;
179 var count = nodes.length;
180 for(j = 0; j < count; j++){
181 if(nodes[j].type == 'release'){
182 _numPackagesToDownload++;
185 _loadingBar.setHeader("{/literal}{$MOD.DL_PACKAGES_DOWNLOADING}{literal} "+_numPackagesToDownload+" {/literal}{$MOD.DL_PACKAGES_PACKAGES}{literal}");
188 for (i = 0; i < count; i++){
191 var category_id = -1;
193 if(nodes[i].type == 'package'){
194 var package_id = nodes[i].data.id;
195 var category_id = nodes[i].category_id;
196 }else if(nodes[i].type == 'release'){
197 var release_id = nodes[i].data.id;
198 var package_id = nodes[i].package_id;
199 var category_id = nodes[i].category_id;
200 postData = 'entryPoint=HandleAjaxCall&to_pdf=1&module=Administration&action=HandleAjaxCall&method=download&release_id=' + release_id + '&package_id=' + package_id + '&category_id=' + category_id;
201 var cObj = YAHOO.util.Connect.asyncRequest('POST','index.php',
202 {success: PackageManager.downloadComplete, failure: PackageManager.downloadComplete}, postData);
208 downloadComplete : function(data){
210 PackageManager.hideWaiting();
211 eval(data.responseText);
212 if(typeof result != 'undefined') {
213 _numDownloadsComplete++;
214 _loadingBar.setHeader("{/literal}{$MOD.DL_PACKAGES_DOWNLOADING}{literal} "+_numDownloadsComplete+" {/literal}{$MOD.DL_PACKAGES_OF}{literal} "+_numPackagesToDownload+ " {/literal}{$MOD.DL_PACKAGES_PACKAGES}{literal}");
215 if(_numPackagesToDownload == _numDownloadsComplete){
217 if(!{/literal}{$INSTALLATION}{literal}){
218 PackageManager.getPackagesInStaging();
220 document.installForm.run.value = '';
221 document.installForm.mode.value = 'noop';
222 document.installForm.submit();
228 getPackagesInStaging : function(){
229 postData = 'entryPoint=HandleAjaxCall&to_pdf=1&module=Administration&action=HandleAjaxCall&method=getPackagesInStaging';
230 var cObj = YAHOO.util.Connect.asyncRequest('POST','index.php',
231 {success: PackageManager.populateGrid, failure: PackageManager.populateGrid}, postData);
233 buildListView : function(result, showDownloadButton){
234 var result_div = document.getElementById('search_results_div');
235 display = "<table class='list view' width='100%' cellpadding='0' cellspacing='0' width='100%' border='0'>";
236 display += "<tr><th align=left class='listViewThLinkS1'>{/literal}{$MOD.LBL_ML_NAME}{literal}</th><th align=left class='listViewThLinkS1'>{/literal}{$MOD.LBL_ML_TYPE}{literal}</th><th align=left class='listViewThLinkS1'>{/literal}{$MOD.LBL_ML_VERSION}{literal}</th><th align=left class='listViewThLinkS1'>{/literal}{$MOD.LBL_ML_PUBLISHED}{literal}</th><th class='listViewThLinkS1'>{/literal}{$MOD.LBL_ML_DESCRIPTION}{literal}</th><th class='listViewThLinkS1'>{/literal}{$MOD.LBL_ML_ACTION}{literal}</th></tr>";
237 for (var x = 0; x < result['packages'].length; x++)
239 var class_css = "oddListRowS1";
241 class_css = "evenListRowS1";
244 if(showDownloadButton){
245 install_link += "<input type=submit class='button' name=\"btn_mode\" onclick=\"this.form.mode.value='Install';this.form.package_id.value="+result['packages'][x]['id']+";this.form.submit();\" value=\"{/literal}{$MOD.LBL_UW_BTN_DOWNLOAD}{literal}\" />";
247 display += "<tr class=\""+class_css+"\"><td nowrap=\"nowrap\">"+result['packages'][x]['name']+"</td><td nowrap=\"nowrap\">"+result['packages'][x]['type']+"</td><td nowrap=\"nowrap\">"+result['packages'][x]['version']+"</td><td nowrap=\"nowrap\">"+result['packages'][x]['date_published']+"</td><td nowrap=\"nowrap\">"+result['packages'][x]['description']+"</td><td nowrap=\"nowrap\">"+install_link+"</td></tr>";
249 display += "</table>";
252 showStatusMessages: function(message){
254 ajaxStatus.flashStatus(message, 5000);
256 populateGrid : function(data){
257 eval(data.responseText);
258 if(typeof result != 'undefined') {
259 //uncheck all treenodes
260 var tree = YAHOO.widget.TreeView.getTree('treeview');
261 var root = tree.getRoot();
263 PackageManager.uncheckAll(root);
265 for (var x = 0; x < result['packages'].length; x++){
266 _pmg.addData(result['packages'][x]);
270 uncheckAll : function(node){
271 var topNodes = node.children;
272 for(var i=0; i< topNodes.length; ++i) {
273 if(topNodes[i].checked){
274 topNodes[i].uncheck();
276 PackageManager.uncheckAll(topNodes[i]);
279 completeSearch: function(data){
281 eval(data.responseText);
283 if(typeof result != 'undefined') {
284 PackageManager.populateGrid(result);
286 PackageManager.hideWaiting();
288 toggleLowerDiv: function(outer_div, animate_div){
289 var show_img = "<img src='{sugar_getimagepath file='advanced_search.gif'}' width='8' height='8' alt='Expand' border='0'>";
290 var hide_img = "<img src='{sugar_getimagepath file='basic_search.gif'}' width='8' height='8' alt='Collapse' border='0'>";
292 var spn = document.getElementById(outer_div);
293 var anim_div = document.getElementById(animate_div);
295 if(anim_div.style.display == 'block'){
296 anim_div.style.display = 'none';
298 anim_div.style.display = 'block';
300 spn.innerHTML =(anim_div.style.display == 'none') ? show_img+" Expand" : hide_img+" Collapse";
302 toggleDiv: function(outer_div, animate_div){
303 var show_img = "<img src='{sugar_getimagepath file='advanced_search.gif'}' width='8' height='8' alt='Expand' border='0'>";
304 var hide_img = "<img src='{sugar_getimagepath file='basic_search.gif'}' width='8' height='8' alt='Collapse' border='0'>";
306 var spn = document.getElementById(outer_div);
307 var anim_div = document.getElementById(animate_div);
308 _attributes.height.to = (_attributes.height.to == MAX_HEIGHT) ? MIN_HEIGHT : MAX_HEIGHT;
310 MAX_HEIGHT = anim_div.offsetHeight;
311 _attributes.height.to = MIN_HEIGHT;
313 _anim = new YAHOO.util.Anim(animate_div, _attributes, 0.5, YAHOO.util.Easing.bounceOut);
314 if(_attributes.height.to == MIN_HEIGHT){
315 anim_div.style.display = 'none';
317 anim_div.style.display = 'block';
319 spn.innerHTML =(_attributes.height.to == MIN_HEIGHT) ? show_img+" Expand" : hide_img+" Collapse";
320 _anim.attributes = _attributes;
325 toggleView: function(type){
326 var treeview = document.getElementById('treeview');
327 var searchview = document.getElementById('searchview');
328 if(type == 'browse'){
329 treeview.style.display = 'block';
330 searchview.style.display = 'none';
332 treeview.style.display = 'none';
333 searchview.style.display = 'block';
336 selectTabCSS: function(key){
337 for( var i=0; i<keys.length;i++)
344 var liclass = 'active';
345 var linkclass = 'current';
346 document.getElementById(keys[i]+'_div').style.display = 'block';
348 document.getElementById(keys[i]+'_div').style.display = 'none';
350 document.getElementById(keys[i]+'_li').className = liclass;
351 document.getElementById(keys[i]+'_link').className = linkclass;
353 tabPreviousKey = key;
355 loadDataForNodeForPackage : function(node, onCompleteCallback){
356 PackageManager.showWaiting();
357 var id= node.data.id;
359 success: function(data) {
360 eval(data.responseText);
361 if(typeof result != 'undefined') {
363 for ( key in result['nodes'] ) {
364 if(result['nodes'][key]['type']){
366 var myobj = { label: result['nodes'][key]['label'], id:result['nodes'][key]['id']};
367 tmpNode= new YAHOO.widget.TextNode(myobj, node, false);
368 tmpNode.href = "javascript:PackageManager.catClick('treeview',"+tmpNode.index+");";
369 tmpNode.setDynamicLoad(PackageManager.loadDataForNodeForPackage);
370 tmpNode.data['description'] = result['nodes'][key]['description'];
374 if(result['nodes'][key]['packages']){
375 for(pKey in result['nodes'][key]['packages']){
377 if(result['nodes'][key]['packages'][pKey]['releases'] && !result['nodes'][key]['packages'][pKey]['releases'].length && result['nodes'][key]['packages'][pKey]['releases'].length != 0){
378 var myobj = { label: result['nodes'][key]['packages'][pKey]['label'], id:result['nodes'][key]['packages'][pKey]['id']};
379 var tmpNodePackage = new YAHOO.widget.TaskNode(myobj, tmpNode, true);
380 tmpNodePackage.href = "javascript:PackageManager.packageClick('treeview',"+tmpNodePackage.index+");"
381 tmpNodePackage.description = result['nodes'][key]['packages'][pKey]['description']
382 tmpNodePackage.type = 'package';
383 tmpNodePackage.category_id = result['nodes'][key]['id'];
384 tmpNodePackage.onCheckClick = function(){
385 this.data['isSelected'] = this.checked;
386 for (var i=0; i<this.children.length; ++i) {
387 this.children[i].data['isSelected'] = this.checked;
390 if(result['nodes'][key]['packages'][pKey]['releases']){
391 for(releaseKey in result['nodes'][key]['packages'][pKey]['releases']){
392 var myobj = { label: result['nodes'][key]['packages'][pKey]['releases'][releaseKey]['label'], id:result['nodes'][key]['packages'][pKey]['releases'][releaseKey]['id']};
394 if(result['nodes'][key]['packages'][pKey]['releases'][releaseKey]['enable'] == true){
395 var tmpNodeRelease = new YAHOO.widget.TaskNode(myobj, tmpNodePackage, false);
396 tmpNodeRelease.setDynamicLoad(PackageManager.loadDataForNodeForRelease);
397 tmpNodeRelease.onCheckClick = function(){this.data['isSelected'] = this.checked;};
399 var tmpNodeRelease = new YAHOO.widget.TextNode(myobj, tmpNodePackage, true);
401 tmpNodeRelease.version = result['nodes'][key]['packages'][pKey]['releases'][releaseKey]['version']
402 tmpNodeRelease.href = "javascript:PackageManager.releaseClick('treeview',"+tmpNodeRelease.index+");"
403 tmpNodeRelease.type = 'release';
404 tmpNodeRelease.category_id = tmpNode.data.id;
405 tmpNodeRelease.package_id = result['nodes'][key]['packages'][pKey]['id'];
408 //tmpNodePackage.setDynamicLoad(PackageManager.loadDataForNodeForPackage);
414 PackageManager.hideWaiting();
415 if (typeof onCompleteCallback == 'function') onCompleteCallback();
417 failure: function(data) {if (typeof onCompleteCallback == 'function') onCompleteCallback();}
420 postData = 'entryPoint=HandleAjaxCall&to_pdf=1&module=Administration&action=HandleAjaxCall&method=getNodes&category_id=' + id;
421 var cObj = YAHOO.util.Connect.asyncRequest('POST','index.php',
425 showWaiting : function(text){
426 ajaxStatus.showStatus(text);
428 hideWaiting : function(text){
429 ajaxStatus.hideStatus();
431 node_click : function(treeid){
432 node=YAHOO.namespace(treeid).selectednode;
434 document.installForm.mode.value='Install';
435 document.installForm.package_id.value=node.data.id;
436 document.installForm.submit();
438 installPackage : function(file){
439 PackageManager.showWaiting();
440 //get the list of packages that belong to this node
442 success: function(data) {
443 eval(data.responseText);
444 if(typeof result != 'undefined') {
445 eval(data.responseText);
447 if(typeof result != 'undefined') {
448 var licenseDiv = document.getElementById('licenseDiv');
449 licenseDiv.style.display = 'block';
450 licenseDiv.innerHTML = result['license_display'];
453 PackageManager.hideWaiting();
454 if (typeof onCompleteCallback == 'function') onCompleteCallback();
456 failure: function(data) { if (typeof onCompleteCallback == 'function') onCompleteCallback();}
459 postData = 'entryPoint=HandleAjaxCall&to_pdf=1&module=Administration&action=HandleAjaxCall&method=getLicenseText&file='+file;
460 var cObj = YAHOO.util.Connect.asyncRequest('POST','index.php',
463 deletePackagae : function(package_id){
466 toggle_div : function toggle_div(id)
468 var show_img = "<img src='{sugar_getimagepath file='advanced_search.gif'}' width='8' height='8' alt='Show' border='0'>";
469 var hide_img = "<img src='{sugar_getimagepath file='basic_search.gif'}' width='8' height='8' alt='Hide' border='0'>";
470 var dv = document.getElementById("release_table_"+id);
471 var spn = document.getElementById("span_toggle_package_"+id);
472 dv.style.display =(dv.style.display == 'none') ? 'block' : 'none';
474 spn.innerHTML =(dv.style.display == 'none') ? show_img+" " : hide_img+" ";
476 processLicense : function(file){
477 var licenseDiv = document.getElementById('licenseDiv');
478 licenseDiv.style.display = 'none';
479 PackageManager.showWaiting();
480 //get the list of packages that belong to this node
482 success: function(data) {
483 eval(data.responseText);
484 if(typeof result != 'undefined') {
485 eval(data.responseText);
487 if(typeof result != 'undefined') {
491 PackageManager.hideWaiting();
492 if (typeof onCompleteCallback == 'function') onCompleteCallback();
494 failure: function(data) { if (typeof onCompleteCallback == 'function') onCompleteCallback();}
497 postData = 'entryPoint=HandleAjaxCall&to_pdf=1&module=Administration&action=HandleAjaxCall&method=performInstall&file='+file;
498 var cObj = YAHOO.util.Connect.asyncRequest('POST','index.php',
501 getDocumentation : function(package_id, release_id){
502 PackageManager.showWaiting();
503 //var documentationWorkingDiv = document.getElementById('documentationWorkingDiv');
504 //documentationWorkingDiv.style.display = 'block';
505 //var documentationDiv = document.getElementById('Documentation');
506 //get the list of packages that belong to this node
508 success: function(data) {
510 eval(data.responseText);
511 if(typeof result != 'undefined') {
512 var screenshot_count = 0;
513 var screenshot_html = "<table><tr>";
514 var html = "<table><tr><th>Name</th><th>Description</th></tr>";
515 for (var x = 0; x < result['documents'].length; x++){
517 if(result['documents'][x]['type'] == 'image'){
519 if((screenshot_count % 3) == 0){
520 screenshot_html += "<tr>";
522 var url = result['documents'][x]['url'];
523 if(result['documents'][x]['preview_url']){
524 url = result['documents'][x]['preview_url'];
526 screenshot_html += "<td><a href='"+result['documents'][x]['url']+"' border='0' target='blank'><img src='"+url+"'></a></td>";
527 if((screenshot_count % 3) == 0 && screenshot_count > 0){
528 screenshot_html += "</tr>";
533 html += "<td><a href='"+result['documents'][x]['url']+"' onClick='PackageManager.downloadedDocumentation("+result['documents'][x]['id']+");' target='blank'>"+result['documents'][x]['name']+"</a></td>";
534 html += "<td>"+result['documents'][x]['description']+"</td>";
539 screenshot_html += "</table>";
540 var detailsTab = _tabs.getTab(1);
541 detailsTab.setContent(html, false);
542 var screenShotTab = _tabs.getTab(2);
543 screenShotTab.setContent(screenshot_html, false);
544 //detailsTab.activate();
545 //documentationDiv.innerHTML = html;
546 //documentationWorkingDiv.style.display = 'none';
547 PackageManager.hideWaiting();
549 if (typeof onCompleteCallback == 'function') onCompleteCallback();
551 failure: function(data) { documentationWorkingDiv.style.display = 'none'; PackageManager.hideWaiting();if (typeof onCompleteCallback == 'function') onCompleteCallback();}
554 postData = 'entryPoint=HandleAjaxCall&to_pdf=1&module=Administration&action=HandleAjaxCall&method=getDocumentation&package_id='+package_id+'&release_id='+release_id;
555 var cObj = YAHOO.util.Connect.asyncRequest('POST','index.php',
558 downloadedDocumentation : function(document_id){
560 success: function(data) {
561 if (typeof onCompleteCallback == 'function') onCompleteCallback();
563 failure: function(data) { if (typeof onCompleteCallback == 'function') onCompleteCallback();}
566 postData = 'entryPoint=HandleAjaxCall&to_pdf=1&module=Administration&action=HandleAjaxCall&method=downloadedDocumentation&document_id='+document_id;
567 var cObj = YAHOO.util.Connect.asyncRequest('POST','index.php',
570 packageClick : function(treeid, index){
572 node=YAHOO.widget.TreeView.getNode(treeid, index);
573 //var dt = document.getElementById('Details');
575 html += "<tr><td>Name:</td><td>"+node.label+"</td></tr>";
576 html += "<tr><td>Description:</td><td>"+node.description+"</td></tr>";
578 //dt.innerHTML = html;
579 PackageManager.getDocumentation(node.data.id, '');
580 var detailsTab = _tabs.getTab(0);
581 detailsTab.setContent(html, false);
582 detailsTab.activate();
584 releaseClick : function(treeid, index){
585 node=YAHOO.widget.TreeView.getNode(treeid, index);
586 //var dt = document.getElementById('Details');
588 html += "<tr><td>Description:</td><td>"+node.label+"</td></tr>";
589 html += "<tr><td>Version:</td><td>"+node.version+"</td></tr>";
591 //dt.innerHTML = html;
592 var detailsTab = _tabs.getTab(0);
593 detailsTab.setContent(html, false);
594 detailsTab.activate();
595 PackageManager.getDocumentation('', node.data.id);
598 catClick : function(treeid, index){
599 var node = YAHOO.namespace(treeid).selectednode;
600 //var dt = document.getElementById('Details');
602 html += "<tr><td>Name:</td><td>"+node.label+"</td></tr>";
603 html += "<tr><td>Description:</td><td>"+node.data['description']+"</td></tr>";
605 //dt.innerHTML = html;
606 var detailsTab = _tabs.getTab(0);
607 detailsTab.setContent(html, false);
608 detailsTab.activate();
610 select_package : function(package_id){
611 var dv = document.getElementById("package_tr_"+package_id);
612 dv.style.display='none';
613 var downloadTable = document.getElementById('filedownloadtable');
614 var tr = document.createElement('tr');
615 tr.innerHTML = dv.innerHTML
616 downloadTable.appendChild(tr);
617 var table = document.getElementById('fileviewtable');
621 showErrors : function(errors){
622 dialog = new YAHOO.ext.BasicDialog("loginView", {
632 dialog.addKeyListener(27, dialog.hide, dialog);
633 dialog.addButton('Close', dialog.hide, dialog);
634 dialog.addButton('Submit', dialog.hide, dialog).disable();
637 select_release : function(release_id){
638 var dv = document.getElementById("release_tr_"+release_id);
640 checkForUpdates : function(){
641 PackageManager.showWaiting();
643 success: function(data) {
644 eval(data.responseText);
645 if(typeof result != 'undefined') {
646 var tree = YAHOO.widget.TreeView.getTree('treeview');
647 var root = tree.getRoot();
648 var myobj = { label: 'Updates', id:'updates'};
649 tmpNode = tree.getNodeByProperty('id', 'updates');
651 tmpNode= new YAHOO.widget.TextNode(myobj, root, false);
652 tmpNode.data['description'] = 'Updates Found';
654 tree.removeChildren(tmpNode);
656 tmpNode.expanded = true;
658 for (var x = 0; x < result['updates'].length; x++){
659 var myobj = { label: result['updates'][x]['label'], id:result['updates'][x]['id']};
660 var tmpNodeRelease = new YAHOO.widget.TaskNode(myobj, tmpNode, false);
661 tmpNodeRelease.version = result['updates'][x]['version'];
662 tmpNodeRelease.href = "javascript:PackageManager.releaseClick('treeview',"+tmpNodeRelease.index+");"
663 tmpNodeRelease.setDynamicLoad(PackageManager.loadDataForNodeForRelease);
664 if(result['updates'][x]['type'] == 'patch'){
665 tmpNodeRelease.onCheckClick = function(){this.uncheck();if(confirm('{/literal}{$MOD.MI_REDIRECT_TO_UPGRADE_WIZARD}{literal}')){location.href = '{/literal}{$UPGARDE_WIZARD_URL}{literal}'}};
667 tmpNodeRelease.onCheckClick = function(){this.data['isSelected'] = this.checked;};
669 tmpNodeRelease.type = 'release';
670 tmpNodeRelease.category_id = '';
671 tmpNodeRelease.package_id = '';
675 if (typeof onCompleteCallback == 'function') onCompleteCallback();
677 failure: function(data) { if (typeof onCompleteCallback == 'function') onCompleteCallback();}
679 PackageManager.hideWaiting();
680 postData = 'entryPoint=HandleAjaxCall&to_pdf=1&module=Administration&action=HandleAjaxCall&method=checkForUpdates&type=modules';
681 var cObj = YAHOO.util.Connect.asyncRequest('POST','index.php',
684 showLoginDialog : function(show){
685 var loginView = document.getElementById('loginView');
686 var selectView = document.getElementById('selectView');
687 var collapseLink = document.getElementById('span_animate_server_div');
688 var credentialBtn = document.getElementById('modifCredentialsBtn');
689 var loginStyle = (show ? 'block' : 'none');
690 var selectStyle = (show ? 'none' : 'block');
691 var collapseStyle = (show ? 'none' : '');
692 if(_attributes.height.to == MIN_HEIGHT){
694 PackageManager.toggleDiv('span_animate_server_div', 'catview');
696 loginView.style.display = loginStyle;
697 selectView.style.display = selectStyle;
698 collapseLink.style.display = collapseStyle;
699 credentialBtn.style.display = collapseStyle;
701 refreshTreeRoot : function(){
702 PackageManager.showWaiting();
703 _loadingBar.setHeader("{/literal}{$MOD.LOADING_CATEGORIES}{literal}");
705 success: function(data) {
707 eval(data.responseText);
708 if(typeof result != 'undefined') {
709 var tree = new YAHOO.widget.TreeView('treeview');
711 var node = tree.getRoot();
712 for (var x = 0; x < result['nodes'].length; x++){
714 var myobj = { label: result['nodes'][x]['label'], id:result['nodes'][x]['id']};
715 tmpNode= new YAHOO.widget.TextNode(myobj, node, false);
716 tmpNode.href = "javascript:PackageManager.catClick('treeview',"+tmpNode.index+");";
717 tmpNode.setDynamicLoad(PackageManager.loadDataForNodeForPackage);
718 tmpNode.data['description'] = result['nodes'][x]['description'];
723 PackageManager.hideWaiting();
724 if (typeof onCompleteCallback == 'function') onCompleteCallback();
726 failure: function(data) {_loadingBar.hide();if (typeof onCompleteCallback == 'function') onCompleteCallback();}
729 postData = 'entryPoint=HandleAjaxCall&to_pdf=1&module=Administration&action=HandleAjaxCall&method=getCategories';
730 var cObj = YAHOO.util.Connect.asyncRequest('POST','index.php',
733 refreshGrid : function(){
734 PackageManager.showWaiting();
735 _loadingBar.setHeader("{/literal}{$MOD.SEARCHING_PACKAGES}{literal}");
737 success: function(data) {
739 eval(data.responseText);
740 if(typeof result != 'undefined') {
743 for (var x = 0; x < result['releases'].length; x++){
744 var row = new Array();
745 row[0] = result['releases'][x]['description'];
746 row[1] = result['releases'][x]['version'];
747 row[2] = result['releases'][x]['build_number'];
748 row[3] = result['releases'][x]['id'];
753 PackageManager.hideWaiting();
754 if (typeof onCompleteCallback == 'function') onCompleteCallback();
756 failure: function(data) {_loadingBar.hide();if (typeof onCompleteCallback == 'function') onCompleteCallback();}
758 var types = "{/literal}{$GRID_TYPE}{literal}";
759 //postData = 'to_pdf=1&module=Administration&action=HandleAjaxCall&method=getReleases&types='+types;
760 postData = 'entryPoint=HandleAjaxCall&to_pdf=1&module=Administration&action=HandleAjaxCall&method=checkForUpdates&type=modules';
761 var cObj = YAHOO.util.Connect.asyncRequest('POST','index.php',
764 refreshHeader : function(){
765 PackageManager.showWaiting();
767 success: function(data) {
768 eval(data.responseText);
769 if(typeof result != 'undefined') {
770 var header_div = document.getElementById('span_display_html');
771 header_div.innerHTML = result['promotion'];
773 PackageManager.hideWaiting();
774 if (typeof onCompleteCallback == 'function') onCompleteCallback();
776 failure: function(data) {if (typeof onCompleteCallback == 'function') onCompleteCallback();}
779 postData = 'entryPoint=HandleAjaxCall&to_pdf=1&module=Administration&action=HandleAjaxCall&method=getPromotion';
780 var cObj = YAHOO.util.Connect.asyncRequest('POST','index.php',
783 initTabs : function(){
784 /*_tabs = new YAHOO.ext.TabPanel('tabs1');
785 var detailTab = _tabs.addTab('details', "{/literal}{$MOD.ML_LBL_DETAIILS}{literal}");
786 detailTab.setContent('{/literal}{$MOD.ML_DESC_DOCUMENTATION}{literal}', false);
787 _tabs.addTab('documentation', "{/literal}{$MOD.ML_LBL_DOCUMENTATION}{literal}");
788 _tabs.addTab('screenshots', "{/literal}{$MOD.ML_LBL_SCREENSHOTS}{literal}");
789 _tabs.addTab('reviews', "{/literal}{$MOD.ML_LBL_REVIEWS}{literal}");
790 _tabs.activate('details');*/
792 remove : function(file){
793 if(confirm('{/literal}{$MOD.REMOVE_QUESTION}{literal}')){
794 //PackageManager.showWaiting();
796 success: function(data) {
797 eval(data.responseText);
798 if(typeof result != 'undefined') {
799 PackageManager.getPackagesInStaging();
801 PackageManager.hideWaiting();
802 if (typeof onCompleteCallback == 'function') onCompleteCallback();
804 failure: function(data) {if (typeof onCompleteCallback == 'function') onCompleteCallback();}
807 postData = 'entryPoint=HandleAjaxCall&to_pdf=1&module=Administration&action=HandleAjaxCall&method=remove&file='+file
808 var cObj = YAHOO.util.Connect.asyncRequest('POST','index.php',
812 authenticate : function(username, password, servername){
815 new YAHOO.widget.Panel("wait",
822 effect:{effect:YAHOO.widget.ContainerEffect.FADE, duration:0.5}
826 _loadingBar.setHeader("{/literal}{$MOD.AUTHENTICATING}{literal}");
827 _loadingBar.setBody("<img src=\"include/javascript/yui/assets/rel_interstitial_loading.gif\"/>");
828 _loadingBar.render(document.body);
830 //PackageManager.showWaiting();
831 var btn = document.getElementById('panel_login_button');
832 var cbTerms = document.getElementById('cb_terms');
833 btn.value = 'Checking...';
836 success: function(data) {
838 btn.disabled = false;
839 eval(data.responseText);
840 if(typeof result != 'undefined') {
841 if(result['status'] == 'success'){
842 PackageManager.showLoginDialog(false);
843 var header_div = document.getElementById('span_display_html');
845 header_div.innerHTML = '';
846 {/literal}{if $module_load == 'true'}{literal}
848 PackageManager.refreshTreeRoot();
849 {/literal}{else}{literal}
850 _pmg = new PackageManagerGrid();
852 PackageManager.refreshGrid();
854 {/literal}{/if}{literal}
857 alert(result['status']);
860 //PackageManager.hideWaiting();
861 if (typeof onCompleteCallback == 'function') onCompleteCallback();
863 failure: function(data) { _loadingBar.hide();btn.value = 'Login';btn.disabled = false;if (typeof onCompleteCallback == 'function') onCompleteCallback();}
866 postData = 'entryPoint=HandleAjaxCall&to_pdf=1&module=Administration&action=HandleAjaxCall&method=authenticate&username='+username+'&password='+password + '&servername=' + servername + '&terms_checked=' + cbTerms.value;
867 var cObj = YAHOO.util.Connect.asyncRequest('POST','index.php',
875 var _fileDownloadGrid;
876 var _fileGridInstalled;
877 {/literal}{$PATCHES}{literal}
878 {/literal}{$INSTALLED_MODULES}{literal}
879 PackageManagerGrid = function(){
880 {/literal}{if $module_load == 'true'}{literal}
881 YAHOO.widget.DataTable.MSG_EMPTY = "Empty1";
882 YAHOO.widget.DataTable.CLASS_EMPTY = "CLASS EMPT";
883 YAHOO.widget.ScrollingDataTable.MSG_EMPTY = "Empty2";
884 YAHOO.widget.ScrollingDataTable.CLASS_EMPTY = "EMPTYMORE";
885 YAHOO.util.DataSource.MSG_EMPTY = "empty_3";
886 var moduleTitleEl = YAHOO.util.Dom.getElementsByClassName("moduleTitle")[0];
887 var patch_downloads_tableWidth = moduleTitleEl.clientWidth - 2+ "px";
888 var patch_downloads_minWidth = moduleTitleEl.clientWidth / 8.5;
889 _fileGrid = new YAHOO.widget.ScrollingDataTable(
892 {key:'name', label: '{/literal}{$ML_FILEGRID_COLUMN.Name}{literal}', minWidth: Math.round(patch_downloads_minWidth*1.5), sortable: true, resizeable: true},
893 {key:'file', label: '{/literal}{$ML_FILEGRID_COLUMN.Install}{literal}', minWidth: Math.round(patch_downloads_minWidth/1.5), formatter: this.renderInstallButton, resizeable: true},
894 {key:'unFile', label: '{/literal}{$ML_FILEGRID_COLUMN.Delete}{literal}', minWidth: Math.round(patch_downloads_minWidth), formatter: this.renderDeleteButton, resizeable: true},
895 {key:'type', label: '{/literal}{$ML_FILEGRID_COLUMN.Type}{literal}', minWidth: Math.round(patch_downloads_minWidth/1.5)},
896 {key:'version', label: '{/literal}{$ML_FILEGRID_COLUMN.Version}{literal}', minWidth: Math.round(patch_downloads_minWidth)},
897 {key:'date', label: '{/literal}{$ML_FILEGRID_COLUMN.Published}{literal}', minWidth: Math.round(patch_downloads_minWidth)},
898 {key:'uninstallable', label: '{/literal}{$ML_FILEGRID_COLUMN.Uninstallable}{literal}', minWidth: Math.round(patch_downloads_minWidth/1.5)},
899 {key:'description',label: '{/literal}{$ML_FILEGRID_COLUMN.Description}{literal}', minWidth: Math.round(patch_downloads_minWidth*1.5), sortable: true}
901 new YAHOO.util.LocalDataSource(mti_data, {
902 responseSchema: {fields: ['name', 'file', 'unFile', 'type', 'version', 'date', 'uninstallable', 'description', 'upload_file'] },
907 width : (YAHOO.util.Selector.query('table','content',true).clientWidth - 15) + "px",
908 height: (document.getElementById("patch_downloads").clientHeight - 25 ) + "px"
911 _fileGrid.autoSizeColumns = true;
912 _fileGrid.MSG_EMPTY = "empty4";
913 _fileGrid.subscribe("beforeWidthChange", function() {
914 if (mti_data.length <= 0) {
919 _fileGrid.getColumn = YAHOO.SUGAR.SelectionGrid.prototype.getColumn;
920 //Hack to fix rendering bug in IE7:
921 _fileGrid.on("renderEvent", function(){
922 if (mti_data.length > 0)
923 setTimeout("if (_fileGrid.getFirstTrEl()) _fileGrid.getFirstTrEl().style.width='100%';", 1000);
925 _fileGrid.getBdTableEl().style.display = "none";
926 _fileGrid.getHdTableEl().style.width = "100%";
930 var moduleTitleEl2 = YAHOO.util.Dom.getElementsByClassName("moduleTitle")[0];
931 var installed_grid_tableWidth = moduleTitleEl2.clientWidth - 2+ "px";
932 var minWidth = moduleTitleEl2.clientWidth / 7.45;
933 _fileGridInstalled = new YAHOO.widget.ScrollingDataTable('installed_grid',
935 {key:'name', label: '{/literal}{$ML_FILEGRIDINSTALLED_COLUMN.Name}{literal}', sortable: true, 'minWidth' : Math.round(minWidth*1.5)},
936 {key:'unFile', label: '{/literal}{$ML_FILEGRIDINSTALLED_COLUMN.Action}{literal}', formatter: this.renderUninstallButton, 'minWidth' : Math.round(minWidth/1.5)},
937 {key:'state_file', label: '{/literal}{$ML_FILEGRIDINSTALLED_COLUMN.Enable_Or_Disable}{literal}',formatter: this.renderEnableDisableButton, 'minWidth' : Math.round(minWidth/1.5)},
938 {key:'type', label: '{/literal}{$ML_FILEGRIDINSTALLED_COLUMN.Type}{literal}', 'minWidth' : Math.round(minWidth/1.5)},
939 {key:'version', label: '{/literal}{$ML_FILEGRIDINSTALLED_COLUMN.Version}{literal}', 'minWidth' : Math.round(minWidth)},
940 {key:'date', label: '{/literal}{$ML_FILEGRIDINSTALLED_COLUMN.Date_Installed}{literal}', 'minWidth' : Math.round(minWidth)},
941 {key:'description', label: '{/literal}{$ML_FILEGRIDINSTALLED_COLUMN.Description}{literal}', sortable: true, 'minWidth' : Math.round(minWidth*1.5)}
943 new YAHOO.util.LocalDataSource(mti_installed_data, {
944 responseSchema: {fields: ['name', 'file', 'unFile', 'state_file', 'type', 'version', 'date', 'uninstallable', 'description'] },
948 width : (YAHOO.util.Selector.query('table','content',true).clientWidth - 15 ) + "px",
949 height: (document.getElementById("installed_grid").clientHeight - 20 ) + "px"
953 _fileGridInstalled.autoSizeColumns = true;
954 _fileGridInstalled.MSG_EMPTY = "empty5";
955 //bugfix for http://yuilibrary.com/projects/yui2/ticket/2528034
956 _fileGridInstalled.getColumn = YAHOO.SUGAR.SelectionGrid.prototype.getColumn;
958 _fileGridInstalled.on("renderEvent", function(){
959 if (mti_installed_data.length > 0)
960 setTimeout("if(_fileGridInstalled.getFirstTrEl()) _fileGridInstalled.getFirstTrEl().style.width='100%';", 1000);
962 _fileGridInstalled.getBdTableEl().style.display = "none";
963 _fileGridInstalled.getHdTableEl().style.width = "100%";
967 {/literal}{else}{literal}
968 _fileGrid = new YAHOO.ext.grid.DDGrid(
970 new YAHOO.ext.grid.DefaultDataModel([]),
971 new YAHOO.ext.grid.DefaultColumnModel([
972 {label: '{/literal}{$ML_FILEGRID_COLUMN.Description}{literal}', width: 215},
973 {label: '{/literal}{$ML_FILEGRID_COLUMN.Version}{literal}', width: 72},
974 {label: '{/literal}{$ML_FILEGRID_COLUMN.Build}{literal}', width: 80, sortable: true, sortType: sort.asUCString},
975 {label: '{/literal}{$ML_FILEGRID_COLUMN.Action}{literal}', width: 90, renderer: this.renderButtons}
978 _fileGrid.autoSizeColumns = true;
979 _fileGrid.autoSizeHeaders = true;
980 {/literal}{/if}{literal}
981 PackageManager.showStatusMessages('{/literal}{$ML_STATUS_MESSAGE}{literal}');
984 PackageManagerGrid.prototype.renderModuleButtons = function(file){
985 var output = '<table border=0 cellpadding=0 cellspacing=0><tr><td><form action="index.php?module=Administration&view=module&action=UpgradeWizard_prepare" method="post">';
986 output += '<input type=submit class=\'button\' name="btn_mode" onclick="this.form.mode.value=\'Install\';this.form.submit();" value="{/literal}{$MOD.LBL_UW_BTN_INSTALL}{literal}" />';
987 output += '<input type=hidden name="install_file" value="'+file+'" />';
988 output += '<input type=hidden name="mode"/>';
989 output += '</form></td><td> </td>';
991 output += '<td><form action="index.php?module=Administration&view=module&action=UpgradeWizard" method="post">';
992 output += '<input type=submit class=\'button\' name="run" value="{/literal}{$MOD.LBL_UW_BTN_DELETE_PACKAGE}{literal}" />';
993 output += '<input type=hidden name="install_file" value="'+file+'" />';
994 output += '</form></td></tr></table>';
995 elCell.innerHTML = output;
998 PackageManagerGrid.prototype.renderInstallButton = function(elCell, oRecord, col, data) {
999 var file = oRecord.getData().file;
1000 if(file.indexOf('errors_') == 0){
1001 var output = "<input type='button' class='button' value='Errors' onClick='javascript:alert(\""+file.substring(7)+"\");'>";
1003 var output = '<span style="text-align:center;"><form action="index.php?module=Administration&view=module&action=UpgradeWizard_prepare" method="post">';
1004 output += '<input type=submit class=\'button\' name="btn_mode" onclick="this.form.mode.value=\'Install\';this.form.submit();" value="{/literal}{$MOD.LBL_UW_BTN_INSTALL}{literal}" />';
1005 output += '<input type=hidden name="install_file" value="'+file+'" />';
1006 output += '<input type=hidden name="mode"/>';
1007 output += '</form></span>';
1009 elCell.innerHTML = output;
1011 PackageManagerGrid.prototype.renderUninstallButton = function(elCell, oRecord, col, data) {
1012 var file = oRecord.getData().file;
1013 if(file.indexOf('errors_') == 0){
1014 var output = "<input type='button' class='button' value='Errors' onClick='javascript:alert(\""+file.substring(7)+"\");'>";
1015 }else if(file.indexOf('UNINSTALLABLE') == 0){
1018 var output = '<span style="text-align:center;"><form action="index.php?module=Administration&view=module&action=UpgradeWizard_prepare" method="post">';
1019 output += '<input type=submit class=\'button\' name="btn_mode" onclick="this.form.mode.value=\'Uninstall\';this.form.submit();" value="{/literal}{$MOD.LBL_UW_UNINSTALL}{literal}" />';
1020 output += '<input type=hidden name="install_file" value="'+file+'" />';
1021 output += '<input type=hidden name="mode"/>';
1022 output += '</form></span>';
1025 elCell.innerHTML = output;
1028 PackageManagerGrid.prototype.renderEnableDisableButton = function(elCell, oRecord, col, data) {
1029 var state_file = oRecord.getData().state_file;
1030 if(state_file.indexOf('ENABLED_') == 0){
1032 var output = '<span style="text-align:center;"><form action="index.php?module=Administration&view=module&action=UpgradeWizard_prepare" method="post">';
1033 file = state_file.substring(8);
1034 output += '<input type=submit class=\'button\' name="btn_mode" onclick="this.form.mode.value=\'Disable\';this.form.submit();" value="{/literal}{$MOD.LBL_UW_DISABLE}{literal}" />';
1035 output += '<input type=hidden name="install_file" value="'+file+'" />';
1036 output += '<input type=hidden name="mode"/>';
1037 output += '</form></span>';
1038 }else if(state_file.indexOf('UNINSTALLABLE') == 0){
1041 var output = '<span style="text-align:center;"><form action="index.php?module=Administration&view=module&action=UpgradeWizard_prepare" method="post">';
1042 file = state_file.substring(9);
1043 output += '<input type=submit class=\'button\' name="btn_mode" onclick="this.form.mode.value=\'Enable\';this.form.submit();" value="{/literal}{$MOD.LBL_UW_ENABLE}{literal}" />';
1044 output += '<input type=hidden name="install_file" value="'+file+'" />';
1045 output += '<input type=hidden name="mode"/>';
1046 output += '</form></span>';
1049 elCell.innerHTML = output;
1052 PackageManagerGrid.prototype.renderDeleteButton = function(elCell, oRecord, col, file) {
1054 var upload_file = oRecord.getData().upload_file;
1055 var output = "<span style='text-align:center;'><input type='button' class='button' value='{/literal}{$MOD.LBL_UW_BTN_DELETE_PACKAGE}{literal}' onClick='PackageManager.remove(\""+file+"\");'></span>";
1056 //var output = '<form action="index.php?module=Administration&view=module&action=UpgradeWizard" method="post">';
1057 // output += '<input type=submit class=\'button\' name="run" value="{/literal}{$MOD.LBL_UW_BTN_DELETE_PACKAGE}{literal}" />';
1058 //output += '<input type=hidden name="install_file" value="'+file+'" />';
1059 //output += '</form>';
1061 elCell.innerHTML = output;
1064 PackageManagerGrid.prototype.renderButtons = function(packageID){
1065 var output = "<input type='button' value='Download' class='button' onClick=\"{/literal}{if $INSTALLATION != 0}{literal}this.form.run.value='upload';{/literal}{/if}{literal}this.form.release_id.value='"+packageID+"';this.form.submit();\">";
1068 PackageManagerGrid.prototype.renderErrorLink = function(show){
1069 var output = "<a href='#'>Errors</a>";
1072 PackageManagerGrid.prototype.clearGrid = function(){
1073 _fileGrid.deleteRows(0, _fileGrid.getRecordSet().getLength())
1075 PackageManagerGrid.prototype.renderAll = function(){
1076 // _fileGrid.render();
1079 PackageManagerGrid.prototype.addData = function(data){
1080 _fileGrid.addRow(data);
1083 YAHOO.util.Event.on(window, 'load', PackageManager.initPMG, PackageManager, true);