editmanagepriv.js 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. /**
  2. * Init comp recomend-tree.
  3. *
  4. * @param array data
  5. * @access public
  6. * @return void
  7. */
  8. function initRecomendTree(data)
  9. {
  10. $(".menuTree.recommend").tree(
  11. {
  12. data: data,
  13. initialState: 'active',
  14. itemCreator: function($li, item)
  15. {
  16. $li.append('<a class="priv-item" data-has-children="' + (item.children ? !!item.children.length : false) + '" href="#" title="' + item.title + '">' + item.title + (item.children ? '' : '<i class="icon icon-close hidden" data-type="recommend" data-privid=' + item.privID + ' data-relationpriv=' + item.relationPriv + '></i>') + '</a>');
  17. if(item.active) $li.addClass('active open in');
  18. }
  19. });
  20. }
  21. /**
  22. * Init comp depend-tree.
  23. *
  24. * @param array data
  25. * @access public
  26. * @return void
  27. */
  28. function initDependTree(data)
  29. {
  30. $(".menuTree.depend").tree(
  31. {
  32. data: data,
  33. initialState: 'active',
  34. itemCreator: function($li, item)
  35. {
  36. $li.append('<a class="priv-item" data-has-children="' + (item.children ? !!item.children.length : false) + '" href="#" title="' + item.title + '">' + item.title + (item.children ? '' : '<i class="icon icon-close hidden" data-type="depend" data-privid=' + item.privID + ' data-relationpriv=' + item.relationPriv + '></i>') + '</a>');
  37. if(item.active) $li.addClass('active open in');
  38. }
  39. });
  40. }
  41. /**
  42. * update comp tree after click checkbox-label.
  43. *
  44. * @param obj objTree
  45. * @access public
  46. * @return void
  47. */
  48. function updatePrivTree(objTree)
  49. {
  50. $(".menuTree.depend").data('zui.tree').reload(objTree.dependData || [] );
  51. if(objTree.dependData && objTree.dependData.length)
  52. {
  53. $(".menuTree.depend + .empty-tip").addClass('hidden');
  54. var privCount = 0;
  55. $.each(objTree.dependData, function(index, item){if(item.children) privCount += item.children.length;});
  56. $(".menuTree.depend").closest('.priv-panel').find('.panel-title .priv-count').html('(' + privCount + ')');
  57. }
  58. else
  59. {
  60. $(".menuTree.depend + .empty-tip").removeClass('hidden');
  61. $(".menuTree.depend").closest('.priv-panel').find('.panel-title .priv-count').html('');
  62. }
  63. $(".menuTree.recommend").data('zui.tree').reload(objTree.recommendData || []);
  64. if(objTree.recommendData && objTree.recommendData.length)
  65. {
  66. $(".menuTree.recommend + .empty-tip").addClass('hidden');
  67. var privCount = 0;
  68. $.each(objTree.recommendData, function(index, item){if(item.children) privCount += item.children.length;});
  69. $(".menuTree.recommend").closest('.priv-panel').find('.panel-title .priv-count').html('(' + privCount + ')');
  70. }
  71. else
  72. {
  73. $(".menuTree.recommend + .empty-tip").removeClass('hidden');
  74. $(".menuTree.recommend").closest('.priv-panel').find('.panel-title .priv-count').html('');
  75. }
  76. if(!canDeleteRelation) $('.side a.priv-item .icon-close').remove();
  77. }
  78. /**
  79. * Get relation side.
  80. *
  81. * @param int $privID
  82. * @access public
  83. * @return void
  84. */
  85. function getSideRelation(privID)
  86. {
  87. $.get(createLink('group', 'ajaxGetPrivRelations', "privID=" + privID), function(data)
  88. {
  89. var objTree = {};
  90. if(data)
  91. {
  92. var relatedPriv = JSON.parse(data);
  93. objTree.dependData = relatedPriv.depend;
  94. objTree.recommendData = relatedPriv.recommend;
  95. }
  96. updatePrivTree(objTree);
  97. })
  98. }
  99. /**
  100. * Update depend and recommend privs.
  101. *
  102. * @param e $e
  103. * @access public
  104. * @return void
  105. */
  106. function updateRelations(e)
  107. {
  108. if($('.bg-primary-pale').length) $('.bg-primary-pale').removeClass('bg-primary-pale');
  109. $('#privListTable').length > 0 ? $(e.target).closest('tr').addClass('bg-primary-pale') : $(e.target).addClass('bg-primary-pale');
  110. var selectedID = $('#privListTable').length == 0 ? $(e.target).siblings('input:checkbox').data('id') : $(e.target).closest('tr').attr('data-id');
  111. $('.side a#addDependent').attr('href', createLink('group', 'addRelation', "privIdList=" + selectedID + '&type=depend')).removeAttr('disabled');
  112. $('.side a#addRecommendation').attr('href', createLink('group', 'addRelation', "privIdList=" + selectedID + '&type=recommend')).removeAttr('disabled');
  113. if(!$('.side a#addDependent').hasClass('modaled')) $('.side a#addDependent,.side a#addRecommendation').modal().addClass('modaled');
  114. getSideRelation(selectedID);
  115. }
  116. $(function()
  117. {
  118. $(".menuTree").on('mouseover', ".priv-item", function()
  119. {
  120. $(this).addClass('text-primary');
  121. $(this).find('.icon').removeClass('hidden');
  122. }).on('mouseout', '.priv-item', function()
  123. {
  124. $(this).removeClass('text-primary');
  125. $(this).find('.icon').addClass('hidden');
  126. });
  127. initRecomendTree([]);
  128. initDependTree([]);
  129. $('li.has-list > ul').addClass("menu-active-primary menu-hover-primary");
  130. $('.sorter-group').sortable(
  131. {
  132. 'selector': '.group-item',
  133. finish: function(e)
  134. {
  135. var orders = {};
  136. var arrGetItems = $(e.target).parent().data('zui.sortable').getItems();
  137. for(var i = 0; i < arrGetItems.length; i++)
  138. {
  139. var groupItem = arrGetItems[i];
  140. var privID = $(groupItem.item).find('input').data('id');
  141. orders['orders[' + privID + ']'] = groupItem.order;
  142. }
  143. $.post(createLink('group', 'ajaxUpdatePrivOrder'), orders).error(function()
  144. {
  145. bootbox.alert(lang.timeout);
  146. });
  147. }
  148. });
  149. $('.btn-switch').on('click', function()
  150. {
  151. $.cookie('managePrivEditType', $(this).data('type'), {expires: config.cookieLife, path: config.webRoot});
  152. location.href = location.href;
  153. });
  154. $('.permission-row .checkbox-primary').on('click', 'label', function(e)
  155. {
  156. e.stopPropagation();
  157. if($(e.target).prop('tagName') == 'LABEL') updateRelations(e);
  158. });
  159. $('#privListTable tr').on('click', 'td', function(e)
  160. {
  161. if(!$(e.target.closest('td')).hasClass('c-actions') && $(e.target).attr('type') != 'checkbox')
  162. {
  163. e.stopPropagation();
  164. updateRelations(e);
  165. }
  166. });
  167. $(document).on('click', '.side .priv-item .icon-close', function()
  168. {
  169. var $this = $(this);
  170. var privCount = $this.closest('.menuTree').find('.priv-item[data-has-children="false"]').length;
  171. var type = $this.data('type')
  172. var privID = $this.data('privid')
  173. var relationPriv = $this.data('relationpriv');
  174. $.get(createLink('group', 'deleteRelation', 'type=' + type + '&privID=' + privID + '&relationPriv=' + relationPriv));
  175. $this.closest('.priv-panel').find('.panel-title .priv-count').html('(' + (privCount - 1) + ')');
  176. if($this.closest('ul').find('li').length == 1) $this.closest('ul').closest('li').remove();
  177. $this.closest('li').remove();
  178. })
  179. $(document).on('change', '.checkbox-primary input[type=checkbox], #privListTable input[type=checkbox]', function()
  180. {
  181. var privIdList = '';
  182. $('.checkbox-primary input[type=checkbox]:checked').each(function()
  183. {
  184. var privID = $(this).data('id');
  185. if(privID) privIdList += ',' + privID;
  186. });
  187. $('#privListTable input[type=checkbox]:checked').each(function()
  188. {
  189. var privID = $(this).closest('tr').data('id');
  190. if(privID) privIdList += ',' + privID;
  191. });
  192. if(privIdList == '')
  193. {
  194. $('#batchSetDepend,#batchSetRecommend,#batchDeleteDepend,#batchDeleteRecommend').attr('href', '#');
  195. $('#batchActions').addClass('disabled');
  196. return;
  197. }
  198. privIdList = privIdList.substr(1);
  199. $('#batchSetDepend').attr('href', createLink('group', 'addRelation', "privIdList=" + privIdList + '&type=depend'));
  200. $('#batchSetRecommend').attr('href', createLink('group', 'addRelation', "privIdList=" + privIdList + '&type=recommend'));
  201. $('#batchDeleteDepend').attr('href', createLink('group', 'batchDeleteRelation', "privIdList=" + privIdList + '&type=depend'));
  202. $('#batchDeleteRecommend').attr('href', createLink('group', 'batchDeleteRelation', "privIdList=" + privIdList + '&type=recommend'));
  203. $('#batchActions').removeClass('disabled');
  204. })
  205. });