From 63d669f390d9b69d731db45dc19dbad1098ff832 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 3 Feb 2012 12:56:12 +0530 Subject: [PATCH] updated feed for comments and login --- erpnext/home/__init__.py | 28 ++++++++++----- erpnext/home/doctype/feed/feed.txt | 24 ++++++++----- .../home/page/event_updates/event_updates.js | 35 ++++++++++++------- erpnext/patches/jan_mar_2012/latest/feed.py | 6 ++++ .../login.py} | 0 .../jan_mar_2012/{ => latest}/website.py | 0 erpnext/startup/event_handlers.py | 27 ++++++++++---- version.num | 2 +- 8 files changed, 85 insertions(+), 37 deletions(-) create mode 100644 erpnext/patches/jan_mar_2012/latest/feed.py rename erpnext/patches/jan_mar_2012/{subdomain_login_patch.py => latest/login.py} (100%) rename erpnext/patches/jan_mar_2012/{ => latest}/website.py (100%) diff --git a/erpnext/home/__init__.py b/erpnext/home/__init__.py index 7059cec7e5f..5ebf7c01647 100644 --- a/erpnext/home/__init__.py +++ b/erpnext/home/__init__.py @@ -34,23 +34,33 @@ feed_dict = { '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 5aa4f910e46..f239f7c7c86 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', @@ -39,11 +39,19 @@ 'name': 'Feed' }, + # 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 784577a2742..90aef9e6961 100644 --- a/erpnext/home/page/event_updates/event_updates.js +++ b/erpnext/home/page/event_updates/event_updates.js @@ -456,7 +456,7 @@ FeedList.prototype.make_list = function() { 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 @@ FeedItem = function(cell, det, feedlist) { 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.add_day_sep = function(det) { // ------------------------------------------------- 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 @@ FeedItem.prototype.render_references = function(div, det) { 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 00000000000..c913c49c181 --- /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 d9fb4511a83..e3e7fa95d57 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 @@ def on_login_post_session(login_manager): 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, + '"' + doc.comment + '"', '#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 boot_session(bootinfo): 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 ac471d3ba0c..2a9c18ad50e 100644 --- a/version.num +++ b/version.num @@ -1 +1 @@ -355 \ No newline at end of file +357 \ No newline at end of file