def _removeKeywordMatched(self, request): orgId = request.getSession(IAuthInfo).organization (itemId, item) = yield utils.getValidItemId(request, 'id', columns=['tags']) yield deleteItem(request, itemId, orgId, item) # Update the UI request.write("$$.convs.remove('%s');" % itemId)
def _submitReport(self, request, action): (appchange, script, args, myId) = yield self._getBasicArgs(request) landing = not self._ajax snippet, comment = utils.getTextWithSnippet(request, "comment", constants.COMMENT_PREVIEW_LENGTH) orgId = args['orgId'] isNewReport = False timeUUID = uuid.uuid1().bytes convId, conv = yield utils.getValidItemId(request, "id") convMeta = conv["meta"] convOwnerId = convMeta["owner"] convType = convMeta["type"] convACL = convMeta["acl"] toFetchEntities = set([myId, convOwnerId]) if "reportId" in convMeta: reportId = convMeta["reportId"] isNewReport = False toFetchEntities.add(convMeta['reportedBy']) else: isNewReport = True reportId = utils.getUniqueKey() if isNewReport and convOwnerId == myId: raise errors.InvalidRequest(_("You cannot report your own Item. \ Delete the item instead")) toFetchEntities.remove(myId) entities = base.EntitySet(toFetchEntities) yield entities.fetchData() entities.update({myId: args["me"]}) if myId == convOwnerId: if action not in ["accept", "repost"]: raise errors.InvalidRequest(_('Invalid action was performed on the report')) convReport = {"reportStatus": action} yield db.batch_insert(convId, "items", {"meta": convReport}) if action == "accept": # Owner removed the comment. Delete the item from his feed yield Item.deleteItem(convId, myId, orgId) request.write("$$.fetchUri('/feed/');") request.write("$$.alerts.info('%s')" % _("Your item has been deleted")) request.finish() else: # Owner posted a reply, so notify reporter of the same yield Item._notify("RFC", convId, timeUUID, convType=convType, convOwnerId=convOwnerId, myId=myId, entities=entities, me=args["me"], reportedBy=convMeta["reportedBy"]) else: if action not in ["report", "repost", "reject"]: raise errors.InvalidRequest(_('Invalid action was performed on the report')) if isNewReport: # Update Existing Item Information with Report Meta newACL = pickle.dumps({"accept": {"users": [convOwnerId, myId]}}) convReport = {"reportedBy": myId, "reportId": reportId, "reportStatus": "pending", "state": "flagged"} convMeta.update(convReport) yield db.batch_insert(convId, "items", {"meta": convReport}) reportLink = """·<a class="button-link" title="View Report" href="/item/report?id=%s"> View Report</a>""" % convId request.write("""$("#item-footer-%s").append('%s');""" % (convId, reportLink)) yield Item._notify("FC", convId, timeUUID, convType=convType, entities=entities, convOwnerId=convOwnerId, myId=myId, me=args["me"]) else: if action == "repost": # Remove the reportId key, so owner cannot post any comment yield db.batch_remove({'items': [convId]}, names=["reportId", "reportStatus", "reportedBy", "state"], supercolumn='meta') oldReportMeta = {"reportedBy": convMeta["reportedBy"], "reportId": reportId} # Save the now resolved report in items and remove its # reference in the item meta so new reporters wont't see # old reports timestamp = str(int(time.time())) yield db.insert(convId, "items", reportId, timestamp, "reports") yield db.batch_insert(reportId, "items", {"meta": oldReportMeta}) # Notify the owner that the report has been withdrawn yield Item._notify("UFC", convId, timeUUID, convType=convType, convOwnerId=convOwnerId, myId=myId, entities=entities, me=args["me"]) elif action in ["reject", "report"]: # Reporter rejects the comment by the owner or reports the # same item again. convReport = {"reportStatus": "pending"} yield Item._notify("RFC", convId, timeUUID, convType=convType, convOwnerId=convOwnerId, myId=myId, entities=entities, me=args["me"], reportedBy=convMeta["reportedBy"]) yield db.batch_insert(convId, "items", {"meta": convReport}) args.update({"entities": entities, "ownerId": convOwnerId, "convId": convId}) # Update New Report comment Details commentId = utils.getUniqueKey() timeUUID = uuid.uuid1().bytes meta = {"owner": myId, "parent": reportId, "comment": comment, "timestamp": str(int(time.time())), "uuid": timeUUID, "richText": str(False)} if snippet: meta['snippet'] = snippet yield db.batch_insert(commentId, "items", {'meta': meta}) # Update list of comments for this report yield db.insert(reportId, "itemResponses", "%s:%s:%s" % (myId, commentId, action), timeUUID) yield self._renderReportResponses(request, convId, convMeta, args) request.write("$('#report-comment').attr('value', '')")