updated feed for comments and login
diff --git a/erpnext/home/__init__.py b/erpnext/home/__init__.py
index 7059cec..5ebf7c0 100644
--- a/erpnext/home/__init__.py
+++ b/erpnext/home/__init__.py
@@ -34,23 +34,33 @@
 	'Support Ticket':       ['[%(status)s] %(subject)s', '#000080']	
 }
 
-def make_feed(doc, subject, color):
+def make_feed(feedtype, doctype, name, owner, subject, color):
 	"makes a new Feed record"
 	#msgprint(subject)
 	from webnotes.model.doc import Document
-	webnotes.conn.sql("delete from tabFeed where doc_type=%s and doc_name=%s", (doc.doctype, doc.name))
+
+	if feedtype in ('Login', 'Comment'):
+		# delete old login, comment feed
+		webnotes.conn.sql("""delete from tabFeed where 
+			datediff(curdate(), creation) > 7 and doc_type in ('Comment', 'Login')""")
+	else:
+		# one feed per item
+		webnotes.conn.sql("""delete from tabFeed
+			where doc_type=%s and doc_name=%s 
+			and ifnull(feed_type,'') != 'Comment'""", (doctype, name))
+
 	f = Document('Feed')
-	f.doc_type = doc.doctype
-	f.doc_name = doc.name
+	f.owner = owner
+	f.feed_type = feedtype
+	f.doc_type = doctype
+	f.doc_name = name
 	f.subject = subject
 	f.color = color
-	f.save(1)
+	f.save()
 
 def update_feed(doc, method=None):   
 	"adds a new feed"
 	if method=='on_update':
 		subject, color = feed_dict.get(doc.doctype, [None, None])
-		if subject:
-			subject = subject % doc.fields
-			
-			make_feed(doc, subject, color)
+		if subject:			
+			make_feed('', doc.doctype, doc.name, doc.owner, subject % doc.fields, color)
diff --git a/erpnext/home/doctype/feed/feed.txt b/erpnext/home/doctype/feed/feed.txt
index 5aa4f91..f239f7c 100644
--- a/erpnext/home/doctype/feed/feed.txt
+++ b/erpnext/home/doctype/feed/feed.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2011-04-08 10:50:41',
+		'creation': '2011-04-06 18:11:38',
 		'docstatus': 0,
-		'modified': '2011-04-05 09:16:57',
+		'modified': '2012-02-03 11:28:16',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -14,18 +14,18 @@
 	{
 		'autoname': '_FEED.#####',
 		'colour': 'White:FFF',
+		'default_print_format': 'Standard',
 		'doctype': 'DocType',
 		'module': 'Home',
 		'name': '__common__',
 		'section_style': 'Simple',
 		'show_in_menu': 0,
-		'version': 1
+		'version': 2
 	},
 
 	# These values are common for all DocField
 	{
 		'doctype': 'DocField',
-		'fieldtype': 'Data',
 		'name': '__common__',
 		'parent': 'Feed',
 		'parentfield': 'fields',
@@ -42,8 +42,16 @@
 	# DocField
 	{
 		'doctype': 'DocField',
+		'fieldname': 'feed_type',
+		'fieldtype': 'Select',
+		'label': 'Feed Type'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
 		'fieldname': 'doc_type',
-		'idx': 1,
+		'fieldtype': 'Data',
 		'label': 'Doc Type'
 	},
 
@@ -51,7 +59,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldname': 'doc_name',
-		'idx': 2,
+		'fieldtype': 'Data',
 		'label': 'Doc Name'
 	},
 
@@ -59,7 +67,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldname': 'subject',
-		'idx': 3,
+		'fieldtype': 'Data',
 		'label': 'Subject'
 	},
 
@@ -67,7 +75,7 @@
 	{
 		'doctype': 'DocField',
 		'fieldname': 'color',
-		'idx': 4,
+		'fieldtype': 'Data',
 		'label': 'Color'
 	}
 ]
\ No newline at end of file
diff --git a/erpnext/home/page/event_updates/event_updates.js b/erpnext/home/page/event_updates/event_updates.js
index 784577a..90aef9e 100644
--- a/erpnext/home/page/event_updates/event_updates.js
+++ b/erpnext/home/page/event_updates/event_updates.js
@@ -456,7 +456,7 @@
 	this.list = new wn.widgets.Listing({
 		parent: this.list_area,
 		query: repl('select \
-			distinct t1.name, t1.doc_type, t1.doc_name, t1.subject, t1.modified_by, \
+			distinct t1.name, t1.feed_type, t1.doc_type, t1.doc_name, t1.subject, t1.modified_by, \
 			concat(ifnull(t2.first_name,""), " ", ifnull(t2.last_name,"")) as full_name, \
 			t1.modified, t1.color \
 			from tabFeed t1, tabProfile t2, tabUserRole t3, tabDocPerm t4 \
@@ -495,13 +495,11 @@
 	this.tab = make_table(this.wrapper, 1, 2, '100%', [(100/7)+'%', (600/7)+'%']);
 	$y(this.tab,{tableLayout:'fixed'})
 
-	// image
 	$y($td(this.tab,0,0),{textAlign:'right',paddingRight:'4px'});
 	
 	// text
 	this.text_area = $a($td(this.tab,0,1), 'div');
-	this.render_references(this.text_area, det);
-	
+	this.render_references(this.text_area, det);	
 	this.render_tag(det);
 	
 	// add day separator
@@ -537,13 +535,21 @@
 // -------------------------------------------------
 
 FeedItem.prototype.render_tag = function(det) {
+	// type is the name
 	tag = $a($td(this.tab,0,0), 'div', '', 
-		{color:'#FFF', padding:'3px', textAlign:'right', fontSize:'11px', whiteSpace:'nowrap', overflow:'hidden', cursor:'pointer'});
+		{color:'#FFF', padding:'3px', textAlign:'right', fontSize:'11px', 
+			whiteSpace:'nowrap', overflow:'hidden', cursor:'pointer'});
 	$br(tag,'3px');
 	$y(tag, {backgroundColor:(det.color || '#273')});
-	tag.innerHTML = get_doctype_label(det.doc_type);
-	tag.dt = det.doc_type;
-	tag.onclick = function() { loaddocbrowser(this.dt); }
+	
+	// tag label
+	tag.innerHTML = det.feed_type || get_doctype_label(det.doc_type);
+	
+	// not comment / label
+	if(!det.feed_type) {
+		tag.dt = det.doc_type;
+		tag.onclick = function() { loaddocbrowser(this.dt); }		
+	}
 }
 
 FeedItem.prototype.render_references = function(div, det) {
@@ -552,10 +558,15 @@
 	var dt = det.doc_type; var dn = det.doc_name
 	
 	// link
-	var allow = in_list(profile.can_read, dt);
-	var span = $a($td(div.tab,0,0), 'span', (allow ? 'link_type': ''), null, det.doc_name);
-	span.dt = dt; span.dn = dn;
-	if(allow) span.onclick = function() { loaddoc(this.dt, this.dn); }
+	if(det.feed_type=='Login') {
+		// nothing - no link		
+	} else {
+		var allow = in_list(profile.can_read, dt);
+		var span = $a($td(div.tab,0,0), 'span', (allow ? 'link_type': ''), null, 
+			det.doc_name);
+		span.dt = dt; span.dn = dn;
+		if(allow) span.onclick = function() { loaddoc(this.dt, this.dn); }		
+	}
 	
 	// subject
 	if(det.subject) {
diff --git a/erpnext/patches/jan_mar_2012/latest/feed.py b/erpnext/patches/jan_mar_2012/latest/feed.py
new file mode 100644
index 0000000..c913c49
--- /dev/null
+++ b/erpnext/patches/jan_mar_2012/latest/feed.py
@@ -0,0 +1,6 @@
+import webnotes
+from webnotes.model.doc import Document
+from webnotes.modules import reload_doc
+
+def execute():
+	reload_doc('home', 'doctype', 'feed')
\ No newline at end of file
diff --git a/erpnext/patches/jan_mar_2012/subdomain_login_patch.py b/erpnext/patches/jan_mar_2012/latest/login.py
similarity index 100%
rename from erpnext/patches/jan_mar_2012/subdomain_login_patch.py
rename to erpnext/patches/jan_mar_2012/latest/login.py
diff --git a/erpnext/patches/jan_mar_2012/website.py b/erpnext/patches/jan_mar_2012/latest/website.py
similarity index 100%
rename from erpnext/patches/jan_mar_2012/website.py
rename to erpnext/patches/jan_mar_2012/latest/website.py
diff --git a/erpnext/startup/event_handlers.py b/erpnext/startup/event_handlers.py
index d9fb451..e3e7fa9 100644
--- a/erpnext/startup/event_handlers.py
+++ b/erpnext/startup/event_handlers.py
@@ -1,18 +1,18 @@
 import webnotes
 import webnotes.defs
 from webnotes.utils import cint
+import home
 
 def on_login(login_manager):
 	"""
 		called from login manager, before login
 	"""
-	try:
-		if login_manager.user not in ('Guest', None, ''):
+	if login_manager.user not in ('Guest', None, ''):
+		try:
 			import server_tools.gateway_utils
 			server_tools.gateway_utils.check_login(login_manager.user)
-	except ImportError:
-		pass
-
+		except ImportError:
+			pass
 		
 def on_login_post_session(login_manager):
 	"""
@@ -29,9 +29,21 @@
 				sid!=%s""", \
 			(webnotes.session['user'], webnotes.session['sid']), as_list=1)
 
+	if webnotes.session['user'] not in ('Guest'):
+		# create feed
+		from webnotes.utils import nowtime
+		home.make_feed('Login', 'Profile', login_manager.user, login_manager.user,
+			'%s logged in at %s' % (login_manager.user_fullname, nowtime()), 
+			login_manager.user=='Administrator' and '#8CA2B3' or '#1B750D')		
+
+def comment_added(doc):
+	"""add comment to feed"""
+	import json
+	home.make_feed('Comment', doc.comment_doctype, doc.comment_docname, doc.comment_by,
+		'<i>"' + doc.comment + '"</i>', '#6B24B3')
+
 def doclist_all(doc, method):
 	"""doclist trigger called from webnotes.model.doclist on any event"""
-	import home
 	home.update_feed(doc, method)
 	
 def boot_session(bootinfo):
@@ -51,5 +63,6 @@
 def get_letter_heads():
 	"""load letter heads with startup"""
 	import webnotes
-	ret = webnotes.conn.sql("select name, content from `tabLetter Head` where ifnull(disabled,0)=0")
+	ret = webnotes.conn.sql("""select name, content from `tabLetter Head` 
+		where ifnull(disabled,0)=0""")
 	return dict(ret)
diff --git a/version.num b/version.num
index ac471d3..2a9c18a 100644
--- a/version.num
+++ b/version.num
@@ -1 +1 @@
-355
\ No newline at end of file
+357
\ No newline at end of file