/** @return Boolean did it add? */
 protected function addPermission(BaseUserPermission $permission = null)
 {
     // The permission could be from a extension that has now been removed
     if (!$permission) {
         return false;
     }
     if ($this->hasPermission($permission->getUserPermissionExtensionID(), $permission->getUserPermissionKey())) {
         return false;
     }
     $add = true;
     if ($permission->requiresUser() && !$this->has_user) {
         $add = false;
     } else {
         if ($permission->requiresVerifiedUser() && !$this->has_user_verified) {
             $add = false;
         } else {
             if ($permission->requiresEditorUser() && (!$this->has_user_editor || $this->removeEditorPermissions)) {
                 $add = false;
             }
         }
     }
     if ($add) {
         $this->permissions[] = $permission;
         return true;
     }
     return false;
 }
 public function removePermissionFromGroup(\BaseUserPermission $userPermissionModel, UserGroupModel $userGroupModel, UserAccountModel $currentUser = null)
 {
     global $DB;
     $stat = $DB->prepare("UPDATE permission_in_user_group SET removed_at=:removed_at, removed_by_user_account_id=:removed_by_user_account_id WHERE " . "extension_id=:extension_id AND permission_key = :permission_key AND user_group_id = :user_group_id AND removed_at IS NULL");
     $stat->execute(array("extension_id" => $userPermissionModel->getUserPermissionExtensionID(), "permission_key" => $userPermissionModel->getUserPermissionKey(), "user_group_id" => $userGroupModel->getId(), "removed_at" => \TimeSource::getFormattedForDataBase(), "removed_by_user_account_id" => $currentUser ? $currentUser->getId() : null));
 }