modresourcegroup.class.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <?php
  2. /*
  3. * This file is part of MODX Revolution.
  4. *
  5. * Copyright (c) MODX, LLC. All Rights Reserved.
  6. *
  7. * For complete copyright and license information, see the COPYRIGHT and LICENSE
  8. * files found in the top-level directory of this distribution.
  9. */
  10. /**
  11. * A group of Resources which can be used for restricting access via ACLs and Permissions.
  12. *
  13. * @property string $name The name of the Resource Group
  14. * @property boolean $private_memgroup Deprecated
  15. * @property boolean $private_webgroup Deprecated
  16. *
  17. * @property modX|xPDO $xpdo
  18. * @see modResourceGroupResource
  19. * @see modAccessResourceGroup
  20. * @package modx
  21. */
  22. class modResourceGroup extends modAccessibleSimpleObject {
  23. /**
  24. * Overrides xPDOObject::save to fire modX-specific events.
  25. *
  26. * {@inheritDoc}
  27. */
  28. public function save($cacheFlag= null) {
  29. $isNew = $this->isNew();
  30. if ($this->xpdo instanceof modX) {
  31. $this->xpdo->invokeEvent('OnResourceGroupBeforeSave',array(
  32. 'mode' => $isNew ? modSystemEvent::MODE_NEW : modSystemEvent::MODE_UPD,
  33. 'resourceGroup' => &$this,
  34. 'cacheFlag' => $cacheFlag,
  35. ));
  36. }
  37. $saved = parent :: save($cacheFlag);
  38. /* invoke post-save events */
  39. if ($saved && $this->xpdo instanceof modX) {
  40. $this->xpdo->invokeEvent('OnResourceGroupSave',array(
  41. 'mode' => $isNew ? modSystemEvent::MODE_NEW : modSystemEvent::MODE_UPD,
  42. 'resourceGroup' => &$this,
  43. 'cacheFlag' => $cacheFlag,
  44. ));
  45. }
  46. return $saved;
  47. }
  48. /**
  49. * Overrides xPDOObject::remove to fire modX-specific events
  50. *
  51. * {@inheritDoc}
  52. */
  53. public function remove(array $ancestors= array ()) {
  54. if ($this->xpdo instanceof modX) {
  55. $this->xpdo->invokeEvent('OnBeforeResourceGroupRemove',array(
  56. 'resourceGroup' => &$this,
  57. 'ancestors' => $ancestors,
  58. ));
  59. }
  60. $removed = parent :: remove($ancestors);
  61. if ($this->xpdo instanceof modX) {
  62. $this->xpdo->invokeEvent('OnResourceGroupRemove',array(
  63. 'resourceGroup' => &$this,
  64. 'ancestors' => $ancestors,
  65. ));
  66. }
  67. return $removed;
  68. }
  69. /**
  70. * Get all Resources within this Resource Group
  71. * @return array|null
  72. */
  73. public function getResources() {
  74. $c= $this->xpdo->newQuery('modResource');
  75. $c->innerJoin('modResourceGroupResource', 'ResourceGroupResources');
  76. $c->where(array ('ResourceGroupResources.document_group' => $this->get('id')));
  77. return $this->xpdo->getCollection('modResource', $c);
  78. }
  79. /**
  80. * Get all User Groups attached to this Resource Group
  81. * @return array
  82. */
  83. public function getUserGroups() {
  84. $access= $this->xpdo->getCollection('modAccessResourceGroup', array (
  85. 'target' => $this->get('id'),
  86. 'principal_class' => 'modUserGroup',
  87. ));
  88. $groups= array();
  89. /** @var modAccessResourceGroup $arg */
  90. foreach ($access as $arg) {
  91. $groups[$arg->get('target')]= $arg->getOne('Target');
  92. }
  93. return $groups;
  94. }
  95. /**
  96. * Check to see if the passed user (or current active user) has access to this Resource Group
  97. * @param null|modUser $user
  98. * @param string $context
  99. * @return boolean
  100. */
  101. public function hasAccess($user = null,$context = '') {
  102. /** @var modUser $user */
  103. $user = !empty($user) ? $user : $this->xpdo->user;
  104. if (is_object($context)) $context = $context->get('key');
  105. $resourceGroups = $user->getResourceGroups($context);
  106. $hasAccess = false;
  107. if (!empty($resourceGroups)) {
  108. foreach ($resourceGroups as $resourceGroup) {
  109. if (intval($resourceGroup) == $this->get('id')) {
  110. $hasAccess = true;
  111. break;
  112. }
  113. }
  114. }
  115. return $hasAccess;
  116. }
  117. }