diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index 58c6b7cdf..213eceab2 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -486,6 +486,14 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ return $this->_defaultAccess; } /* }}} */ + /** + * Set default access mode + * + * This method sets the default access mode and also removes all notifiers which + * will not have read access anymore. + * + * @param integer $mode access mode + */ function setDefaultAccess($mode) { /* {{{ */ $db = $this->_dms->getDB(); @@ -497,18 +505,22 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ // If any of the notification subscribers no longer have read access, // remove their subscription. - if(isset($this->_notifyList["users"])) { - foreach ($this->_notifyList["users"] as $u) { - if ($this->getAccessMode($u) < M_READ) { - $this->removeNotify($u->getID(), true); - } + if (empty($this->_notifyList)) + $this->getNotifyList(); + + /* Make a copy of both notifier lists because removeNotify will empty + * $this->_notifyList and the second foreach will not work anymore. + */ + $nusers = $this->_notifyList["users"]; + $ngroups = $this->_notifyList["groups"]; + foreach ($this->_notifyList["users"] as $u) { + if ($this->getAccessMode($u) < M_READ) { + $this->removeNotify($u->getID(), true); } } - if(isset($this->_notifyList["groups"])) { - foreach ($this->_notifyList["groups"] as $g) { - if ($this->getGroupAccessMode($g) < M_READ) { - $this->removeNotify($g->getID(), false); - } + foreach ($ngroups as $g) { + if ($this->getGroupAccessMode($g) < M_READ) { + $this->removeNotify($g->getID(), false); } }