~pecisk-gmail/wordy/wordy-redux

« back to all changes in this revision

Viewing changes to wordy_user/views.py

  • Committer: Pēteris Krišjānis
  • Date: 2009-12-25 14:43:02 UTC
  • mfrom: (81.1.16 wordy)
  • Revision ID: peteris@peteris-majas-20091225144302-dkpm1bko1htose39
Apvienojums ar Viestura zaru.

Show diffs side-by-side

added added

removed removed

Lines of Context:
11
11
from django.contrib.auth.decorators import login_required
12
12
import django.forms
13
13
from django.conf import settings
14
 
 
 
14
from datetime import datetime
15
15
 
16
16
from tagfilter import *
17
17
from wordy.database.models import *
20
20
from processing import *
21
21
from search import *
22
22
from sendMails import *
 
23
from bulkAdd import *
 
24
from smells import calculateSmells, getSmellInfo, SMELL_TYPES
23
25
 
24
26
 
25
27
import re
56
58
    else :
57
59
        return HttpResponseRedirect(other)
58
60
 
 
61
def redirect_to_other_with_next(request, other):
 
62
    if "next" in request.REQUEST :
 
63
        other = other + "?next=" + request.REQUEST["next"]
 
64
 
 
65
    return HttpResponseRedirect(other)
 
66
 
59
67
# Create your views here.
60
68
 
61
69
def main(request):
62
 
    return render_response(request, 'main.html')
 
70
    userLang = getUserLanguage(request.user)
 
71
    lastComments = Comment.objects.order_by("-modified")[0:10]
 
72
    curtime = datetime.now()
 
73
    for comment in lastComments:
 
74
        comment.conceptDescription = getConceptDescription(comment.concept, userLang)
 
75
        age = curtime - comment.modified
 
76
        if age.days > 1:
 
77
            comment.age = u"pirms " + str(age.days) + u" dienām"
 
78
        elif age.days == 1:
 
79
            comment.age = u"vakar"
 
80
        elif age.seconds > 7200:
 
81
            comment.age = u"pirms " + str(int(age.seconds / 3600)) + u" stundām"
 
82
        elif age.seconds > 3600:
 
83
            comment.age = u"pirms " + str(int(age.seconds / 3600)) + u" stundas"
 
84
        elif age.seconds > 60:
 
85
            comment.age = u"pirms " + str(int(age.seconds / 60)) + u" minūtēm"
 
86
        else:
 
87
            comment.age = u"nupat"
 
88
    return render_response(request, 'main.html', {'comments':lastComments})
63
89
 
64
90
def about(request):
65
 
    return render_response(request, 'about.html')
 
91
    return render_response(request, 'about.html', {})
66
92
 
67
93
def systeminfo(request):
68
94
    nrTag = getOrCreateTag(NEEDSREVIEW_TAG)
102
128
    hint = u"Āvu, āvu baltas"
103
129
    answer = u"kājas"
104
130
    if (request.method == "GET"):
105
 
        languages = Language.objects.all()        
 
131
        languages = Language.objects.all()
106
132
        return render_response(request, 'user_register.html',  {'languages': languages, 'defaultLanguage':findUILanguage() , 'securityHint':hint})
107
133
    else :
108
134
        loginName = request.POST["username"]
191
217
            request.session['message'] = message
192
218
        else:
193
219
            request.session['message'] = "No action specified"
194
 
 
195
220
        return HttpResponseRedirect(reverse('userPage', args=()))
196
221
 
197
222
def search(request, offset):
308
333
        conceptList = Concept.objects.filter(bindings__word__in = wordList).all()
309
334
        concept = joinConcepts(conceptList)
310
335
        setSubscribedConcept(request.user, concept, True )
311
 
        return HttpResponseRedirect(reverse('conceptDetails', args=[concept.id]))
 
336
        return redirect_to_other_with_next(request, reverse('conceptReview', args=[concept.id]))
312
337
    else:
313
338
        for word in wordList:
314
339
            if action == 'delete' :
381
406
 
382
407
 
383
408
def conceptDetails(request, concept_id):
 
409
    return conceptDetailsComment(request, concept_id, "")
 
410
 
 
411
def conceptDetailsComment(request, concept_id, comment_id):
384
412
    concept = get_object_or_404(Concept, pk=concept_id)
385
413
    conceptData = makeConceptListDetails([concept], request.user)[0]
386
414
    grammarTypes = WordGrammarType.objects.order_by('sequence')
387
 
 
388
415
    languages = Language.objects.all()
389
416
    projects = Entity.objects.all()
390
417
    return render_response(request, 'concept_detail.html', {
391
418
        'conceptData': conceptData,
392
419
        'languages':languages,
393
420
        'projectList': projects,
394
 
        'grammarTypes': grammarTypes})
 
421
        'grammarTypes': grammarTypes,
 
422
        'hilightComment':comment_id})
395
423
 
396
424
@login_required
397
425
def conceptTagAdd(request):
502
530
        setSubscribedConcept(request.user, concept, True )
503
531
        if (newConcept != None):
504
532
           setSubscribedConcept(request.user, newConcept, True )
 
533
           sendOutNewConceptEmails(newConcept, request)
505
534
 
506
535
        if action=='save' :
507
536
            if not 'reviewed' in request.POST :
549
578
        grammarTypes = WordGrammarType.objects.order_by('sequence')
550
579
        projects = Entity.objects.all()
551
580
        return render_response(request, 'concept_bulkAdd.html', {
 
581
            'text': "",
 
582
            'tags': "",
 
583
            'project': -1,
552
584
            'languages':languages,
553
585
            'sourceLanguage':foreignLang,
554
586
            'targetLanguage':nativeLang,
555
587
            'grammarTypes': grammarTypes,
556
588
            'projectList': projects})
557
589
 
 
590
    #prepare basic data
558
591
    action = request.POST['action']
559
 
 
560
 
    if action == 'save':
 
592
    text = request.REQUEST["text"]
 
593
    tags = request.REQUEST["tags"]
 
594
    sourceLanguageId = int(request.REQUEST["sourceLanguage"])
 
595
    targetLanguageId = int(request.REQUEST["targetLanguage"])
 
596
    projectId = int(request.REQUEST["project"])
 
597
    sourceLanguage = getOrNoneLanguage(sourceLanguageId)
 
598
    targetLanguage = getOrNoneLanguage(targetLanguageId)
 
599
    project = getOrNoneProject(projectId)
 
600
    tagList,badTags = getTagList(tags, request.user.is_staff)
 
601
    results = None
 
602
    error = None
 
603
    isAnalysis = False
 
604
    hasErrors = False
 
605
 
 
606
    if sourceLanguage == None:
 
607
        error = u"No avota valodas"
 
608
    elif targetLanguage == None:
 
609
        error = u"No mērķa valodas"
 
610
    elif badTags != None:
 
611
        error = u"Pievienoti neesoši tagi un nav tiesības veidot jaunus tagus: " + str(badTags)
 
612
    elif action == 'analyze':
 
613
        results = bulkAnalyze(sourceLanguage, targetLanguage, text)
 
614
        isAnalysis = True
 
615
    elif action == 'save':
 
616
        # parse results
 
617
        texts = []
 
618
        concepts = []
 
619
 
 
620
        for attr in request.POST.keys() :
 
621
            match = re.match(r'^row(?P<row_id>\d+)_text$', attr)
 
622
            if match:
 
623
                rowId = int(match.group('row_id'))
 
624
                rowText = request.POST["row"+str(rowId)+"_text"]
 
625
                concept = None
 
626
                if "row"+str(rowId)+"_action" in request.POST:
 
627
                    action = request.POST["row"+str(rowId)+"_action"]
 
628
                    if action != "new":
 
629
                        concept = Concept.objects.get(pk = int(action))
 
630
                    else :
 
631
                        concept = "new"
 
632
                texts.append(rowText)
 
633
                concepts.append(concept)
 
634
 
561
635
        #save concepts
562
 
        #TODO:
563
 
        a = 1
564
 
 
565
 
    else:
566
 
        return HttpResponseRedirect(reverse('main', args=[]))
 
636
        results = bulkAdd(sourceLanguage, targetLanguage, tagList, texts, concepts, project, request.user)
 
637
 
 
638
    if results:
 
639
        for result in results:
 
640
            if result.isError:
 
641
                hasErrors = True;
 
642
 
 
643
    languages = Language.objects.all()
 
644
    nativeLang = getUserLanguage(request.user)
 
645
    foreignLang = getUserForeignLanguage(request.user)
 
646
    grammarTypes = WordGrammarType.objects.order_by('sequence')
 
647
    projects = Entity.objects.all()
 
648
    return render_response(request, 'concept_bulkAdd.html', {
 
649
        'text': text,
 
650
        'tags': tags,
 
651
        'project':project,
 
652
        'error': error,
 
653
        'isAnalysis': isAnalysis,
 
654
        'hasErrors': hasErrors,
 
655
        'results': results,
 
656
        'languages':languages,
 
657
        'sourceLanguage':sourceLanguage,
 
658
        'targetLanguage':targetLanguage,
 
659
        'grammarTypes': grammarTypes,
 
660
        'projectList': projects})
567
661
 
568
662
 
569
663
@login_required
588
682
 
589
683
    if action == 'save':
590
684
        #save concept
591
 
        concept = Concept()
592
 
        concept.comment = request.POST['title']
593
 
        grammarTypeId = int(request.POST['grammarType'])
594
 
        concept.grammar_type = getOrNoneGrammarType(grammarTypeId)
595
 
        concept.save()
596
 
 
597
 
        desc = ConceptDescription()
598
 
        desc.concept = concept
599
 
        desc.title = request.POST['title']
600
 
        desc.description = request.POST['description']
601
 
        desc.language = getUserLanguage(request.user)
602
 
        desc.save()
603
 
 
 
685
        title = request.POST['title']
 
686
        description = request.POST['description']
 
687
        grammarType = getOrNoneGrammarType(int(request.POST['grammarType']))
604
688
        projectId = int(request.POST['sourceProject'])
605
689
        project = getOrNoneProject(projectId)
606
690
 
607
 
        #set needsreview
608
 
        if not request.user.is_staff:
609
 
            desc.tags.add(getOrCreateTag(NEEDSREVIEW_TAG))
 
691
        words = []
610
692
 
611
693
        #Save translations
612
 
 
613
694
        for wordAttr in request.POST.keys() :
614
695
            match = re.match(r'^word_(?P<word_no>\d+)_word$', wordAttr)
615
696
            if match == None :
617
698
            wordNo = int(match.group('word_no'))
618
699
            langAttr = 'word_' + str(wordNo) + '_language'
619
700
 
620
 
            wordText = request.POST[wordAttr]
621
 
 
 
701
            wordText = request.POST[wordAttr].strip()
622
702
            if len(wordText) == 0:
623
703
                continue
624
 
 
625
704
            wordLang = getOrNoneLanguage(int(request.POST[langAttr]))
626
 
 
627
 
            if (len(wordText) > 0) and (wordLang):
628
 
                word = getOrCreateWord(wordLang, wordText)
629
 
                binding = Binding()
630
 
                binding.concept = concept
631
 
                binding.word = word
632
 
                binding.save()
633
 
 
634
 
                if (project != None):
635
 
                    binding.entities.add(project)
636
 
                    binding.save()
637
 
 
638
 
        setSubscribedConcept(request.user, concept, True )
 
705
            words.append(getOrCreateWord(wordLang, wordText))
 
706
 
 
707
        concept = addConcept(words, grammarType, None, title, description, project, request.user)
 
708
        sendOutNewConceptEmails(concept, request)
 
709
 
639
710
        return HttpResponseRedirect(reverse('conceptDetails', args=[concept.id]))
640
711
    else:
641
712
        return HttpResponseRedirect(reverse('main', args=[]))
666
737
    if action == 'join':
667
738
        concept = joinConcepts(conceptList)
668
739
        setSubscribedConcept(request.user, concept, True )
 
740
        #redirect to concept editing
 
741
        return redirect_to_other_with_next(request, reverse('conceptReview', args=[concept.id]))
669
742
    else:
670
743
        for concept in conceptList:
671
744
            if action  == 'delete' :
699
772
        binding = Binding()
700
773
        binding.concept = conceptObj
701
774
        binding.word = wordObj
 
775
        binding.creator = request.user
702
776
        binding.save()
703
777
 
704
778
        setSubscribedConcept(request.user, conceptObj, True )
715
789
 
716
790
    if request.method== "GET":       #render the usages part to show
717
791
        projects = Entity.objects.all()
718
 
        prepareBindingUsages([bindingObj])
 
792
        prepareBindingUsages([bindingObj], request.user)
719
793
        return render_response(request, 'binding_usages_inc.html', {'showEdit':True, 'binding':bindingObj, 'projectList':projects})
720
794
    elif request.method== "POST":         #save results and show new state
721
795
        #collect projects
730
804
        bindingObj.entities = projectList
731
805
        bindingObj.save()
732
806
 
733
 
        prepareBindingUsages([bindingObj])
 
807
        prepareBindingUsages([bindingObj], request.user)
734
808
 
735
809
        if "ajax" in request.REQUEST:
736
810
            return render_response(request, 'binding_usages_inc.html', {'newResult':True, 'binding':bindingObj})
737
811
        else:
738
812
            return redirect_to_next(request)
739
813
 
 
814
@login_required
 
815
def bindingToggleStar(request):
 
816
    binding_id = int(request.REQUEST['objectId'])
 
817
    bindingObj = get_object_or_404(Binding, pk=binding_id)
 
818
 
 
819
    if request.method== "GET":       #render the star part to show
 
820
        return render_response(request, 'binding_star_inc.html', {'binding':bindingObj})
 
821
    elif request.method== "POST":         #save results and show new state
 
822
        isOn = request.REQUEST['on']
 
823
        setStarred(request.user, bindingObj, isOn == '1')
 
824
 
 
825
        if "ajax" in request.REQUEST:
 
826
            bindingObj.starred = bindingObj.favorite_users.filter(user = request.user).count() > 0
 
827
 
 
828
            return render_response(request, 'binding_star_inc.html', {'newResult':True,'binding':bindingObj})
 
829
        else:
 
830
            return redirect_to_next(request)
 
831
 
740
832
def addBindingSearch(request):
741
833
    query = request.REQUEST['q']
742
834
    words = Word.objects.filter(word__contains=query)
847
939
    setSubscribedConcept(request.user, concept, True )
848
940
    if (newConcept != None):
849
941
        setSubscribedConcept(request.user, newConcept, True )
 
942
        sendOutNewConceptEmails(newConcept, request)
850
943
 
851
944
    if action =='cancel':
852
945
        return redirect_to_next_or_other(request, reverse('conceptDetails', args=[concept_id]))
871
964
 
872
965
 
873
966
def tagList(request):
874
 
    list = Tag.objects.all()
 
967
    #hack - using native SQL - upper(name)
 
968
    list = Tag.objects.exclude(name__istartswith="user:").extra(select={'name_upper': 'upper(name)'},order_by=['name_upper'])
875
969
    return render_response(request, 'tagListBase.html', {'list': list})
876
970
 
877
971
@login_required
983
1077
    f.save(request)
984
1078
    return redirect_to_next(request)
985
1079
 
 
1080
 
 
1081
def smells(request):
 
1082
 
 
1083
    if request.method == "GET":
 
1084
        smellTypes = getSmellInfo()
 
1085
        return render_response(request, 'smells.html', {'smellTypes':smellTypes})
 
1086
    else:
 
1087
        action = request.REQUEST["action"]
 
1088
        if action=="regenerate":
 
1089
            calculateSmells()
 
1090
        return HttpResponseRedirect(reverse('smells', args=()))
 
1091
 
 
1092
def smellList(request, smell_code, offset):
 
1093
    smells = ConceptSmell.objects.filter(code = smell_code).order_by("-score")
 
1094
    smellTypes = getSmellInfo()
 
1095
 
 
1096
    page = ListPage(smells, int(offset))
 
1097
    return render_response(request, 'smellList.html', {'smellTypes':smellTypes,'list':page, 'code':smell_code,'description':SMELL_TYPES[smell_code]})
 
1098
 
 
1099
def smellDetails(request, smell_id):
 
1100
    #TODO
 
1101
    return None