</div>
</ng-template>
</li>
- <li [ngbNavItem]="5" *ngIf="isCommentsEnabled">
+ <li [ngbNavItem]="5" *ngIf="commentsEnabled">
<a ngbNavLink i18n>Comments</a>
<ng-template ngbNavContent>
<app-document-comment #commentComponent></app-document-comment>
import { PaperlessStoragePath } from 'src/app/data/paperless-storage-path'
import { StoragePathEditDialogComponent } from '../common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component'
import { SETTINGS_KEYS } from 'src/app/data/paperless-uisettings'
-import { EnvironmentService } from 'src/app/services/rest/environment.service'
@Component({
selector: 'app-document-detail',
previewCurrentPage: number = 1
previewNumPages: number = 1
- isCommentsEnabled:boolean = false
-
store: BehaviorSubject<any>
isDirty$: Observable<boolean>
unsubscribeNotifier: Subject<any> = new Subject()
private documentTitlePipe: DocumentTitlePipe,
private toastService: ToastService,
private settings: SettingsService,
- private storagePathService: StoragePathService,
- private environment: EnvironmentService
+ private storagePathService: StoragePathService
) {}
titleKeyUp(event) {
this.suggestions = null
},
})
-
- this.environment.get("PAPERLESS_COMMENTS_ENABLED").subscribe(result => {
- this.isCommentsEnabled = (result.value.toString().toLowerCase() === "true"?true:false);
- }, error => {
- this.isCommentsEnabled = false;
- })
this.title = this.documentTitlePipe.transform(doc.title)
this.documentForm.patchValue(doc)
this.password = (event.target as HTMLInputElement).value
}
}
+
+ get commentsEnabled(): boolean {
+ return this.settings.get(SETTINGS_KEYS.COMMENTS_ENABLED)
+ }
}
</div>
</div>
+ <h4 class="mt-4" i18n>Comments</h4>
+
+ <div class="row mb-3">
+ <div class="offset-md-3 col">
+ <app-input-check i18n-title title="Enable comments" formControlName="commentsEnabled"></app-input-check>
+ </div>
+ </div>
+
</ng-template>
</li>
notificationsConsumerSuccess: new FormControl(null),
notificationsConsumerFailed: new FormControl(null),
notificationsConsumerSuppressOnDashboard: new FormControl(null),
+ commentsEnabled: new FormControl(null),
})
savedViews: PaperlessSavedView[]
notificationsConsumerSuppressOnDashboard: this.settings.get(
SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUPPRESS_ON_DASHBOARD
),
+ commentsEnabled: this.settings.get(SETTINGS_KEYS.COMMENTS_ENABLED),
}
for (let view of this.savedViews) {
SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUPPRESS_ON_DASHBOARD,
this.settingsForm.value.notificationsConsumerSuppressOnDashboard
)
+ this.settings.set(
+ SETTINGS_KEYS.COMMENTS_ENABLED,
+ this.settingsForm.value.commentsEnabled
+ )
this.settings.setLanguage(this.settingsForm.value.displayLanguage)
this.settings
.storeSettings()
+++ /dev/null
-export interface PaperlessEnvironment {
- value?: string;
-}
\ No newline at end of file
'general-settings:notifications:consumer-failed',
NOTIFICATIONS_CONSUMER_SUPPRESS_ON_DASHBOARD:
'general-settings:notifications:consumer-suppress-on-dashboard',
+ COMMENTS_ENABLED: 'general-settings:comments-enabled',
}
export const SETTINGS: PaperlessUiSetting[] = [
type: 'boolean',
default: true,
},
+ {
+ key: SETTINGS_KEYS.COMMENTS_ENABLED,
+ type: 'boolean',
+ default: true,
+ },
]
+++ /dev/null
-import { TestBed } from '@angular/core/testing';
-
-import { EnvironmentService } from './environment.service';
-
-describe('EnvironmentService', () => {
- let service: EnvironmentService;
-
- beforeEach(() => {
- TestBed.configureTestingModule({});
- service = TestBed.inject(EnvironmentService);
- });
-
- it('should be created', () => {
- expect(service).toBeTruthy();
- });
-});
\ No newline at end of file
+++ /dev/null
-import { HttpClient, HttpParams } from '@angular/common/http';
-import { Injectable } from '@angular/core';
-import { Observable } from 'rxjs';
-import { PaperlessEnvironment } from 'src/app/data/paperless-environment';
-import { environment } from 'src/environments/environment'
-
-@Injectable({
- providedIn: 'root'
-})
-export class EnvironmentService {
-
- protected baseUrl: string = environment.apiBaseUrl
-
- constructor(protected http: HttpClient) { }
-
- get(environment: string): Observable<PaperlessEnvironment> {
- let httpParams = new HttpParams();
- httpParams = httpParams.set('name', environment);
-
- return this.http.get<PaperlessEnvironment>(`${this.baseUrl}environment/`, {params: httpParams})
- }
-}
\ No newline at end of file
from django.http import HttpResponse
from django.http import HttpResponseBadRequest
from django.http import HttpResponseNotAllowed
-from django.http import HttpResponseNotFound
from django.utils.decorators import method_decorator
from django.utils.translation import get_language
from django.views.decorators.cache import cache_control
def getComments(self, doc):
return [
{
- "id":c.id,
- "comment":c.comment,
- "created":c.created,
- "user":{
- "id":c.user.id,
+ "id": c.id,
+ "comment": c.comment,
+ "created": c.created,
+ "user": {
+ "id": c.user.id,
"username": c.user.username,
- "firstname":c.user.first_name,
- "lastname":c.user.last_name
- }
- } for c in Comment.objects.filter(document=doc).order_by('-created')
- ];
-
- @action(methods=['get', 'post', 'delete'], detail=True)
+ "firstname": c.user.first_name,
+ "lastname": c.user.last_name,
+ },
+ }
+ for c in Comment.objects.filter(document=doc).order_by("-created")
+ ]
+
+ @action(methods=["get", "post", "delete"], detail=True)
def comments(self, request, pk=None):
- if settings.PAPERLESS_COMMENTS_ENABLED != True:
+ if settings.PAPERLESS_COMMENTS_ENABLED is not True:
return HttpResponseNotAllowed("comment function is disabled")
try:
except Document.DoesNotExist:
raise Http404()
- currentUser = request.user;
+ currentUser = request.user
- if request.method == 'GET':
+ if request.method == "GET":
try:
- return Response(self.getComments(doc));
+ return Response(self.getComments(doc))
except Exception as e:
- return Response({"error": str(e)});
- elif request.method == 'POST':
+ return Response({"error": str(e)})
+ elif request.method == "POST":
try:
c = Comment.objects.create(
- document = doc,
+ document=doc,
comment=request.data["payload"],
- user=currentUser
- );
- c.save();
+ user=currentUser,
+ )
+ c.save()
- return Response(self.getComments(doc));
+ return Response(self.getComments(doc))
except Exception as e:
- return Response({
- "error": str(e)
- });
- elif request.method == 'DELETE':
- comment = Comment.objects.get(id=int(request.GET.get("commentId")));
- comment.delete();
- return Response(self.getComments(doc));
+ return Response(
+ {
+ "error": str(e),
+ },
+ )
+ elif request.method == "DELETE":
+ comment = Comment.objects.get(id=int(request.GET.get("commentId")))
+ comment.delete()
+ return Response(self.getComments(doc))
- return Response({
- "error": "error"
- });
+ return Response(
+ {
+ "error": "error",
+ },
+ )
class SearchResultSerializer(DocumentSerializer):
return Response({"result": result})
except Exception:
return HttpResponseBadRequest()
-
-class EnvironmentView(APIView):
-
- permission_classes = (IsAuthenticated,)
-
- def get(self, request, format=None):
- if 'name' in request.query_params:
- name = request.query_params['name']
- else:
- return HttpResponseBadRequest("name required")
-
- if(name not in settings.PAPERLESS_FRONTEND_ALLOWED_ENVIRONMENTS and settings.PAPERLESS_DISABLED_FRONTEND_ENVIRONMENT_CHECK == False):
- return HttpResponseNotAllowed("environment not allowed to request")
-
- value = None
- try:
- value = getattr(settings, name)
- except:
- try:
- value = os.getenv(name)
- except:
- value = None
-
- if value == None:
- return HttpResponseNotFound("environment not found")
-
- return Response({
- "value": str(value)
- });
GS_BINARY = os.getenv("PAPERLESS_GS_BINARY", "gs")
-# Comment settings
-PAPERLESS_COMMENTS_ENABLED = __get_boolean("PAPERLESS_COMMENTS_ENABLED", "NO")
-
-# allowed environments for frontend
-PAPERLESS_DISABLED_FRONTEND_ENVIRONMENT_CHECK = __get_boolean("PAPERLESS_DISABLED_FRONTEND_ENVIRONMENT_CHECK", "NO")
-PAPERLESS_FRONTEND_ALLOWED_ENVIRONMENTS = [
- "PAPERLESS_COMMENTS_ENABLED"
-]
-
# Pre-2.x versions of Paperless stored your documents locally with GPG
# encryption, but that is no longer the default. This behaviour is still
# available, but it must be explicitly enabled by setting
from django.views.decorators.csrf import csrf_exempt
from django.views.generic import RedirectView
from documents.views import AcknowledgeTasksView
-from documents.views import EnvironmentView
from documents.views import BulkDownloadView
from documents.views import BulkEditView
from documents.views import CorrespondentViewSet
AcknowledgeTasksView.as_view(),
name="acknowledge_tasks",
),
- re_path(r"^environment/", EnvironmentView.as_view()),
path("token/", views.obtain_auth_token),
]
+ api_router.urls,