forked from indymedia/epicyon
				
			
		
			
				
	
	
		
			105 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
| __filename__ = "webapp_question.py"
 | |
| __author__ = "Bob Mottram"
 | |
| __license__ = "AGPL3+"
 | |
| __version__ = "1.1.0"
 | |
| __maintainer__ = "Bob Mottram"
 | |
| __email__ = "bob@freedombone.net"
 | |
| __status__ = "Production"
 | |
| 
 | |
| import os
 | |
| from question import isQuestion
 | |
| from utils import removeIdEnding
 | |
| 
 | |
| 
 | |
| def insertQuestion(baseDir: str, translate: {},
 | |
|                    nickname: str, domain: str, port: int,
 | |
|                    content: str,
 | |
|                    postJsonObject: {}, pageNumber: int) -> str:
 | |
|     """ Inserts question selection into a post
 | |
|     """
 | |
|     if not isQuestion(postJsonObject):
 | |
|         return content
 | |
|     if len(postJsonObject['object']['oneOf']) == 0:
 | |
|         return content
 | |
|     messageId = removeIdEnding(postJsonObject['id'])
 | |
|     if '#' in messageId:
 | |
|         messageId = messageId.split('#', 1)[0]
 | |
|     pageNumberStr = ''
 | |
|     if pageNumber:
 | |
|         pageNumberStr = '?page=' + str(pageNumber)
 | |
| 
 | |
|     votesFilename = \
 | |
|         baseDir + '/accounts/' + nickname + '@' + domain + '/questions.txt'
 | |
| 
 | |
|     showQuestionResults = False
 | |
|     if os.path.isfile(votesFilename):
 | |
|         if messageId in open(votesFilename).read():
 | |
|             showQuestionResults = True
 | |
| 
 | |
|     if not showQuestionResults:
 | |
|         # show the question options
 | |
|         content += '<div class="question">'
 | |
|         content += \
 | |
|             '<form method="POST" action="/users/' + \
 | |
|             nickname + '/question' + pageNumberStr + '">\n'
 | |
|         content += \
 | |
|             '<input type="hidden" name="messageId" value="' + \
 | |
|             messageId + '">\n<br>\n'
 | |
|         for choice in postJsonObject['object']['oneOf']:
 | |
|             if not choice.get('type'):
 | |
|                 continue
 | |
|             if not choice.get('name'):
 | |
|                 continue
 | |
|             content += \
 | |
|                 '<input type="radio" name="answer" value="' + \
 | |
|                 choice['name'] + '"> ' + choice['name'] + '<br><br>\n'
 | |
|         content += \
 | |
|             '<input type="submit" value="' + \
 | |
|             translate['Vote'] + '" class="vote"><br><br>\n'
 | |
|         content += '</form>\n</div>\n'
 | |
|     else:
 | |
|         # show the responses to a question
 | |
|         content += '<div class="questionresult">\n'
 | |
| 
 | |
|         # get the maximum number of votes
 | |
|         maxVotes = 1
 | |
|         for questionOption in postJsonObject['object']['oneOf']:
 | |
|             if not questionOption.get('name'):
 | |
|                 continue
 | |
|             if not questionOption.get('replies'):
 | |
|                 continue
 | |
|             votes = 0
 | |
|             try:
 | |
|                 votes = int(questionOption['replies']['totalItems'])
 | |
|             except BaseException:
 | |
|                 pass
 | |
|             if votes > maxVotes:
 | |
|                 maxVotes = int(votes+1)
 | |
| 
 | |
|         # show the votes as sliders
 | |
|         questionCtr = 1
 | |
|         for questionOption in postJsonObject['object']['oneOf']:
 | |
|             if not questionOption.get('name'):
 | |
|                 continue
 | |
|             if not questionOption.get('replies'):
 | |
|                 continue
 | |
|             votes = 0
 | |
|             try:
 | |
|                 votes = int(questionOption['replies']['totalItems'])
 | |
|             except BaseException:
 | |
|                 pass
 | |
|             votesPercent = str(int(votes * 100 / maxVotes))
 | |
|             content += \
 | |
|                 '<p><input type="text" title="' + str(votes) + \
 | |
|                 '" name="skillName' + str(questionCtr) + \
 | |
|                 '" value="' + questionOption['name'] + \
 | |
|                 ' (' + str(votes) + ')" style="width:40%">\n'
 | |
|             content += \
 | |
|                 '<input type="range" min="1" max="100" ' + \
 | |
|                 'class="slider" title="' + \
 | |
|                 str(votes) + '" name="skillValue' + str(questionCtr) + \
 | |
|                 '" value="' + votesPercent + '"></p>\n'
 | |
|             questionCtr += 1
 | |
|         content += '</div>\n'
 | |
|     return content
 |