public function isChanged() { // When unbound, use the local changed flag if (!$this->record instanceof DataObject) { return $this->isChanged; } // Defer to parent record foreach ($this->compositeDatabaseFields() as $field => $spec) { $key = $this->getName() . $field; if ($this->record->isChanged($key)) { return true; } } return false; }
/** * Is the member the owner of this object, and is the permission being checked * in the list of permissions that owners have? * * @param string $perm * @param Member $member * @return boolean */ protected function checkOwnerPerms(DataObject $node, $perm, $member) { $ownerId = $node->OwnerID; if (!$node) { return; } if ($node->isChanged('OwnerID')) { $changed = $node->getChangedFields(); $ownerId = isset($changed['OwnerID']['before']) && $changed['OwnerID']['before'] ? $changed['OwnerID']['before'] : $ownerId; } if (!$member || $ownerId != $member->ID) { return false; } $cache = $this->getCache(); $perms = $cache->load('ownerperms'); if (!$perms) { // find the owner role and take the permissions of it $ownerRole = DataObject::get_one('AccessRole', '"Title" = \'Owner\''); if ($ownerRole && $ownerRole->exists()) { $perms = $ownerRole->Composes->getValues(); if (is_array($perms)) { $cache->save($perms, 'ownerperms'); } } else { // just fall back to checking OwnerID == $member->ID return $ownerId == $member->ID; } } if (is_array($perms) && in_array($perm, $perms)) { return true; } }