From 8d645434fe4cb332fdc95b75df35aab2ee41bfcc Mon Sep 17 00:00:00 2001 From: prashantsinalkar Date: Sat, 7 Sep 2019 23:51:32 +0530 Subject: added ajax --- website/ajax.py | 530 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 530 insertions(+) create mode 100755 website/ajax.py (limited to 'website/ajax.py') diff --git a/website/ajax.py b/website/ajax.py new file mode 100755 index 0000000..ecd040a --- /dev/null +++ b/website/ajax.py @@ -0,0 +1,530 @@ +from django.forms.models import model_to_dict +import json as simplejson +from django.http import HttpResponse +from django.shortcuts import render, redirect +from django.core import serializers + +# from django.http import HttpResponse, HttpResponseRedirect +# from django.shortcuts import render, redirect +from django.core.mail import EmailMultiAlternatives +from django.template.context_processors import csrf +# from django.utils.html import strip_tags +from django.template.loader import render_to_string, get_template +from django.views.decorators.csrf import csrf_exempt, csrf_protect + +# from django.db.models import Q +from textwrap import dedent +from R_on_Cloud.config import FROM_EMAIL, TO_EMAIL, CC_EMAIL, BCC_EMAIL +from R_on_Cloud.config import UPLOADS_PATH +from website.views import catg +from website.models import * +from website.forms import BugForm, RevisionForm, issues + +from . import utils +from .query import * + +import base64 +from django.db import connections + + +def remove_from_session(request, keys): + for key in keys: + request.session.pop(key, None) + + +def subcategories(request): + context = {} + response_dict = [] + if request.is_ajax(): + maincategory_id = int(request.GET.get('maincat_id')) + if maincategory_id: + request.session['maincat_id'] = maincategory_id + with connections['r'].cursor() as cursor: + cursor.execute(GET_SUBCATEGORY_SQL, params=[maincategory_id]) + subcategory = cursor.fetchall() + for obj in subcategory: + response = { + 'subcategory_id': obj[1], + 'subcategory': obj[2], + } + response_dict.append(response) + return HttpResponse(simplejson.dumps(response_dict), + content_type='application/json') + + +def books(request): + context = {} + response_dict = [] + if request.is_ajax(): + main_category_id = int(request.GET.get('maincat_id')) + category_id = int(request.GET.get('cat_id')) + + if category_id: + # store category_id in cookie/session + request.session['subcategory_id'] = category_id + request.session['maincat_id'] = main_category_id + remove_from_session(request, [ + 'book_id', + 'chapter_id', + 'example_id', + 'commit_sha', + 'example_file_id', + 'filepath', + 'code', + ]) + + with connections['r'].cursor() as cursor: + cursor.execute(GET_TBC_PREFERENCE_SQL, + params=[main_category_id, category_id]) + books = cursor.fetchall() + for obj in books: + response = { + 'id': obj[1], + 'book': obj[4], + 'author': obj[5] + } + + response_dict.append(response) + return HttpResponse(simplejson.dumps(response_dict), + content_type='application/json') + + +def chapters(request): + context = {} + response_dict = [] + if request.is_ajax(): + book_id = int(request.GET.get('book_id')) + if book_id: + request.session['book_id'] = book_id + remove_from_session(request, [ + 'chapter_id', + 'example_id', + 'commit_sha', + 'example_file_id', + 'filepath', + 'code', + ]) + + with connections['r'].cursor() as cursor: + cursor.execute(GET_TBC_CHAPTER_SQL, params=[book_id]) + chapters = cursor.fetchall() + for obj in chapters: + response = { + 'id': obj[0], + 'number': obj[1], + 'chapter': obj[2], + + } + print(obj.name) + response_dict.append(response) + return HttpResponse(simplejson.dumps(response_dict), + content_type='application/json') + + +def examples(request): + context = {} + response_dict = [] + if request.is_ajax(): + chapter_id = int(request.GET.get('chapter_id')) + if chapter_id: + request.session['chapter_id'] = chapter_id + remove_from_session(request, [ + 'example_id', + 'commit_sha', + 'example_file_id', + 'filepath', + 'code', + ]) + + with connections['r'].cursor() as cursor: + cursor.execute(GET_TBC_EXAMPLE_SQL, params=[chapter_id]) + examples = cursor.fetchall() + for obj in examples: + response = { + 'id': obj[0], + 'number': obj[1], + 'caption': obj[2], + } + response_dict.append(response) + return HttpResponse(simplejson.dumps(response_dict), + content_type='application/json') + + +def revisions(request): + commits = {} + response_dict = [] + if request.is_ajax(): + example_id = int(request.GET.get('example_id')) + request.session['example_id'] = example_id + remove_from_session(request, [ + 'commit_sha', + 'example_file_id', + 'filepath', + 'code', + ]) + + with connections['r'].cursor() as cursor: + cursor.execute(GET_TBC_EXAMPLE_FILE_SQL, params=[example_id]) + example_file = cursor.fetchone() + example_file_filepath = example_file[4] + '/' + example_file[5] + request.session['example_file_id'] = example_file[3] + request.session['filepath'] = example_file_filepath + commits = utils.get_commits(file_path=example_file_filepath) + response = { + 'commits': commits, + } + response_dict.append(response) + return HttpResponse(simplejson.dumps(response), + content_type='application/json') + + +def code(request): + commits = {} + response_dict = [] + if request.is_ajax(): + commit_sha = request.GET.get('commit_sha') + request.session['commit_sha'] = commit_sha + remove_from_session(request, [ + 'code', + ]) + code = '' + review = '' + review_url = '' + example_id = request.session['example_id'] + if not example_id: + example_id = int(request.GET.get('example_id')) + file_path = request.session['filepath'] + review = ScilabCloudComment.objects.using('r')\ + .filter(example=example_id).count() + with connections['r'].cursor() as cursor: + cursor.execute(GET_TBC_EXAMPLE_FILE_VIEW_SQL, params=[example_id]) + exmple = cursor.fetchone() + review_url = "https://scilab.in/cloud_comments/" + str(example_id) + # example_path = UPLOADS_PATH + '/' + file_path + + file = utils.get_file(file_path, commit_sha, main_repo=True) + code = base64.b64decode(file['content']) + response = { + 'code': code.decode('UTF-8'), + 'review': review, + 'review_url': review_url, + 'exmple': exmple[1] + } + # response_dict.append(response) + return HttpResponse(simplejson.dumps(response), + content_type='application/json') + + +def contributor(request): + context = {} + contributor = {} + response_dict = [] + if request.is_ajax(): + book_id = int(request.GET.get('book_id')) + + with connections['r'].cursor() as cursor: + cursor.execute(GET_TBC_CONTRIBUTOR_DETAILS_SQL, params=[book_id]) + contributor = cursor.fetchone() + + for obj in contributor: + response = { + "contributor_name": obj[1], + "proposal_faculty": obj[2], + "proposal_reviewer": obj[3], + "proposal_university": obj[4], + } + response_dict.append(response) + return HttpResponse(simplejson.dumps(response), + content_type='application/json') + + +def node(request): + context = {} + response_dict = [] + if request.is_ajax(): + key = request.GET.get('key') + response = render_to_string( + "node-{0}.html".format(key)) + return HttpResponse(simplejson.dumps(response), + content_type='application/json') + + +def bug_form(request): + context = {} + response_dict = [] + if request.is_ajax(): + bug_form = request.GET.get('bug_form') + form = BugForm() + context['form'] = BugForm() + context.update(csrf(request)) + response = render_to_string('bug-form.html', context) + return HttpResponse(simplejson.dumps(response), + content_type='application/json') + + +def bug_form_submit(request): + context = {} + response_dict = [] + if request.is_ajax(): + form = request.GET.get('form') + cat_id = request.GET.get('cat_id') + book_id = request.GET.get('book_id') + chapter_id = request.GET.get('chapter_id') + ex_id = request.GET.get('ex_id') + form = BugForm(deserialize_form(form)) + print(form) + if form.is_valid(): + comment = form.cleaned_data['description'] + error = form.cleaned_data['issue'] + email = form.cleaned_data['email'] + print(comment) + comment_data = TextbookCompanionPreference.objects\ + .db_manager('r').raw(dedent("""\ + SELECT 1 as id, tcp.book as book, tcp.author as author, + tcp.publisher as publisher, tcp.year as year, + tcp.category as category, tce.chapter_id, + tcc.number AS chapter_no, tcc.name AS chapter_name, + tce.number AS example_no, tce.caption AS example_caption + FROM textbook_companion_preference tcp + LEFT JOIN textbook_companion_chapter tcc ON + tcp.id = tcc.preference_id + LEFT JOIN textbook_companion_example + tce ON tce.chapter_id = tcc.id WHERE tce.id = %s"""), + [ex_id]) + book_name = comment_data[0].book + book_author = comment_data[0].author + book_publisher = comment_data[0].publisher + chapter_number = comment_data[0].chapter_no + chapter_name = comment_data[0].chapter_name + example_number = comment_data[0].example_no + example_caption = comment_data[0].example_caption + all_cat = False + category = catg(comment_data[0].category, all_cat) + subcategory = 0 + error_int = int(error) + error = issues[error_int][1] + context = { + 'category': category, + 'subcategory': subcategory, + 'error': error, + 'book': book_name, + 'author': book_author, + 'publisher': book_publisher, + 'chapter_name': chapter_name, + 'chapter_no': chapter_number, + 'example_id': ex_id, + 'example_caption': example_caption, + 'example_no': example_number, + 'comment': comment, + } + scilab_comment = ScilabCloudComment() + scilab_comment.type = error_int + scilab_comment.comment = comment + scilab_comment.email = email + scilab_comment.category = comment_data[0].category + scilab_comment.books = book_id + scilab_comment.chapter = chapter_id + scilab_comment.example = ex_id + scilab_comment.save(using='r') + subject = "New Cloud Comment" + message = render_to_string('email.html', context) + from_email = FROM_EMAIL + to_email = TO_EMAIL + cc_email = CC_EMAIL + bcc_email = BCC_EMAIL + # Send Emails to, cc, bcc + msg = EmailMultiAlternatives( + subject, + message, + from_email, + [to_email], + bcc=[bcc_email], + cc=[cc_email] + ) + msg.content_subtype = "html" + msg.send() + response = "Thank you for your feedback" + return HttpResponse(simplejson.dumps(response), + content_type='application/json') +# submit revision + + +def revision_form(request): + + context = {} + response_dict = [] + if request.is_ajax(): + code = request.GET.get('code') + code = code.decode('UTF-8') + initial_code = request.GET.get('initial_code') + request.session['code'] = code.decode('UTF-8') + + if code == initial_code: + response = "You have not made any changes" + return HttpResponse(simplejson.dumps(response), + content_type='application/json') + + if not request.user.is_anonymous(): + if 'commit_sha' not in request.session: + response = "Please select a revision" + return HttpResponse(simplejson.dumps(response), + content_type='application/json') + + form = RevisionForm() + context = {'form': form} + context.update(csrf(request)) + response = render_to_string( + 'submit-revision.html', context) + return HttpResponse(simplejson.dumps(response), + content_type='application/json') + else: + response = render_to_string( + 'revision-login.html', {}) + return HttpResponse(simplejson.dumps(response), + content_type='application/json') + + +# @dajaxice_register +def revision_error(request): + context = { + 'error_message': 'You have not made any changes', + } + response = render_to_string( + 'submit-revision-error.html', context) + return HttpResponse(simplejson.dumps(response), + content_type='application/json') + + +def revision_form_submit(request): + if request.is_ajax(): + form = request.GET.get('form') + code = request.GET.get('code') + code = code.decode('UTF-8') + + form = RevisionForm(deserialize_form(form)) + + if form.is_valid(): + + commit_message = form.cleaned_data['commit_message'] + username, email = request.user.username, request.user.email + + # push changes to temp repo + # update_file returns True if the push is success. + commit_sha = utils.update_file( + request.session['filepath'], + commit_message, + base64.b64encode(code), + [username, email], + main_repo=False, + ) + + if commit_sha is not None: + # everything is fine + + # save the revision info in database + rev = TextbookCompanionRevision( + example_file_id=request.session['example_file_id'], + commit_sha=commit_sha, + commit_message=commit_message, + committer_name=username, + committer_email=email, + ) + rev.save(using='r') + + response = 'submitted successfully! \nYour changes will be' + 'visible after review.' + return HttpResponse(simplejson.dumps(response), + content_type='application/json') + else: + response = 'Some error occures.' + return HttpResponse(simplejson.dumps(response), + content_type='application/json') + + +def diff(request): + if request.is_ajax(): + diff_commit_sha = request.GET.get('diff_commit_sha') + editor_code = request.GET.get('editor_code') + context = {} + file_path = request.session['filepath'] + file = utils.get_file(file_path, diff_commit_sha, main_repo=True) + code = base64.b64decode(file['content']) + response = { + 'code2': code.decode('UTF-8'), + } + return HttpResponse(simplejson.dumps(response), + content_type='application/json') + +# ------------------------------------------------------------ +# review interface functions + + +def review_revision(request): + if request.is_ajax(): + revision_id = request.GET.get('revision_id') + print(revision_id) + revision = TextbookCompanionRevision.objects.using( + 'r').get(id=revision_id) + file = utils.get_file(revision.example_file.filepath, + revision.commit_sha, main_repo=False) + code = base64.b64decode(file['content']) + + request.session['revision_id'] = revision_id + + example = revision.example_file.example + chapter = example.chapter + book = chapter.preference + category = utils.get_category(book.category) + + response = { + 'code': code.decode('UTF-8'), + 'revision': model_to_dict(revision), + 'example': model_to_dict(example), + 'chapter': model_to_dict(chapter), + 'book': model_to_dict(book), + 'category': category, + 'createdAt': str(revision.timestamp), + } + return HttpResponse(simplejson.dumps(response), + content_type='application/json') + + +def push_revision(request): + """ + code: from code editor on review interface + """ + if request.is_ajax(): + code = request.GET.get('code') + code = code.decode('UTF-8') + revision = TextbookCompanionRevision.objects.using( + 'r').get(id=request.session['revision_id']) + + print('pushing to repo') + utils.update_file( + revision.example_file.filepath, + revision.commit_message, + base64.b64encode(code.decode('UTF-8')), + [revision.committer_name, revision.committer_email], + branch='master', + main_repo=True) + + print('update push_status') + revision.push_status = True + revision.save() + + response = 'pushed successfully!' + + return HttpResponse(simplejson.dumps(response), + content_type='application/json') + + +def remove_revision(request): + """ + remove revision from revision database + """ + TextbookCompanionRevision.objects.using('r').get( + id=request.session['revision_id']).delete() + + response = 'removed successfully!' + return HttpResponse(simplejson.dumps(response), + content_type='application/json') -- cgit From 88cd9bdbc72d208baa7cad42dd6a687055a800b6 Mon Sep 17 00:00:00 2001 From: prashantsinalkar Date: Thu, 12 Sep 2019 17:20:14 +0530 Subject: fixed code and changed modals --- website/ajax.py | 44 +++++++++++++++++--------------------------- 1 file changed, 17 insertions(+), 27 deletions(-) (limited to 'website/ajax.py') diff --git a/website/ajax.py b/website/ajax.py index ecd040a..a18fe86 100755 --- a/website/ajax.py +++ b/website/ajax.py @@ -16,7 +16,7 @@ from django.views.decorators.csrf import csrf_exempt, csrf_protect from textwrap import dedent from R_on_Cloud.config import FROM_EMAIL, TO_EMAIL, CC_EMAIL, BCC_EMAIL from R_on_Cloud.config import UPLOADS_PATH -from website.views import catg +from website.views import catg, dictfetchall from website.models import * from website.forms import BugForm, RevisionForm, issues @@ -115,7 +115,6 @@ def chapters(request): 'chapter': obj[2], } - print(obj.name) response_dict.append(response) return HttpResponse(simplejson.dumps(response_dict), content_type='application/json') @@ -194,21 +193,22 @@ def code(request): if not example_id: example_id = int(request.GET.get('example_id')) file_path = request.session['filepath'] - review = ScilabCloudComment.objects.using('r')\ - .filter(example=example_id).count() + #review = ScilabCloudComment.objects.using('r')\ + # .filter(example=example_id).count() + review = 0 with connections['r'].cursor() as cursor: - cursor.execute(GET_TBC_EXAMPLE_FILE_VIEW_SQL, params=[example_id]) + cursor.execute(GET_TBC_EXAMPLE_VIEW_SQL, params=[example_id]) exmple = cursor.fetchone() review_url = "https://scilab.in/cloud_comments/" + str(example_id) # example_path = UPLOADS_PATH + '/' + file_path file = utils.get_file(file_path, commit_sha, main_repo=True) - code = base64.b64decode(file['content']) + code = file response = { - 'code': code.decode('UTF-8'), + 'code': code, 'review': review, 'review_url': review_url, - 'exmple': exmple[1] + 'exmple': exmple[0] } # response_dict.append(response) return HttpResponse(simplejson.dumps(response), @@ -225,15 +225,13 @@ def contributor(request): with connections['r'].cursor() as cursor: cursor.execute(GET_TBC_CONTRIBUTOR_DETAILS_SQL, params=[book_id]) contributor = cursor.fetchone() - - for obj in contributor: - response = { - "contributor_name": obj[1], - "proposal_faculty": obj[2], - "proposal_reviewer": obj[3], - "proposal_university": obj[4], - } - response_dict.append(response) + response = { + "contributor_name": contributor[1], + "proposal_faculty": contributor[2], + "proposal_reviewer": contributor[3], + "proposal_university": contributor[4], + } + response_dict.append(response) return HttpResponse(simplejson.dumps(response), content_type='application/json') @@ -271,13 +269,10 @@ def bug_form_submit(request): book_id = request.GET.get('book_id') chapter_id = request.GET.get('chapter_id') ex_id = request.GET.get('ex_id') - form = BugForm(deserialize_form(form)) - print(form) if form.is_valid(): comment = form.cleaned_data['description'] error = form.cleaned_data['issue'] email = form.cleaned_data['email'] - print(comment) comment_data = TextbookCompanionPreference.objects\ .db_manager('r').raw(dedent("""\ SELECT 1 as id, tcp.book as book, tcp.author as author, @@ -448,9 +443,9 @@ def diff(request): context = {} file_path = request.session['filepath'] file = utils.get_file(file_path, diff_commit_sha, main_repo=True) - code = base64.b64decode(file['content']) + code = file response = { - 'code2': code.decode('UTF-8'), + 'code2': code, } return HttpResponse(simplejson.dumps(response), content_type='application/json') @@ -462,7 +457,6 @@ def diff(request): def review_revision(request): if request.is_ajax(): revision_id = request.GET.get('revision_id') - print(revision_id) revision = TextbookCompanionRevision.objects.using( 'r').get(id=revision_id) file = utils.get_file(revision.example_file.filepath, @@ -498,8 +492,6 @@ def push_revision(request): code = code.decode('UTF-8') revision = TextbookCompanionRevision.objects.using( 'r').get(id=request.session['revision_id']) - - print('pushing to repo') utils.update_file( revision.example_file.filepath, revision.commit_message, @@ -507,8 +499,6 @@ def push_revision(request): [revision.committer_name, revision.committer_email], branch='master', main_repo=True) - - print('update push_status') revision.push_status = True revision.save() -- cgit From af9bfbb8e3b1f08e0df80402cf69d40ff5baf7b4 Mon Sep 17 00:00:00 2001 From: prashantsinalkar Date: Fri, 13 Sep 2019 16:42:48 +0530 Subject: removed unused code --- website/ajax.py | 2 -- 1 file changed, 2 deletions(-) (limited to 'website/ajax.py') diff --git a/website/ajax.py b/website/ajax.py index a18fe86..90658b6 100755 --- a/website/ajax.py +++ b/website/ajax.py @@ -15,7 +15,6 @@ from django.views.decorators.csrf import csrf_exempt, csrf_protect # from django.db.models import Q from textwrap import dedent from R_on_Cloud.config import FROM_EMAIL, TO_EMAIL, CC_EMAIL, BCC_EMAIL -from R_on_Cloud.config import UPLOADS_PATH from website.views import catg, dictfetchall from website.models import * from website.forms import BugForm, RevisionForm, issues @@ -200,7 +199,6 @@ def code(request): cursor.execute(GET_TBC_EXAMPLE_VIEW_SQL, params=[example_id]) exmple = cursor.fetchone() review_url = "https://scilab.in/cloud_comments/" + str(example_id) - # example_path = UPLOADS_PATH + '/' + file_path file = utils.get_file(file_path, commit_sha, main_repo=True) code = file -- cgit From 070cb90095df4ab5bc7b6e28fd13bb12df29e1f7 Mon Sep 17 00:00:00 2001 From: prashantsinalkar Date: Wed, 2 Oct 2019 20:07:26 +0530 Subject: updated the code and fixed the bugs --- website/ajax.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'website/ajax.py') diff --git a/website/ajax.py b/website/ajax.py index 90658b6..e165aec 100755 --- a/website/ajax.py +++ b/website/ajax.py @@ -192,13 +192,13 @@ def code(request): if not example_id: example_id = int(request.GET.get('example_id')) file_path = request.session['filepath'] - #review = ScilabCloudComment.objects.using('r')\ + #review = R_CloudComment.objects.using('r')\ # .filter(example=example_id).count() review = 0 with connections['r'].cursor() as cursor: cursor.execute(GET_TBC_EXAMPLE_VIEW_SQL, params=[example_id]) exmple = cursor.fetchone() - review_url = "https://scilab.in/cloud_comments/" + str(example_id) + review_url = "https://r.fossee.in/cloud_comments/" + str(example_id) file = utils.get_file(file_path, commit_sha, main_repo=True) code = file @@ -310,15 +310,15 @@ def bug_form_submit(request): 'example_no': example_number, 'comment': comment, } - scilab_comment = ScilabCloudComment() - scilab_comment.type = error_int - scilab_comment.comment = comment - scilab_comment.email = email - scilab_comment.category = comment_data[0].category - scilab_comment.books = book_id - scilab_comment.chapter = chapter_id - scilab_comment.example = ex_id - scilab_comment.save(using='r') + r_comment = R_CloudComment() + r_comment.type = error_int + r_comment.comment = comment + r_comment.email = email + r_comment.category = comment_data[0].category + r_comment.books = book_id + r_comment.chapter = chapter_id + r_comment.example = ex_id + r_comment.save(using='r') subject = "New Cloud Comment" message = render_to_string('email.html', context) from_email = FROM_EMAIL -- cgit