示例#1
0
	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)
示例#2
0
    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)
示例#3
0
	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())
示例#4
0
	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]))
示例#5
0
 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
示例#6
0
 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
示例#7
0
 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)
示例#8
0
    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))
示例#9
0
	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')
示例#10
0
 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]))
示例#11
0
	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')
示例#12
0
	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)
示例#13
0
	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))
示例#14
0
 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