def post(self): v_o_id=self.request.get('v_o_id') v_t_id=self.request.get('v_t_id') title = permission(v_o_id) p = permission(v_t_id) if title == False or p == False: return version_one = self.request.get('v_o') version_two = self.request.get('v_t') r_one = models.ScriptData.get_version(v_o_id, version_one) r_two = models.ScriptData.get_version(v_t_id, version_two) v = ['s','a','c','d','p','t'] def to_html(raw_data): j = simplejson.loads(raw_data) s = StringIO.StringIO() for text, line_format in j: text = cgi.escape(text, quote=True) s.write("<p class='"+v[line_format]+"'>"+text+"</p>") return s.getvalue() s_one = to_html(r_one.data) s_two = to_html(r_two.data) content = htmldiff(s_one, s_two) self.response.headers['Content-Type']='text/html' self.response.out.write(content)
def permission(self, member, create=False): """Return :class:`permission <Permission>` for user or group set for this folder. :param member: user or group :param create: create new permission for this folder """ return _utils.permission(self, member, create)
def get(self): resource_id = self.request.get('resource_id') if not resource_id or resource_id == "Demo": return export_format = self.request.get('export_format') title_page = self.request.get('title_page') p = permission(resource_id) if p == False: return title = p latest = models.ScriptData.get_latest_version(resource_id) if not latest: return data = simplejson.loads(latest.data) title_page_obj = None if str(title_page) == '1': title_page_obj = models.TitlePageData.get_or_create(resource_id, title) ascii_title = unicodedata.normalize("NFKD", title).encode("ascii", "ignore") if export_format =='txt': newfile = export.Text(data, title_page_obj) filename = 'filename=' + ascii_title + '.txt' self.response.headers['Content-Type'] = 'text/plain' elif export_format == 'pdf': newfile = export.Pdf(data, title_page_obj) filename = 'filename=' + ascii_title + '.pdf' self.response.headers['Content-Type'] = 'application/pdf' J = simplejson.loads(latest.export) arr = [export_format, str(datetime.datetime.today())] J[1].append(arr) latest.export = simplejson.dumps(J) latest.put() self.response.headers['Content-Disposition'] = 'attachment; ' +filename self.response.out.write(newfile.getvalue())
def post(self): resource_id=self.request.get('resource_id') fromPage=self.request.get('fromPage') try: user=gcu() except: user = '******' row = self.request.get('row') col = self.request.get('col') thread_id = self.request.get('thread_id') content = self.request.get('content') d = str(datetime.datetime.today()) if resource_id=="Demo": self.response.headers["Content-Type"]="text/plain" self.response.out.write(simplejson.dumps([row, col,thread_id, d, user])) return p = permission(resource_id) if p == False: return arr = [[content, user, d]] data = simplejson.dumps(arr) n=models.Notes(resource_id=resource_id, thread_id=thread_id, data=data, row=int(row), col=int(col)) n.put() new_note_notification(resource_id, user, thread_id, d) self.response.headers["Content-Type"]="text/plain" if fromPage=='mobileviewnotes': self.response.out.write('sent') else: self.response.out.write(simplejson.dumps([row, col,thread_id, d, user]))
def commit(self, id): g = self.getGroup(id) try: name = self.edits[id]['global']['name'] except: name = g['global']['name'] if not utils.permission(param.params.hutch, None): param.params.pobj.transaction_error( "Not Authorized to Change %s!" % name) return False if name[0:10] == "New-Group-": param.params.pobj.transaction_error("Group cannot be named %s!" % name) return False if id >= 0 and not "M" in self.status[id]: return True for d in g.values(): try: if not param.params.db.cfgIsValid(d['config']): param.params.pobj.transaction_error( "New configuration %s must be committed before %s!" % (param.params.db.getCfgName(d['config']), name)) return False if not param.params.db.objIsValid(d['port']): param.params.pobj.transaction_error( "New object %s must be committed before %s!" % (param.params.objmodel.getObjName(d['port']), name)) return False except: pass # Check if otherwise OK! A group should have all configurations unique. # They don't have to all be defined though, if we only want to save it! cfgs = [] for d in g.values(): try: c = d['config'] if c != 0 and c in cfgs: param.params.pobj.transaction_error( "Group has multiple configurations named %s!" % param.params.db.getCfgName(c)) return False cfgs.append(c) except: pass # Must be 'global' dictionary! if 'D' in self.status[id]: result = param.params.pobj.groupDelete(id) elif 'N' in self.status[id]: result = param.params.pobj.groupInsert(param.params.db.doMap(g)) elif 'M' in self.status[id]: result = param.params.pobj.groupUpdate(id, param.params.db.doMap(g)) if result: self.grpChangeDone(id) return result
def getUserObject(self, name = None, id = None): with self.con: if name is not None and id is not None: cur = self.con.cursor() cur.execute("SELECT * FROM Users WHERE id = '" + str(id) + "'") userdata = cur.fetchone() cur2 = self.con.cursor() cur2.execute("SELECT * FROM perms WHERE id = '" + str(id) + "'") perms = cur2.fetchall() permlist = [] for perm in perms: permlist.append(utils.permission(perm[2], perm[0])) # ID Name Password Blocked Changepass return user.User(userdata[0], userdata[1], userdata[2], self.getBoolean(userdata[3]), self.getBoolean(userdata[4]), permlist, self) elif name is not None: cur = self.con.cursor() cur.execute("SELECT * FROM Users WHERE name = '" + str(name) + "'") userdata = cur.fetchone() cur2 = self.con.cursor() cur2.execute("SELECT * FROM perms WHERE id = '" + str(userdata[0]) + "'") perms = cur2.fetchall() print perms permlist = [] for perm in perms: permlist.append(utils.permission(str(perm[2]), str(perm[0]))) # ID Name Password Blocked Changepass return user.User(userdata[0], userdata[1], userdata[2], self.getBoolean(userdata[3]), self.getBoolean(userdata[4]), permlist, self) elif id is not None: cur = self.con.cursor() cur.execute("SELECT * FROM Users WHERE id = '" + str(id) + "'") userdata = cur.fetchone() cur2 = self.con.cursor() cur2.execute("SELECT * FROM perms WHERE id = '" + str(id) + "'") perms = cur2.fetchall() permlist = [] for perm in perms: permlist.append(utils.permission(perm[2], perm[0])) # ID Name Password Blocked Changepass return user.User(userdata[0], userdata[1], userdata[2], self.getBoolean(userdata[3]), self.getBoolean(userdata[4]), permlist, self) else: return False
def applyall(self): if not self.commitall(): return if not utils.permission(param.params.hutch, None): QtGui.QMessageBox.critical(None, "Error", "Not authorized to apply changes!", QtGui.QMessageBox.Ok) return changes = [idx for idx in self.rowmap if "X" in self.getStatus(idx)] changes = self.applyVerify(changes) for idx in changes: self.apply(idx)
def post(self): resource_id = self.request.get('resource_id') p = False if resource_id=='Demo': p = True title = "Duck Soup" else: title = permission(resource_id) p = (title is not False) if not p: self.response.headers["Content-Type"]='text/plain' self.response.out.write('not found') return noteresults = models.Notes.get_by_resource_id(resource_id) un = models.UnreadNotes.get_by_resource_id(resource_id, user=_gcu()) unread_msg_ids = [u.msg_id for u in un] notes = [] for i in noteresults: msgs = simplejson.loads(i.data) for msg in msgs: msg.append(0 if msg[2] in unread_msg_ids else 1) msgsArr=[] for j in msgs: msgsArr.append({'text':j[0], 'user':j[1], 'msg_id':j[2], 'readBool':j[3]}) dic = { 'row':i.row, 'col':i.col, 'msgs':msgsArr, 'thread_id':i.thread_id} notes.append(dic) shareresults = models.UsersScripts.get_by_resource_id(resource_id) sharedwith = [s.user for s in shareresults if s.permission == 'collab'] autosave = 'true' try: us = db.get(db.Key.from_path('UsersSettings', 'settings'+_gcu())) autosave = 'true' if us.autosave else 'false' except: pass screenplay = models.ScriptData.get_latest_version(resource_id) ja={} ja['title'] = title ja['lines'] = simplejson.loads(screenplay.data) ja['spelling'] = [] ja['notes'] = notes ja['sharedwith'] = sharedwith ja['contacts'] = [] ja['autosave'] = autosave self.response.headers["Content-Type"]='text/plain' self.response.out.write(simplejson.dumps(ja))
def post(self): resource_id = self.request.get('resource_id') p = permission(resource_id) if p == False: return title_page = self.request.get('title_page') subject = self.request.get('subject') body_message = self.request.get('body_message') result = urlfetch.fetch("http://www.rawscripts.com/text/email.txt") htmlbody = result.content html = htmlbody.replace("FILLERTEXT", body_message) body = body_message + """ --- This Script written and sent from RawScripts.com. Check it out---""" # Make Recipient list instead of just one recipients=self.request.get('recipients').split(',') title = p latest = models.ScriptData.get_latest_version(resource_id) if not latest: return data = simplejson.loads(latest.data) title_page_obj = None if str(title_page) == '1': title_page_obj = models.TitlePageData.get_or_create(resource_id, title) newfile = export.Pdf(data, title_page_obj) filename = title + '.pdf' try: mail.send_mail(sender=users.get_current_user().email(), to=recipients, subject=subject, body=body, html=html, attachments=[(filename, newfile.getvalue())]) except: self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('not sent') return if ownerPermission(resource_id) != False: J = simplejson.loads(latest.export) t = str(datetime.datetime.today()) for recipient in recipients: J[0].append([recipient, t]) latest.export = simplejson.dumps(J) latest.put() self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('sent')
def commit(self, idx): d = self.getObj(idx) try: name = self.edits[idx]['name'] except: name = d['name'] if not utils.permission(d['owner'], None): param.params.pobj.transaction_error( "Not Authorized to Change %s!" % name) return if name[0:10] == "NewObject-": param.params.pobj.transaction_error("Object cannot be named %s!" % name) return if 'D' in self.status[idx]: param.params.pobj.objectDelete(idx) else: try: e = self.edits[idx] except: e = {} try: if e['config'] < 0: try: if param.params.db.cfgmap[e['config']] < 0: raise Exception except: param.params.pobj.transaction_error( "New configuration must be committed before committing %s!" % name) return except: pass s = self.checkSetMutex(d, e) if s != []: param.params.pobj.transaction_error( "Object %s does not have unique values for %s!" % (name, str(s))) return if 'N' in self.status[idx]: newidx = param.params.pobj.objectInsert( param.params.db.doMap(self.getObj(idx)['_val'])) if newidx != None: param.params.db.addObjmap(idx, newidx) elif 'M' in self.status[idx]: param.params.pobj.objectChange( idx, param.params.db.doMap(self.edits[idx]))
def post(self): resource_id = self.request.get('resource_id') p = permission(resource_id) if p == False: return version = self.request.get('version') tag = self.request.get('tag') screenplay = None if version == "latest": screenplay = models.ScriptData.get_latest_version(resource_id) else: screenplay = models.ScriptData.get_version(resource_id, version) if screenplay is None: return screenplay.tag = tag screenplay.put() self.response.out.write('tagged')
def post(self): resource_id=self.request.get('resource_id') try: user=gcu() except: user = '******' thread_id = self.request.get('thread_id') content = self.request.get('content') msg_id = self.request.get('msg_id') fromPage = self.request.get('fromPage') d = str(datetime.datetime.today()) if resource_id=="Demo": output = simplejson.dumps([content, msg_id, user, thread_id]) self.response.headers["Content-Type"]="text/plain" self.response.out.write(output) return p = permission(resource_id) if p == False: return r = models.Notes.get_by_resource_id_and_thread_id(resource_id, thread_id) J = simplejson.loads(r.data) found = False for i in J: if i[2]==msg_id: if i[1] == user: i[0]=content user = i[1] d = i[2] found=True if found==False: J.append([content,user,d]) r.data=simplejson.dumps(J) r.updated = datetime.datetime.utcnow() r.put() output = simplejson.dumps([content, d, user, thread_id]) new_note_notification(resource_id, user, thread_id, d) self.response.headers["Content-Type"]="text/plain" if fromPage=='mobileviewnotes': self.response.out.write('sent') else: self.response.out.write(output)
def get(self): resource_id=self.request.get('resource_id') if resource_id=="Demo": return title = permission(resource_id) if title == False: return f = ownerPermission(resource_id) r = models.Notes.get_by_resource_id(resource_id) export=[] for i in r: export.append([i.row, i.col, simplejson.loads(i.data), i.thread_id]) template_values={'j':simplejson.dumps(export), "user":gcu(), "sign_out": users.create_logout_url("/"), "title":title, "f":f } path = get_template_path('html/mobile/MobileViewNotes.html') self.response.out.write(template.render(path, template_values))
def commit(self, idx, mustdo): d = self.getCfg(idx) try: name = self.edits[idx]['name'] except: name = d['name'] if not utils.permission(d['owner'], d['security']): param.params.pobj.transaction_error( "Not Authorized to Change %s!" % name) return True if name[0:10] == "NewConfig-": param.params.pobj.transaction_error("Object cannot be named %s!" % name) return True if 'D' in self.status[idx]: # We can process the delete only if *no one* is using this! # We only have to check the configuration, the configDelete # will check the objects. if mustdo: if self.tree[idx]['children'] != []: param.params.pobj.transaction_error( "Configuration to be deleted has children!") else: param.params.pobj.configDelete(idx) else: if self.hasChildren(idx): param.params.pobj.transaction_error( "Configuration to be deleted has children!") else: param.params.pobj.configDelete(idx) return True else: # When is it OK to commit this? If: # - All the parents already exist. # - We don't make a circular loop. # - Any setmutex sets are OK. (All inherited or all different.) # - Every nullok field, is non-null. # - Every unique field has a value (we'll let mysql actually deal with uniqueness!) try: e = self.edits[idx] except: e = {} s = self.checkSetMutex(d, e) if s != []: param.params.pobj.transaction_error( "Config %s does not have unique values for %s!" % (name, str(s))) return True for f in param.params.pobj.cfgflds: if not f['nullok'] and d[f['fld']] == "": param.params.pobj.transaction_error( "Field %s cannot be NULL!" % f['fld']) return True if f['unique'] and not d['_val'][f['fld']]: param.params.pobj.transaction_error( "Field %s must be unique and cannot be inherited!" % f['fld']) return True try: p = self.edits[idx]['config'] except: p = d['config'] while p != None: if not param.params.db.cfgIsValid(p): if mustdo: param.params.pobj.transaction_error( "Config %s has new uncommitted ancestors!" % param.params.db.getCfgName(idx)) return True else: return False # If we are only committing one, we need to check the actual parents, # otherwise, we check the edited parents! if mustdo: p = self.getCfg(p)['config'] else: try: p = self.edits[p]['config'] except: p = self.getCfg(p)['config'] if p == idx: return param.params.pobj.transaction_error( "Config change for %s creates a dependency loop!" % param.params.db.getCfgName(idx)) return True if 'N' in self.status[idx]: newid = param.params.pobj.configInsert( param.params.db.doMap(d)) if newid != None: param.params.db.addCfgmap(idx, newid) else: ee = {} for fld in ['name', 'config', 'mutex']: try: ee[fld] = e[fld] except: pass for f in param.params.pobj.cfgflds: fld = f['fld'] try: ee[fld] = e[fld] # We have a new value! except: try: if not self.editval[idx][ fld]: # We want to inherit now! ee[fld] = None else: # The new value is what we are already inheriting! ee[fld] = d[fld] except: pass # No change! param.params.pobj.configChange(idx, param.params.db.doMap(ee)) return True