Пример #1
0
    def post(self):
        user = self.current_user
        resultJSON = json.dumps({'result': False, 'error': 'Not authorized'})
        if user:
            if not self.request.get('title'):                
                resultJSON = json.dumps({'result': False, 'error': 'Your point must have a title'})
            else:
                sourcesURLs=json.loads(self.request.get('sourcesURLs')) if self.request.get('sourcesURLs') else None
                sourcesNames=json.loads(self.request.get('sourcesNames')) if self.request.get('sourcesNames') else None
                newPoint, newPointRoot = Point.create(
                    title=self.request.get('title'),
                    nodetype=self.request.get('nodetype'),                 
                    content=self.request.get('content'),
                    summaryText=self.request.get('plainText'),
                    user=user,
                    imageURL=self.request.get('imageURL'),
                    imageAuthor=self.request.get('imageAuthor'),
                    imageDescription=self.request.get('imageDescription'),
                    sourceURLs=sourcesURLs,
                    sourceNames=sourcesNames)
                if newPoint:
                    resultJSON = json.dumps({'result': True, 
                                     'pointURL': newPoint.url,
                                     'rootKey': newPointRoot.key.urlsafe()})
                else:
                    resultJSON = json.dumps({'result': False, 'error': 'Failed to create point.'})
        else:
            resultJSON = json.dumps({'result': False, 'error': 'You appear not to be logged in.'})

        self.response.headers.add_header('content-type', 'application/json', charset='utf-8')
        self.response.out.write(resultJSON)
    def post(self):
        jsonOutput = {'result': False}
        oldPoint, oldPointRoot = Point.getCurrentByUrl(
            self.request.get('pointUrl'))
        user = self.current_user
        linkType = self.request.get('linkType')
        nodeType = self.request.get('nodeType') if \
            self.request.get('nodeType') else 'Point'

        sourcesURLs=json.loads(self.request.get('sourcesURLs'))
        sourcesNames=json.loads(self.request.get('sourcesNames'))
        if user:
            newLinkPoint, newLinkPointRoot = Point.create(
                title=self.request.get('title'),
                nodetype=nodeType,
                content=self.request.get('content'),
                summaryText=self.request.get('plainText'),
                user=user,
                backlink=oldPoint.key.parent(),
                linktype = linkType,
                imageURL=self.request.get('imageURL'),
                imageAuthor=self.request.get('imageAuthor'),
                imageDescription=self.request.get('imageDescription'),
                sourceURLs=sourcesURLs,
                sourceNames=sourcesNames)
            try:
                logging.info('Adding newLink: ' + linkType)
                newLinks = [{'pointRoot':newLinkPointRoot,
                            'pointCurrentVersion':newLinkPoint,
                            'linkType':linkType},
                            ]
                newPoint = oldPoint.update(
                    pointsToLink=newLinks,                 
                    user=user
                )
            except WhysaurusException as e:
                jsonOutput = {
                    'result': False,
                    'err': str(e)
                }
            else:
                path = os.path.join(constants.ROOT, 'templates/pointBox.html')
                newLinkPointHTML = json.dumps(template.render(path, {'point': newLinkPoint}))
                jsonOutput = {
                    'result': True,
                    'version': newPoint.version,
                    'author': newPoint.authorName,
                    'dateEdited': newPoint.dateEdited.strftime("%Y-%m-%d %H: %M: %S %p"),
                    'numLinkPoints': newPoint.linkCount(linkType),
                    'newLinkPoint':newLinkPointHTML
                }
            resultJSON = json.dumps(jsonOutput)
            self.response.headers.add_header('content-type', 'application/json', charset='utf-8')
            self.response.out.write(resultJSON)
        else:
            self.response.out.write('Need to be logged in')
Пример #3
0
    def mutate(self, info, point_data):
        newPoint, newPointRoot = PointModel.create(
            title=point_data.title,
            content=point_data.content,
            summaryText=point_data.summaryText,
            user=info.context.current_user,
            imageURL=point_data.imageURL,
            imageAuthor=point_data.imageAuthor,
            imageDescription=point_data.imageDescription)

        return NewPoint(point=newPoint)
Пример #4
0
 def doPostLoginAction(self, postLoginAction, sessionData):
     if postLoginAction == "createFromMain":
         user = self.current_user
         pointText = str(sessionData['pointtext'])
         if user:
             newPoint, newPointRoot = Point.create(title=pointText,
                                                   content="",
                                                   summaryText="",
                                                   user=user,
                                                   imageURL=None,
                                                   imageAuthor=None,
                                                   imageDescription=None,
                                                   sourceURLs=[],
                                                   sourceNames=[])
             if newPoint:
                 template_values = {
                     'user':
                     user,
                     'currentArea':
                     self.session.get('currentArea'),
                     'currentAreaDisplayName':
                     self.session.get('currentAreaDisplayName'),
                     'pointURL':
                     newPoint.url
                 }
                 html = self.template_render('waitingPage.html',
                                             template_values)
                 self.session['postloginaction'] = None
                 self.session['pointText'] = None
                 self.response.out.write(html)
                 ReportEvent.queueEventRecord(user.key.urlsafe(),
                                              newPoint.key.urlsafe(), None,
                                              "Create Point")
             else:
                 logging.error("Was not able to create point with title: " +
                               pointText)
                 self.redirect(str(sessionData['original_url']))
         else:
             logging.error(
                 "User was not available, and so could not create point with title: "
                 + pointText)
             self.redirect(str(sessionData['original_url']))
     else:
         logging.info("Unknown Post Login action " + postLoginAction)
         self.redirect(str(sessionData['original_url']))
Пример #5
0
 def doPostLoginAction(self, postLoginAction, sessionData ):
     if postLoginAction == "createFromMain":
         user = self.current_user
         pointText = str(sessionData['pointtext'])
         if user:
             newPoint, newPointRoot = Point.create(
                 title=pointText,
                 content="",
                 summaryText="",
                 user=user,
                 imageURL=None,
                 imageAuthor=None,
                 imageDescription=None,
                 sourceURLs=[],
                 sourceNames=[])
             if newPoint:    
                 template_values = {
                     'user': user, 
                     'currentArea':self.session.get('currentArea'),
                     'currentAreaDisplayName':self.session.get('currentAreaDisplayName'),
                     'pointURL':newPoint.url
                 }
                 html = self.template_render('waitingPage.html', template_values)
                 self.session['postloginaction'] = None
                 self.session['pointText'] = None                    
                 self.response.out.write(html)
                 ReportEvent.queueEventRecord(user.key.urlsafe(), newPoint.key.urlsafe(), None, "Create Point")    
             else:
                logging.error("Was not able to create point with title: " + pointText)    
                self.redirect(str(sessionData['original_url']))
         else:
             logging.error("User was not available, and so could not create point with title: " + pointText)    
             self.redirect(str(sessionData['original_url']))
     else:
         logging.info("Unknown Post Login action " + postLoginAction)    
         self.redirect(str(sessionData['original_url']))
Пример #6
0
    def newPoint(self):        
        user = self.current_user
        resultJSON = json.dumps({'result': False, 'error': 'Not authorized'})
        secretKey = self.request.get('secret')
        
        if not user:            
            if (secretKey == 'myballotsecret'):
                self.loginBySecretKey(secretKey)
                user = self.current_user
                if user:
                    self.response.headers['Access-Control-Allow-Origin'] = '*'

        if user:            
            if not self.request.get('title'):                
                resultJSON = json.dumps({'result': False, 'error': 'Your point must have a title'})
            else:
                sourcesURLs=json.loads(self.request.get('sourcesURLs')) if self.request.get('sourcesURLs') else None
                sourcesNames=json.loads(self.request.get('sourcesNames')) if self.request.get('sourcesNames') else None
                newPoint, newPointRoot = Point.create(
                    title=self.request.get('title'),
                    content=self.request.get('content'),
                    summaryText=self.request.get('plainText'),
                    user=user,
                    imageURL=self.request.get('imageURL'),
                    imageAuthor=self.request.get('imageAuthor'),
                    imageDescription=self.request.get('imageDescription'),
                    sourceURLs=sourcesURLs,
                    sourceNames=sourcesNames)
                       
                if newPoint:                    
                    recentlyViewed, sources = yield user.getRecentlyViewed_async( \
                                excludeList=[newPoint.key.parent()] + \
                                newPoint.getLinkedPointsRootKeys("supporting") + \
                                newPoint.getLinkedPointsRootKeys("counter")), \
                            newPoint.getSources_async()
                            
                    templateValues = {
                        'point': newPoint,
                        'pointRoot': newPointRoot,
                        'recentlyViewedPoints': recentlyViewed,
                        'supportingPoints': None,
                        'counterPoints': None,
                        'supportedPoints':newPointRoot.getBacklinkPoints("supporting"),
                        'counteredPoints':newPointRoot.getBacklinkPoints("counter"),
                        'sources': sources,
                        'user': user,
                        'voteValue': 0,
                        'ribbonValue': False,
                        'currentArea':self.session.get('currentArea'),
                        'currentAreaDisplayName':self.session.get('currentAreaDisplayName')
                    }
                    html = self.template_render('pointContent.html', templateValues)

                    templateValues = {
                        'user': self.current_user,                
                        'pointRoot': newPointRoot,
                        'comments': None
                    }        
                    commentHTML = self.template_render('pointComments.html', templateValues)
                    resultJSON = json.dumps({'result': True, 
                                     'pointURL': newPoint.url,
                                     'title':newPoint.title,
                                     'html': html,
                                     'commentHTML': commentHTML,
                                     'rootKey': newPointRoot.key.urlsafe()
                                 })
                    ReportEvent.queueEventRecord(user.key.urlsafe(), newPoint.key.urlsafe(), None, "Create Point") 
                else:
                    resultJSON = json.dumps({'result': False, 'error': 'Failed to create point.'})
        else:
            resultJSON = json.dumps({'result': False, 'error': 'You appear not to be logged in.'})

        self.response.headers["Pragma"]="no-cache"
        self.response.headers["Cache-Control"]="no-cache, no-store, must-revalidate, pre-check=0, post-check=0"
        self.response.headers["Expires"]="Thu, 01 Dec 1994 16:00:00"  
        self.response.headers["Content-Type"] = 'application/json; charset=utf-8'
        self.response.out.write(resultJSON)
Пример #7
0
class Point_Controller:
	def __init__(self, db):
		self.db = db
		self.point_hook = Point(db)
		self.pv_hook = PV(db)

	# Utility
	def get_current_pv_id(self):
		cookie_data = request.get_cookie('spvm', dict(), secret='secret')

		if not isinstance(cookie_data, dict) and cookie_is_encoded(cookie_data):
			cookie_data = cookie_decode(cookie_data, 'key')

		if 'pv_id' not in cookie_data or cookie_data['pv_id'] is None:
			redirect('/')

		return cookie_data['pv_id']

	### New
	def get_new_point(self):
		points = self.point_hook.retrieve(where={'pv_id':pv_id, 'parent_id':''}, order="rank ASC", recursion=3)

		return template('point/new', title="New point", pv_id=self.get_current_pv_id(), points=points, errors=dict())
	get_new_point.route = '/point/new'
	get_new_point.method = 'GET'

	def ajax_get_new_point(self):
		points = self.point_hook.retrieve(where={'pv_id':self.get_current_pv_id(), 'parent_id':''}, order="rank ASC", recursion=3)

		return template('point/new', ajax=True, title="New point", pv_id=self.get_current_pv_id(), points=points, errors=dict())
	ajax_get_new_point.route = '/point/ajax/new'
	ajax_get_new_point.method = 'GET'

	def post_new_point(self):
		fields = dict()
		fields['pv_id'] = request.forms.pv_id
		fields['title'] = request.forms.title
		fields['description'] = request.forms.description
		fields['rank'] = request.forms.rank
		fields['parent_id'] = request.forms.parent_id

		validation_result = self.point_hook.create(fields)

		if isinstance(validation_result, dict):
			points = self.point_hook.retrieve(where={'pv_id':fields['pv_id']})

			return template('point/new', pv_id=fields['pv_id'], points=points, errors=validation_result)
		else:
			redirect('/pv/'+fields['pv_id'])
	post_new_point.route = '/point/new'
	post_new_point.method = 'POST'

	def ajax_post_new_point(self):
		fields = dict()
		fields['pv_id'] = request.forms.pv_id
		fields['title'] = request.forms.title
		fields['description'] = request.forms.description
		fields['rank'] = request.forms.rank
		fields['parent_id'] = request.forms.parent_id

		validation_result = self.point_hook.create(fields)

		if isinstance(validation_result, dict):
			return validation_result
		else:
			record = self.point_hook.retrieve_one(where={'id':validation_result})

			return {'id': validation_result, 'parent_id': record['parent_id'], 'number': self.point_hook.get_numbering(int(validation_result))}
	ajax_post_new_point.route = '/point/ajax/new'
	ajax_post_new_point.method = 'POST'

	### Edit
	def get_edit_point(self, point_id=None):
		data = self.point_hook.retrieve_one(where={'id':point_id})

		points = self.point_hook.retrieve(where={'pv_id':data['pv_id']})

		return template('point/edit', title="Edit point", data=data, points=points, errors=dict())
	get_edit_point.route = '/point/edit/<point_id>'
	get_edit_point.method = 'GET'

	def ajax_get_edit_point(self):
		data = self.point_hook.retrieve_one(where={'id':request.query.point_id})

		points = self.point_hook.retrieve(where={'pv_id':data['pv_id']})

		return template('point/edit', ajax=True, title="Edit point", data=data, points=points, errors=dict())
	ajax_get_edit_point.route = '/point/ajax/edit'
	ajax_get_edit_point.method = 'GET'

	def post_edit_point(self):
		fields = dict()
		fields['id'] = request.forms.point_id
		fields['pv_id'] = request.forms.pv_id
		fields['title'] = request.forms.title
		fields['description'] = request.forms.description
		fields['rank'] = request.forms.rank
		fields['parent_id'] = request.forms.parent_id

		validation_result = self.point_hook.update(fields, {'id': fields['id']})

		if isinstance(validation_result, dict):
			data = self.point_hook.retrieve_one(where={'id':fields['id']})

			points = self.point_hook.retrieve(where={'pv_id':fields['pv_id']})

			return template('point/edit', data=data, points=points, errors=validation_result)
		else:
			redirect('/pv/'+fields['pv_id'])
	post_edit_point.route = '/point/edit'
	post_edit_point.method = 'POST'

	def ajax_post_edit_point(self):
		fields = dict()
		fields['id'] = request.forms.point_id
		fields['pv_id'] = request.forms.pv_id
		fields['title'] = request.forms.title
		fields['description'] = request.forms.description
		fields['rank'] = request.forms.rank
		fields['parent_id'] = request.forms.parent_id

		validation_result = self.point_hook.update(fields, {'id': fields['id']})

		if isinstance(validation_result, dict):
			return validation_result
		else:
			return {'id': validation_result, 'number': self.point_hook.get_numbering(int(validation_result))}
	ajax_post_edit_point.route = '/point/ajax/edit'
	ajax_post_edit_point.method = 'POST'

	### Delete
	def get_delete_point(self, point_id=None):
		if point_id is None:
			redirect('/')
		else:
			return template('point/delete', title="Delete point", point_id=point_id)
	get_delete_point.route = '/point/delete/<point_id>'
	get_delete_point.method = 'GET'

	def ajax_get_delete_point(self):
		point_id = request.query.point_id
		return template('point/delete', ajax=True, title="Delete point", point_id=point_id)
	ajax_get_delete_point.route = '/point/ajax/delete'
	ajax_get_delete_point.method = 'GET'

	def post_delete_point(self):
		point_id = request.forms.point_id

		pv_id = self.point_hook.retrieve_one(where={'id':point_id})['pv_id']

		if 'yes' not in request.forms or 'no' in request.forms or point_id is None:
			redirect('/pv/' + str(pv_id))
		else:
			if self.point_hook.delete({'id':point_id}):
				redirect('/pv/' + str(pv_id))
			else:
				print('Error. Do something.') # TODO
	post_delete_point.route = '/point/delete'
	post_delete_point.method = 'POST'

	def ajax_post_delete_point(self):
		point_id = request.forms.point_id
		if point_id is None:
			redirect('/')
		else:
			if self.point_hook.delete({'id':point_id}):
				redirect('/')
			else:
				print('Error. Do something.') # TODO
	ajax_post_delete_point.route = '/point/ajax/delete'
	ajax_post_delete_point.method = 'POST'