Exemple #1
0
def getMessage(msgidx, readStamp=True):
	""" 쪽지를 읽어온다 """
	
	mData = Archive("MsgInBox").getValues(msgidx, "Content,Receiver,Sender,Attachments,IsRead")
	
	if mData == None:
		raise SpartaUserError("존재하지 않는 쪽지번호 입니다")
	
	if mData["Receiver"] != Login.getID() and mData["Sender"] != Login.getID():
		raise SpartaUserError("메세지를 볼수있는 권한이 없습니다")
	
	if readStamp and (mData["IsRead"] == False):
		# 스탬핑 처리
		Archive("MsgInBox").Edit(msgidx, IsRead=True)
		
		# 보낸 편지에도 읽기 스템핑
		r_idx = Archive("MsgSent").getValue("MsgSent.RelateIDX == "+str(msgidx), "IDX")
		if r_idx:
			Archive("MsgSent").Edit(r_idx, IsRead=True)			   
	
	outText = mData["Content"]
	
	if mData["Attachments"]:		
		outText += u'<table class="filedownBox"><tr><td>첨부</td><td><a href="/getfile/message/%s">%s</a></td></tr></table>' % ( msgidx, mData["Attachments"])
	
	return outText
Exemple #2
0
def removeMessage(msgidx):
	
	mData = Archive("MsgInBox").getValues(msgidx, "Receiver,Sender,Attachments")
	
	if mData == None:
		raise SpartaUserError("존재하지 않는 쪽지번호 입니다")
	
	if mData["Receiver"] != Login.getID() and (not CheckAdmin()) and mData["Sender"] != Login.getID():
		raise SpartaAccessError("메세지를 삭제할 수 있는 권한이 없습니다")
	
	r = Archive("MsgInBox").Remove( msgidx )
	#[TODO] 파일삭제 처리!!!	
	return r
Exemple #3
0
def sendMessage( receiver, subject, content, attachments=None, withSMS=None ):
	""" 쪽지함에 쪽지를 발송	
	"""
	#[TODO] To,CC,BCC에 대한 처리 필요 
	#[TODO] IF not logined !!
	
	smsList = []
	msgIDXs = []
	msgSave = { "Subject": subject, "Content": content, "Sender": Login.getID(), "SenderName": Login.getName() }
   
	if "<" in receiver:
		#ex) Address Parsing :: "정기영" <*****@*****.**>, "김태희" <*****@*****.**>  -> ["*****@*****.**",  "*****@*****.**"]
		addrsList = re.findall("\<([._,a-zA-Z0-9:\#\@]+)\>+", receiver)
	else:	 
		addrsList = [n.strip() for n in receiver.split(",")]
	
	for recID in addrsList:
		
		userData = Archive("User").getValues( "User.UserID == "+ recID, "Name,HandPhone" )
		if userData:
			msgSave["Receiver"] = recID
			
			result_IDX = Archive("MsgInBox").New(**msgSave)
			
			if result_IDX:
				msgIDXs.append( result_IDX )
				if userData["HandPhone"] and not userData["HandPhone"].replace("-","") in smsList:
					smsList.append( str(userData["HandPhone"].replace("-","")) )
				
				sentMsg = { "RelateIDX": result_IDX, "Subject": subject, "Content": content, "Receiver": recID, "ReceiverName": userData["Name"], "Sender": Login.getID() } 
				r = Archive("MsgSent").New( **sentMsg )
	
	if attachments:
		#[TODO] 임시 코드입니다. 멀티센딩에서 업된 파일에 대한 레퍼런스 카운트가 이상적이나 일단 그냥 복제형태로 갑니다.
		if type(attachments) == unicode:
			attachments = attachments.encode("utf8")
		
		uploadFile = Files.getRootDir() + attachments
		fileName = os.path.split(attachments)[1]
		
		if os.path.exists( uploadFile ):
			for ridx in msgIDXs:
				if str(ridx).isdigit():
					targetFile = "/data/message/%s.%s" % ( fileName, ridx )
					shutil.copy2( uploadFile, Files.getSpartaDir() + targetFile )
					msgMod = { "IDX" : ridx, "Attachments" : "%s" % fileName }
					r = Archive( "MsgInBox" ).New( **msgMod )
			os.remove(uploadFile)
	
	if withSMS and smsList:		   
		SMS.send( sendMsg=u"스팔타쪽지>"+msgSave["Subject"], recvList=smsList )
	
	return len(msgIDXs)
Exemple #4
0
def removeMessage(msgidx):
	
	msg_receiver_q = Session.query(MsgReceiver).filter_by(idx = msgidx).first()
	
	if None == msg_receiver_q:
		raise SpartaUserError("존재하지 않는 쪽지입니다")

	# 로그인한 사용자가 메시지를 받은 사용자가 아닌 경우 삭제할 수 없다는 메시지를 출력하게 한다.
	if msg_receiver_q.ReceiverID != Login.getID() and (not CheckAdmin()):
		raise SpartaAccessError("메시지를 삭제할 수 있는 권한이 없습니다")

	msg_receiver_q.IsDelete = u"1"

	Session.commit()

	# 항상 1을 반환한다.
	return 1
Exemple #5
0
def setPassword( userid, newpassword):
	
	if userid != Login.getID() and (not CheckAdmin()):
		raise SpartaAccessError("패스워드를 변경할수 있는 권한이 없습니다.")
		
	useridx = getIDX( userid )
	
	if useridx:
		hashedPass = hashlib.md5( newpassword ).hexdigest()    
		r = 0 < Archive("User").Edit( useridx, Password=hashedPass )
		
	else:
		raise SpartaError("[버그] 아이디의 IDX 정보가 잘못되었습니다.")
	
	if r:
		return True
	else:
		raise SpartaError("패스워드를 수정하지 못했습니다.")
Exemple #6
0
def cancelMessage(sentidx):
	
	mData = Archive("MsgSent").getValues(msgidx, "RelateIDX,Sender,Attachments")
	
	if mData == None:
		raise SpartaUserError("존재하지 않는 쪽지번호 입니다")
	
	if mData["Sender"] != Login.getID() and (not CheckAdmin()):
		raise SpartaUserError("메세지를 삭제할 수 있는 권한이 없습니다") 
	
	rData = Archive("MsgInBox").getValue( mData["RelateIDX"], "IDX,IsRead")
	
	if rData:
		if rData["IsRead"] == False:
			return removeMessage( rData["IDX"] )
		else:
			raise SpartaUserError("발송된 메세지는 이미 읽은 메세지입니다")
	else:
		raise SpartaUserError("발송된 메세지는 이미 삭제되었습니다")
	
	return int(0)
Exemple #7
0
def getMessage(msgReceiver_idx, readStamp=True):
	""" 쪽지를 읽어온다 """

	msgReceiver_q = Session.query(MsgReceiver).outerjoin(Msg).add_entity(Msg)

	msg = msgReceiver_q.filter(MsgReceiver.idx == msgReceiver_idx).first()

	if None == msg:
		raise SpartaUserError("존재하지 않는 쪽지입니다")

	# 로그인 중인 사용자와 메시지를 받은 사용자 ID를 비교하여 일치하지 않으면 권한 오류를 발생시킨다.
	if Login.getID() != msg[0].ReceiverID:
		raise SpartaUserError("메시지를 볼 수 있는 권한이 없습니다")
   
	# 읽음여부 수정
	if u"0" == msg[0].IsRead:
		msg[0].IsRead = u"1"

	Session.commit()

	outText = msg[1].Content

	# 첨부파일 가져오기
	msgAttach_q = Session.query(MsgAttach).filter_by(Msg_IDX = msg[1].idx).all()

	attach_text = []

	if len(msgAttach_q) > 0:
		attach_text.append("<table class=\"filedownBox\">")
		attach_text.append(u"<tr><td rowspan=\"%d\">첨부</td><td>" % len(msgAttach_q))

		for attach_item in msgAttach_q:
			attach_text.append("<a href=\"/getfile/nmessage/%d\">%s</a><br />" % (attach_item.idx, attach_item.OriginalFileName) )

		attach_text.append("</td></tr></table>")

	attach_text = "".join(attach_text)

	return "<p>%s</p>%s" % (outText, attach_text)
Exemple #8
0
def removeSendMessage(sendidx):

	# 메시지 정보를 가져온다.
	msg_q = Session.query(Msg).filter(Msg.idx == sendidx)
	if msg_q.count() == 0:
		raise SpartaUserError("존재하지 않는 쪽지입니다")

	msg = msg_q.first()

	if msg.SenderID != Login.getID() and (not CheckAdmin()):
		raise SpartaAccessError("메시지를 삭제할 수 있는 권한이 없습니다") 

	# 수신자 지우기
	receiver_q = Session.query(MsgReceiver).filter(MsgReceiver.Msg_IDX == sendidx)
	if receiver_q.count() > 0:
		# 수신자중에 한명이라도 메시지를 읽지 않았다면 쪽지를 삭제하지 못하게 한다.
		for receiver_user in receiver_q.all():
			if receiver_user.IsDelete == u"0":
				return u"%s 사용자가 아직 쪽지를 읽지 않았습니다" % receiver_user.ReceiverID
		
		receiver_q.delete()
		Session.commit()

	# 우선 첨부파일 정보를 가져온다.
	attach_q = Session.query(MsgAttach).filter(MsgAttach.Msg_IDX == sendidx).all()
	if len(attach_q) > 0:
		for attach_info in attach_q:
			# File Exists
			if os.path.exists(attach_info.NewFileName):
				os.unlink(attach_info.NewFileName)
		Session.delete(attach_info)
		Session.commit()

	# 본 메시지 삭제
	msg_q = Session.delete(msg)
	Session.commit()
	
	return 1
Exemple #9
0
def getNoReadCount():
	""" 읽지않은 쪽지 갯수를 반환한다 """
	return Session.query(MsgReceiver).filter(and_(MsgReceiver.IsRead == u'0', MsgReceiver.ReceiverID == Login.getID())).count()
Exemple #10
0
def sendMessage( receiver, receiverCC, receiverBCC, subject, content, attachments=None, withSMS=None ):
	""" 쪽지함에 쪽지를 발송"""
	
	#[TODO] IF not logined !!

	withEmail = True

	emailList = []
	smsList = []
	msgIDXs = []

	receiverTo = getReceiver(receiver)
	receiverCc = getReceiver(receiverCC)
	receiverBcc = getReceiver(receiverBCC)
	
	# 쪽지 내용 저장
	msg = Msg()
	msg.SenderID = unicode(Login.getID())
	msg.SenderName = unicode(Login.getName())
	msg.Subject = unicode(subject)
	msg.Content = unicode(content)
	msg.withSMS = unicode(withSMS)
	msg.CreateDate = datetime.datetime.now() 
	
	Session.add(msg)
	Session.commit()
	
	# To들에게 보내기
	setMsgReceiver(receiverTo, msg.idx, "0")
	# CC들에게 보내기
	setMsgReceiver(receiverCc, msg.idx, "1")
	# BCC들에게 보내기
	setMsgReceiver(receiverBcc, msg.idx, "2")

	# SMS 발송 관련 처리
	if withSMS:
		smsList = list()
		receiverList = receiverTo + receiverCc +receiverBcc
		for msg_receiver in receiverList:
			if type(msg_receiver) != dict:
				continue
			smsList.append(msg_receiver["HandPhone"])

		if len(smsList) > 0:
			SMS.send(sendMsg=u"[sparta] %s" % msg.Content[:70], recvList=smsList)
	
	if withEmail:
		senderData = getReceiver("<%s>" % Login.getID())[0]["GwID"]
		emailList = list()
		receiverList = receiverTo + receiverCc +receiverBcc
		for msg_receiver in receiverList:
			if type(msg_receiver) != dict:
				continue			
			if str(msg_receiver["GwID"]).startswith("D"):
				emailList.append( str(msg_receiver["GwID"])+"@idea.co.kr" )
		if len(emailList) > 0:
			sendEmail("*****@*****.**" % senderData, msg.Subject, msg.Content, recvList=emailList)
   
	if attachments:
		objUpload = Upload()
		objUpload.MsgInitialize()
		
		for attach_item in attachments:
			new_file = objUpload.upload_file_move(attach_item)

			rowMsgAttach = MsgAttach()
			rowMsgAttach.Msg_IDX = unicode(msg.idx)
			rowMsgAttach.OriginalFileName = unicode(new_file["O_PATH"])
			rowMsgAttach.NewFileName = unicode(new_file["D_PATH"])
			rowMsgAttach.FileSize = unicode(new_file["SIZE"])

			Session.add(rowMsgAttach)

		Session.commit()
	return len(receiverTo)
Exemple #11
0
def getLoginID():
	return Login.getID()
Exemple #12
0
def getNoReadCount():
	""" 읽지않은 쪽지 갯수를 반환한다 """
	
	CntNonRead = Archive.RunQuery("select count(IDX) from MsgInBox where Receiver = :id and IsRead =0", id=Login.getID() )[0][0]	
	return CntNonRead