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')
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)
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']))
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']))
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)
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'