PageRenderTime 51ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/manager/frames/tree.php

https://github.com/good-web-master/modx.evo.custom
PHP | 572 lines | 492 code | 55 blank | 25 comment | 91 complexity | cd55dd18f620bb09f7558298c2bd459e MD5 | raw file
Possible License(s): LGPL-2.1, AGPL-1.0, GPL-2.0, MIT, BSD-3-Clause
  1. <?php if(IN_MANAGER_MODE!="true") die("<b>INCLUDE_ORDERING_ERROR</b><br /><br />Please use the MODx Content Manager instead of accessing this file directly.");
  2. $theme = $manager_theme ? "$manager_theme/":"";
  3. function constructLink($action, $img, $text, $allowed) {
  4. if($allowed==1) { ?>
  5. <div class="menuLink" onclick="menuHandler(<?php echo $action ; ?>); hideMenu();">
  6. <?php } else { ?>
  7. <div class="menuLinkDisabled">
  8. <?php } ?>
  9. <img src="<?php echo $img; ?>" /><?php echo $text; ?>
  10. </div>
  11. <?php
  12. }
  13. $mxla = $modx_lang_attribute ? $modx_lang_attribute : 'en';
  14. ?>
  15. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  16. <html <?php echo ($modx_textdir ? 'dir="rtl" lang="' : 'lang="').$mxla.'" xml:lang="'.$mxla.'"'; ?>>
  17. <head>
  18. <title>Document Tree</title>
  19. <meta http-equiv="Content-Type" content="text/html; charset=<?php echo $modx_manager_charset; ?>" />
  20. <link rel="stylesheet" type="text/css" href="media/style/<?php echo $manager_theme ? "$manager_theme/":""; ?>style.css" />
  21. <script src="media/script/mootools/mootools.js" type="text/javascript"></script>
  22. <script src="media/script/mootools/moodx.js" type="text/javascript"></script>
  23. <script type="text/javascript">
  24. window.addEvent('load', function(){
  25. resizeTree();
  26. restoreTree();
  27. window.addEvent('resize', resizeTree);
  28. });
  29. // preload images
  30. var i = new Image(18,18);
  31. i.src="<?php echo $_style["tree_page"]?>";
  32. i = new Image(18,18);
  33. i.src="<?php echo $_style["tree_globe"]?>";
  34. i = new Image(18,18);
  35. i.src="<?php echo $_style["tree_minusnode"]?>";
  36. i = new Image(18,18);
  37. i.src="<?php echo $_style["tree_plusnode"]?>";
  38. i = new Image(18,18);
  39. i.src="<?php echo $_style["tree_folderopen"]?>";
  40. i = new Image(18,18);
  41. i.src="<?php echo $_style["tree_folder"]?>";
  42. var rpcNode = null;
  43. var ca = "open";
  44. var selectedObject = 0;
  45. var selectedObjectDeleted = 0;
  46. var selectedObjectName = "";
  47. var _rc = 0; // added to fix onclick body event from closing ctx menu
  48. <?php
  49. echo "var openedArray = new Array();\n";
  50. if (isset($_SESSION['openedArray'])) {
  51. $opened = explode("|", $_SESSION['openedArray']);
  52. foreach ($opened as $item) {
  53. printf("openedArray[%d] = 1;\n", $item);
  54. }
  55. }
  56. ?>
  57. // return window dimensions in array
  58. function getWindowDimension() {
  59. var width = 0;
  60. var height = 0;
  61. if ( typeof( window.innerWidth ) == 'number' ){
  62. width = window.innerWidth;
  63. height = window.innerHeight;
  64. }else if ( document.documentElement &&
  65. ( document.documentElement.clientWidth ||
  66. document.documentElement.clientHeight ) ){
  67. width = document.documentElement.clientWidth;
  68. height = document.documentElement.clientHeight;
  69. }
  70. else if ( document.body &&
  71. ( document.body.clientWidth || document.body.clientHeight ) ){
  72. width = document.body.clientWidth;
  73. height = document.body.clientHeight;
  74. }
  75. return {'width':width,'height':height};
  76. }
  77. function resizeTree() {
  78. // get window width/height
  79. var win = getWindowDimension();
  80. // set tree height
  81. var tree = $('treeHolder');
  82. var tmnu = $('treeMenu');
  83. tree.style.width = (win['width']-20)+'px';
  84. tree.style.height = (win['height']-tree.offsetTop-6)+'px';
  85. tree.style.overflow = 'auto';
  86. }
  87. function getScrollY() {
  88. var scrOfY = 0;
  89. if( typeof( window.pageYOffset ) == 'number' ) {
  90. //Netscape compliant
  91. scrOfY = window.pageYOffset;
  92. } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
  93. //DOM compliant
  94. scrOfY = document.body.scrollTop;
  95. } else if( document.documentElement &&
  96. (document.documentElement.scrollTop ) ) {
  97. //IE6 standards compliant mode
  98. scrOfY = document.documentElement.scrollTop;
  99. }
  100. return scrOfY;
  101. }
  102. function showPopup(id,title,e){
  103. var x,y
  104. var mnu = $('mx_contextmenu');
  105. var bodyHeight = parseInt(document.body.offsetHeight);
  106. x = e.clientX>0 ? e.clientX:e.pageX;
  107. y = e.clientY>0 ? e.clientY:e.pageY;
  108. y = getScrollY()+(y/2);
  109. if (y+mnu.offsetHeight > bodyHeight) {
  110. // make sure context menu is within frame
  111. y = y - ((y+mnu.offsetHeight)-bodyHeight+5);
  112. }
  113. itemToChange=id;
  114. selectedObjectName= title;
  115. dopopup(x+5,y);
  116. e.cancelBubble=true;
  117. return false;
  118. };
  119. function dopopup(x,y) {
  120. if(selectedObjectName.length>20) {
  121. selectedObjectName = selectedObjectName.substr(0, 20) + "...";
  122. }
  123. var h,context = $('mx_contextmenu');
  124. context.style.left= x<?php echo $modx_textdir ? '-190' : '';?>+"px"; //offset menu to the left if rtl is selected
  125. context.style.top = y+"px";
  126. var elm = $("nameHolder");
  127. elm.innerHTML = selectedObjectName;
  128. context.style.visibility = 'visible';
  129. _rc = 1;
  130. setTimeout("_rc = 0;",100);
  131. }
  132. function hideMenu() {
  133. if (_rc) return false;
  134. $('mx_contextmenu').style.visibility = 'hidden';
  135. }
  136. function toggleNode(node,indent,parent,expandAll,privatenode) {
  137. privatenode = (!privatenode || privatenode == '0') ? privatenode = '0' : privatenode = '1';
  138. rpcNode = $(node.parentNode.lastChild);
  139. var rpcNodeText;
  140. var loadText = "<?php echo $_lang['loading_doc_tree'];?>";
  141. var signImg = document.getElementById("s"+parent);
  142. var folderImg = document.getElementById("f"+parent);
  143. if (rpcNode.style.display != 'block') {
  144. // expand
  145. if(signImg && signImg.src.indexOf('media/style/<?php echo $manager_theme ? "$manager_theme/":""; ?>images/tree/plusnode.gif')>-1) {
  146. signImg.src = '<?php echo $_style["tree_minusnode"]; ?>';
  147. folderImg.src = (privatenode == '0') ? '<?php echo $_style["tree_folderopen"]; ?>' :'<?php echo $_style["tree_folderopen_secure"]; ?>';
  148. }
  149. rpcNodeText = rpcNode.innerHTML;
  150. if (rpcNodeText=="" || rpcNodeText.indexOf(loadText)>0) {
  151. var i, spacer='';
  152. for(i=0;i<=indent+1;i++) spacer+='&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
  153. rpcNode.style.display = 'block';
  154. //Jeroen set opened
  155. openedArray[parent] = 1 ;
  156. //Raymond:added getFolderState()
  157. var folderState = getFolderState();
  158. rpcNode.innerHTML = "<span class='emptyNode' style='white-space:nowrap;'>"+spacer+"&nbsp;&nbsp;&nbsp;"+loadText+"...<\/span>";
  159. new Ajax('index.php?a=1&f=nodes&indent='+indent+'&parent='+parent+'&expandAll='+expandAll+folderState, {method: 'get',onComplete:rpcLoadData}).request();
  160. } else {
  161. rpcNode.style.display = 'block';
  162. //Jeroen set opened
  163. openedArray[parent] = 1 ;
  164. }
  165. }
  166. else {
  167. // collapse
  168. if(signImg && signImg.src.indexOf('media/style/<?php echo $manager_theme ? "$manager_theme/":""; ?>images/tree/minusnode.gif')>-1) {
  169. signImg.src = '<?php echo $_style["tree_plusnode"]; ?>';
  170. folderImg.src = (privatenode == '0') ? '<?php echo $_style["tree_folder"]; ?>' : '<?php echo $_style["tree_folder_secure"]; ?>';
  171. }
  172. //rpcNode.innerHTML = '';
  173. rpcNode.style.display = 'none';
  174. openedArray[parent] = 0 ;
  175. }
  176. }
  177. function rpcLoadData(response) {
  178. if(rpcNode != null){
  179. rpcNode.innerHTML = typeof response=='object' ? response.responseText : response ;
  180. rpcNode.style.display = 'block';
  181. rpcNode.loaded = true;
  182. var elm = top.mainMenu.$("buildText");
  183. if (elm) {
  184. elm.innerHTML = "";
  185. elm.style.display = 'none';
  186. }
  187. // check if bin is full
  188. if(rpcNode.id=='treeRoot') {
  189. var e = $('binFull');
  190. if(e) showBinFull();
  191. else showBinEmpty();
  192. }
  193. // check if our payload contains the login form :)
  194. e = $('mx_loginbox');
  195. if(e) {
  196. // yep! the seession has timed out
  197. rpcNode.innerHTML = '';
  198. top.location = 'index.php';
  199. }
  200. }
  201. }
  202. function expandTree() {
  203. rpcNode = $('treeRoot');
  204. new Ajax('index.php?a=1&f=nodes&indent=1&parent=0&expandAll=1', {method: 'get',onComplete:rpcLoadData}).request();
  205. }
  206. function collapseTree() {
  207. rpcNode = $('treeRoot');
  208. new Ajax('index.php?a=1&f=nodes&indent=1&parent=0&expandAll=0', {method: 'get',onComplete:rpcLoadData}).request();
  209. }
  210. // new function used in body onload
  211. function restoreTree() {
  212. rpcNode = $('treeRoot');
  213. new Ajax('index.php?a=1&f=nodes&indent=1&parent=0&expandAll=2', {method: 'get',onComplete:rpcLoadData}).request();
  214. }
  215. function setSelected(elSel) {
  216. var all = document.getElementsByTagName( "SPAN" );
  217. var l = all.length;
  218. for ( var i = 0; i < l; i++ ) {
  219. el = all[i]
  220. cn = el.className;
  221. if (cn=="treeNodeSelected") {
  222. el.className="treeNode";
  223. }
  224. }
  225. elSel.className="treeNodeSelected";
  226. };
  227. function setHoverClass(el, dir) {
  228. if(el.className!="treeNodeSelected") {
  229. if(dir==1) {
  230. el.className="treeNodeHover";
  231. } else {
  232. el.className="treeNode";
  233. }
  234. }
  235. };
  236. // set Context Node State
  237. function setCNS(n, b) {
  238. if(b==1) {
  239. n.style.backgroundColor="beige";
  240. } else {
  241. n.style.backgroundColor="";
  242. }
  243. };
  244. function updateTree() {
  245. rpcNode = $('treeRoot');
  246. treeParams = 'a=1&f=nodes&indent=1&parent=0&expandAll=2&dt=' + document.sortFrm.dt.value + '&tree_sortby=' + document.sortFrm.sortby.value + '&tree_sortdir=' + document.sortFrm.sortdir.value;
  247. new Ajax('index.php?'+treeParams, {method: 'get',onComplete:rpcLoadData}).request();
  248. }
  249. function emptyTrash() {
  250. if(confirm("<?php echo $_lang['confirm_empty_trash']; ?>")==true) {
  251. top.main.document.location.href="index.php?a=64";
  252. }
  253. }
  254. currSorterState="none";
  255. function showSorter() {
  256. if(currSorterState=="none") {
  257. currSorterState="block";
  258. document.getElementById('floater').style.display=currSorterState;
  259. } else {
  260. currSorterState="none";
  261. document.getElementById('floater').style.display=currSorterState;
  262. }
  263. }
  264. function treeAction(id, name, treedisp_children) {
  265. if(ca=="move") {
  266. try {
  267. parent.main.setMoveValue(id, name);
  268. } catch(oException) {
  269. alert('<?php echo $_lang['unable_set_parent']; ?>');
  270. }
  271. }
  272. if(ca=="open" || ca=="") {
  273. if(id==0) {
  274. // do nothing?
  275. parent.main.location.href="index.php?a=2";
  276. } else {
  277. // parent.main.location.href="index.php?a=3&id=" + id + getFolderState(); //just added the getvar &opened=
  278. if(treedisp_children==0) {
  279. parent.main.location.href="index.php?a=3&id=" + id + getFolderState();
  280. } else {
  281. parent.main.location.href="index.php?a=<?php echo (!empty($modx->config['tree_page_click']) ? $modx->config['tree_page_click'] : '27'); ?>&id=" + id; // edit as default action
  282. }
  283. }
  284. }
  285. if(ca=="parent") {
  286. try {
  287. parent.main.setParent(id, name);
  288. } catch(oException) {
  289. alert('<?php echo $_lang['unable_set_parent']; ?>');
  290. }
  291. }
  292. if(ca=="link") {
  293. try {
  294. parent.main.setLink(id);
  295. } catch(oException) {
  296. alert('<?php echo $_lang['unable_set_link']; ?>');
  297. }
  298. }
  299. }
  300. //Raymond: added getFolderState,saveFolderState
  301. function getFolderState(){
  302. if (openedArray != [0]) {
  303. oarray = "&opened=";
  304. for (key in openedArray) {
  305. if (openedArray[key] == 1) {
  306. oarray += key+"|";
  307. }
  308. }
  309. } else {
  310. oarray = "&opened=";
  311. }
  312. return oarray;
  313. }
  314. function saveFolderState() {
  315. var folderState = getFolderState();
  316. new Ajax('index.php?a=1&f=nodes&savestateonly=1'+folderState, {method: 'get'}).request();
  317. }
  318. // show state of recycle bin
  319. function showBinFull() {
  320. var a = $('Button10');
  321. var title = '<?php echo $_lang['empty_recycle_bin']; ?>';
  322. if (a) {
  323. if(!a.setAttribute) a.title = title;
  324. else a.setAttribute('title',title);
  325. a.innerHTML = '<?php echo $_style['empty_recycle_bin']; ?>';
  326. a.className = 'treeButton';
  327. a.onclick = emptyTrash;
  328. }
  329. }
  330. function showBinEmpty() {
  331. var a = $('Button10');
  332. var title = '<?php echo addslashes($_lang['empty_recycle_bin_empty']); ?>';
  333. if (a) {
  334. if(!a.setAttribute) a.title = title;
  335. else a.setAttribute('title',title);
  336. a.innerHTML = '<?php echo $_style['empty_recycle_bin_empty']; ?>';
  337. a.className = 'treeButtonDisabled';
  338. a.onclick = '';
  339. }
  340. }
  341. </script>
  342. <!--[if lt IE 7]>
  343. <style type="text/css">
  344. body { behavior: url(media/script/forIE/htcmime.php?file=csshover.htc) }
  345. img { behavior: url(media/script/forIE/htcmime.php?file=pngbehavior.htc); }
  346. </style>
  347. <![endif]-->
  348. </head>
  349. <body onClick="hideMenu(1);" class="treeframebody<?php echo $modx_textdir ? ' rtl':''?>">
  350. <div id="treeSplitter"></div>
  351. <table id="treeMenu" width="100%" border="0" cellpadding="0" cellspacing="0">
  352. <tr>
  353. <td>
  354. <table cellpadding="0" cellspacing="0" border="0">
  355. <tr>
  356. <td><a href="#" class="treeButton" id="Button1" onClick="expandTree();" title="<?php echo $_lang['expand_tree']; ?>"><?php echo $_style['expand_tree']; ?></a></td>
  357. <td><a href="#" class="treeButton" id="Button2" onClick="collapseTree();" title="<?php echo $_lang['collapse_tree']; ?>"><?php echo $_style['collapse_tree']; ?></a></td>
  358. <?php if ($modx->hasPermission('new_document')) { ?>
  359. <td><a href="#" class="treeButton" id="Button3a" onClick="top.main.document.location.href='index.php?a=4';" title="<?php echo $_lang['add_resource']; ?>"><?php echo $_style['add_doc_tree']; ?></a></td>
  360. <td><a href="#" class="treeButton" id="Button3c" onClick="top.main.document.location.href='index.php?a=72';" title="<?php echo $_lang['add_weblink']; ?>"><?php echo $_style['add_weblink_tree']; ?></a></td>
  361. <?php } ?>
  362. <td><a href="#" class="treeButton" id="Button4" onClick="top.mainMenu.reloadtree();" title="<?php echo $_lang['refresh_tree']; ?>"><?php echo $_style['refresh_tree']; ?></a></td>
  363. <td><a href="#" class="treeButton" id="Button5" onClick="showSorter();" title="<?php echo $_lang['sort_tree']; ?>"><?php echo $_style['sort_tree']; ?></a></td>
  364. <?php if ($modx->hasPermission('empty_trash')) { ?>
  365. <td><a href="#" id="Button10" class="treeButtonDisabled" title="<?php echo $_lang['empty_recycle_bin_empty'] ; ?>"><?php echo $_style['empty_recycle_bin_empty'] ; ?></a></td>
  366. <?php } ?>
  367. <td><a href="#" title="Управление элементами" onclick="window.open('index.php?a=76','gener','width=800,height=600,top='+((screen.height-600)/2)+',left='+((screen.width-800)/2)+',toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no')"><img src="media/style/MODxCarbon/images/icons/comment.gif" style="margin:3px 0 0 5px"></a></td>
  368. </tr>
  369. </table>
  370. </td>
  371. <td align="right">
  372. <table cellpadding="0" cellspacing="0" border="0">
  373. <tr>
  374. <td><a href="#" class="treeButton" id="Button6" onClick="top.mainMenu.hideTreeFrame();" title="<?php echo $_lang['hide_tree']; ?>"><?php echo $_style['hide_tree']; ?></a></td>
  375. </tr>
  376. </table>
  377. </td>
  378. </tr>
  379. </table>
  380. <div id="floater">
  381. <?php
  382. if(isset($_REQUEST['tree_sortby'])) {
  383. $_SESSION['tree_sortby'] = $_REQUEST['tree_sortby'];
  384. }
  385. if(isset($_REQUEST['tree_sortdir'])) {
  386. $_SESSION['tree_sortdir'] = $_REQUEST['tree_sortdir'];
  387. }
  388. ?>
  389. <form name="sortFrm" id="sortFrm" action="menu.php">
  390. <table width="100%" border="0" cellpadding="0" cellspacing="0">
  391. <tr>
  392. <td style="padding-left: 10px;padding-top: 1px;" colspan="2">
  393. <select name="sortby">
  394. <option value="isfolder" <?php echo $_SESSION['tree_sortby']=='isfolder' ? "selected='selected'" : "" ?>><?php echo $_lang['folder']; ?></option>
  395. <option value="pagetitle" <?php echo $_SESSION['tree_sortby']=='pagetitle' ? "selected='selected'" : "" ?>><?php echo $_lang['pagetitle']; ?></option>
  396. <option value="id" <?php echo $_SESSION['tree_sortby']=='id' ? "selected='selected'" : "" ?>><?php echo $_lang['id']; ?></option>
  397. <option value="menuindex" <?php echo $_SESSION['tree_sortby']=='menuindex' ? "selected='selected'" : "" ?>><?php echo $_lang['resource_opt_menu_index'] ?></option>
  398. <option value="createdon" <?php echo $_SESSION['tree_sortby']=='createdon' ? "selected='selected'" : "" ?>><?php echo $_lang['createdon']; ?></option>
  399. <option value="editedon" <?php echo $_SESSION['tree_sortby']=='editedon' ? "selected='selected'" : "" ?>><?php echo $_lang['editedon']; ?></option>
  400. </select>
  401. </td>
  402. </tr>
  403. <tr>
  404. <td width="99%" style="padding-left: 10px;padding-top: 1px;">
  405. <select name="sortdir">
  406. <option value="DESC" <?php echo $_SESSION['tree_sortdir']=='DESC' ? "selected='selected'" : "" ?>><?php echo $_lang['sort_desc']; ?></option>
  407. <option value="ASC" <?php echo $_SESSION['tree_sortdir']=='ASC' ? "selected='selected'" : "" ?>><?php echo $_lang['sort_asc']; ?></option>
  408. </select>
  409. <input type='hidden' name='dt' value='<?php echo $_REQUEST['dt']; ?>' />
  410. </td>
  411. <td width="1%"><a href="#" class="treeButton" id="button7" style="text-align:right" onClick="updateTree();showSorter();" title="<?php echo $_lang['sort_tree']; ?>"><?php echo $_lang['sort_tree']; ?></a></td>
  412. </tr>
  413. </table>
  414. </form>
  415. </div>
  416. <div id="treeHolder">
  417. <div><?php echo $_style['tree_showtree']; ?>&nbsp;<span class="rootNode" onClick="treeAction(0, '<?php echo addslashes($site_name); ?>');"><b><?php echo $site_name; ?></b></span><div id="treeRoot"></div></div>
  418. </div>
  419. <script type="text/javascript">
  420. // Set 'treeNodeSelected' class on document node when editing via Context Menu
  421. function setActiveFromContextMenu( doc_id ){
  422. $$('.treeNodeSelected').removeClass('treeNodeSelected');
  423. $$('#node'+doc_id+' span')[0].className='treeNodeSelected';
  424. }
  425. // Context menu stuff
  426. function menuHandler(action) {
  427. switch (action) {
  428. case 1 : // view
  429. setActiveFromContextMenu( itemToChange );
  430. top.main.document.location.href="index.php?a=3&id=" + itemToChange;
  431. break
  432. case 2 : // edit
  433. setActiveFromContextMenu( itemToChange );
  434. top.main.document.location.href="index.php?a=27&id=" + itemToChange;
  435. break
  436. case 3 : // new Resource
  437. top.main.document.location.href="index.php?a=4&pid=" + itemToChange;
  438. break
  439. case 4 : // delete
  440. if(selectedObjectDeleted==0) {
  441. if(confirm("'" + selectedObjectName + "'\n\n<?php echo $_lang['confirm_delete_resource']; ?>")==true) {
  442. top.main.document.location.href="index.php?a=6&id=" + itemToChange;
  443. }
  444. } else {
  445. alert("'" + selectedObjectName + "' <?php echo $_lang['already_deleted']; ?>");
  446. }
  447. break
  448. case 5 : // move
  449. top.main.document.location.href="index.php?a=51&id=" + itemToChange;
  450. break
  451. case 6 : // new Weblink
  452. top.main.document.location.href="index.php?a=72&pid=" + itemToChange;
  453. break
  454. case 7 : // duplicate
  455. if(confirm("<?php echo $_lang['confirm_resource_duplicate'] ?>")==true) {
  456. top.main.document.location.href="index.php?a=94&id=" + itemToChange;
  457. }
  458. break
  459. case 8 : // undelete
  460. if(selectedObjectDeleted==0) {
  461. alert("'" + selectedObjectName + "' <?php echo $_lang['not_deleted']; ?>");
  462. } else {
  463. if(confirm("'" + selectedObjectName + "' <?php echo $_lang['confirm_undelete']; ?>")==true) {
  464. top.main.document.location.href="index.php?a=63&id=" + itemToChange;
  465. }
  466. }
  467. break
  468. case 9 : // publish
  469. if(confirm("'" + selectedObjectName + "' <?php echo $_lang['confirm_publish']; ?>")==true) {
  470. top.main.document.location.href="index.php?a=61&id=" + itemToChange;
  471. }
  472. break
  473. case 10 : // unpublish
  474. if (itemToChange != <?php echo $modx->config['site_start']?>) {
  475. if(confirm("'" + selectedObjectName + "' <?php echo $_lang['confirm_unpublish']; ?>")==true) {
  476. top.main.document.location.href="index.php?a=62&id=" + itemToChange;
  477. }
  478. } else {
  479. alert('Document is linked to site_start variable and cannot be unpublished!');
  480. }
  481. break
  482. case 12 : // preview
  483. window.open(selectedObjectUrl,'previeWin'); //re-use 'new' window
  484. break
  485. default :
  486. alert('Unknown operation command.');
  487. }
  488. }
  489. </script>
  490. <!-- Contextual Menu Popup Code -->
  491. <div id="mx_contextmenu" onselectstart="return false;">
  492. <div id="nameHolder">&nbsp;</div>
  493. <?php
  494. constructLink(3, $_style["icons_new_document"], $_lang["create_resource_here"], $modx->hasPermission('new_document')); // new Resource
  495. constructLink(2, $_style["icons_save"], $_lang["edit_resource"], $modx->hasPermission('edit_document')); // edit
  496. constructLink(5, $_style["icons_move_document"] , $_lang["move_resource"], $modx->hasPermission('save_document')); // move
  497. constructLink(7, $_style["icons_resource_duplicate"], $_lang["resource_duplicate"], $modx->hasPermission('new_document')); // duplicate
  498. ?>
  499. <div class="seperator"></div>
  500. <?php
  501. constructLink(9, $_style["icons_publish_document"], $_lang["publish_resource"], $modx->hasPermission('publish_document')); // publish
  502. constructLink(10, $_style["icons_unpublish_resource"], $_lang["unpublish_resource"], $modx->hasPermission('publish_document')); // unpublish
  503. constructLink(4, $_style["icons_delete"], $_lang["delete_resource"], $modx->hasPermission('delete_document')); // delete
  504. constructLink(8, $_style["icons_undelete_resource"], $_lang["undelete_resource"], $modx->hasPermission('delete_document')); // undelete
  505. ?>
  506. <div class="seperator"></div>
  507. <?php
  508. constructLink(6, $_style["icons_weblink"], $_lang["create_weblink_here"], $modx->hasPermission('new_document')); // new Weblink
  509. ?>
  510. <div class="seperator"></div>
  511. <?php
  512. constructLink(1, $_style["icons_resource_overview"], $_lang["resource_overview"], $modx->hasPermission('view_document')); // view
  513. constructLink(12, $_style["icons_preview_resource"], $_lang["preview_resource"], 1); // preview
  514. ?>
  515. </div>
  516. </body>
  517. </html>