mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-25 07:54:46 +00:00
moved directory structure
This commit is contained in:
1
utilities/page/messages/__init__.py
Normal file
1
utilities/page/messages/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from __future__ import unicode_literals
|
||||
35
utilities/page/messages/messages.css
Normal file
35
utilities/page/messages/messages.css
Normal file
@@ -0,0 +1,35 @@
|
||||
#message-post-text {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
#message-list {
|
||||
|
||||
}
|
||||
|
||||
.message {
|
||||
border-radius: 5px;
|
||||
max-width: 60%;
|
||||
min-width: 40%;
|
||||
padding: 7px;
|
||||
margin-bottom: 7px;
|
||||
}
|
||||
|
||||
.message .help {
|
||||
margin-bottom: 0px;
|
||||
padding-bottom: 0px;
|
||||
color: #888;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.message-other {
|
||||
background-color: #EBFF9C;
|
||||
border: 1px solid #C3CF78;
|
||||
float: right;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.message-self {
|
||||
background-color: #eee;
|
||||
border: 1px solid #ccc;
|
||||
float: left;
|
||||
}
|
||||
28
utilities/page/messages/messages.html
Normal file
28
utilities/page/messages/messages.html
Normal file
@@ -0,0 +1,28 @@
|
||||
<div class="layout-wrapper layout-wrapper-background">
|
||||
<div class="layout-main-section">
|
||||
<a class="close" onclick="window.history.back();">×</a>
|
||||
<h1>Messages</h1>
|
||||
<div class="well">
|
||||
<input id="message-post-text"></input>
|
||||
<button disabled="disabled" id="message-post" class="btn btn-small"><i class="icon-play"></i> Post</button>
|
||||
</div>
|
||||
<div id="message-list">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layout-side-section">
|
||||
<div class="psidebar">
|
||||
<div class="section">
|
||||
<div class="section-head">
|
||||
Messages By
|
||||
</div>
|
||||
<div class="section-body">
|
||||
<div class="section-item">
|
||||
<a href="#!messages"><b>All messages</b></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="clear: both;">
|
||||
</div>
|
||||
</div>
|
||||
163
utilities/page/messages/messages.js
Normal file
163
utilities/page/messages/messages.js
Normal file
@@ -0,0 +1,163 @@
|
||||
// ERPNext - web based ERP (http://erpnext.com)
|
||||
// Copyright (C) 2012 Web Notes Technologies Pvt Ltd
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
wn.provide('erpnext.messages');
|
||||
|
||||
wn.pages.messages.onload = function(wrapper) {
|
||||
erpnext.messages.show_active_users();
|
||||
erpnext.messages.make_list();
|
||||
erpnext.update_messages('reset'); //Resets notification icons
|
||||
|
||||
// post message
|
||||
$('#message-post').click(function() {
|
||||
var txt = $('#message-post-text').val();
|
||||
if(txt) {
|
||||
wn.call({
|
||||
module:'utilities',
|
||||
page:'messages',
|
||||
method:'post',
|
||||
args: {
|
||||
txt: txt,
|
||||
contact: erpnext.messages.contact
|
||||
},
|
||||
callback:function(r,rt) {
|
||||
$('#message-post-text').val('')
|
||||
erpnext.messages.list.run();
|
||||
},
|
||||
btn: this
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// enable, disable button
|
||||
$('#message-post-text').keyup(function(e) {
|
||||
if($(this).val()) {
|
||||
$('#message-post').attr('disabled', false);
|
||||
} else {
|
||||
$('#message-post').attr('disabled', true);
|
||||
}
|
||||
|
||||
if(e.which==13) {
|
||||
$('#message-post').click();
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
$(wn.pages.messages).bind('show', function() {
|
||||
erpnext.messages.show();
|
||||
setTimeout(erpnext.messages.refresh, 7000);
|
||||
$('#message-post-text').focus();
|
||||
})
|
||||
|
||||
erpnext.messages = {
|
||||
show: function() {
|
||||
var contact = erpnext.messages.get_contact();
|
||||
|
||||
// can't send message to self
|
||||
$(wn.pages.messages).find('.well').toggle(contact==user ? false : true);
|
||||
|
||||
$(wn.pages.messages).find('h1:first').html('Messages: '
|
||||
+ (user==contact ? 'From everyone' : wn.user_info(contact).fullname));
|
||||
|
||||
erpnext.messages.contact = contact;
|
||||
erpnext.messages.list.opts.args.contact = contact;
|
||||
erpnext.messages.list.run();
|
||||
|
||||
},
|
||||
// check for updates every 5 seconds if page is active
|
||||
refresh: function() {
|
||||
setTimeout(erpnext.messages.refresh, 7000);
|
||||
if(wn.container.page.label != 'Messages') return;
|
||||
erpnext.messages.show();
|
||||
},
|
||||
get_contact: function() {
|
||||
var route = location.hash;
|
||||
if(route.indexOf('/')!=-1) {
|
||||
var name = decodeURIComponent(route.split('/')[1]);
|
||||
if(name.indexOf('__at__')!=-1) {
|
||||
name = name.replace('__at__', '@');
|
||||
}
|
||||
return name;
|
||||
}
|
||||
return user;
|
||||
},
|
||||
make_list: function() {
|
||||
erpnext.messages.list = new wn.ui.Listing({
|
||||
parent: $('#message-list').get(0),
|
||||
method: 'utilities.page.messages.messages.get_list',
|
||||
args: {
|
||||
contact: null
|
||||
},
|
||||
render_row: function(wrapper, data) {
|
||||
$(wrapper).removeClass('list-row');
|
||||
|
||||
data.creation = dateutil.comment_when(data.creation);
|
||||
data.comment_by_fullname = wn.user_info(data.owner).fullname;
|
||||
|
||||
data.reply_html = '';
|
||||
if(data.owner==user) {
|
||||
data.cls = 'message-self';
|
||||
data.comment_by_fullname = 'You';
|
||||
data.delete_html = repl('<a class="close" \
|
||||
onclick="erpnext.messages.delete(this)"\
|
||||
data-name="%(name)s">×</a>', data);
|
||||
} else {
|
||||
data.cls = 'message-other';
|
||||
data.delete_html = '';
|
||||
if(erpnext.messages.contact==user) {
|
||||
data.reply_html = repl('<a href="#!messages/%(owner)s">\
|
||||
<i class="icon-share-alt"></i> Reply</a>', data)
|
||||
}
|
||||
}
|
||||
|
||||
wrapper.innerHTML = repl('<div class="message %(cls)s">%(delete_html)s\
|
||||
<b>%(comment)s</b>\
|
||||
<div class="help">by %(comment_by_fullname)s, %(creation)s</div>\
|
||||
%(reply_html)s</div>\
|
||||
<div style="clear: both;"></div>', data);
|
||||
}
|
||||
});
|
||||
},
|
||||
delete: function(ele) {
|
||||
$(ele).parent().css('opacity', 0.6);
|
||||
wn.call({
|
||||
method:'utilities.page.messages.messages.delete',
|
||||
args: {name : $(ele).attr('data-name')},
|
||||
callback: function() {
|
||||
$(ele).parent().toggle(false);
|
||||
}
|
||||
});
|
||||
},
|
||||
show_active_users: function() {
|
||||
wn.call({
|
||||
module:'utilities',
|
||||
page:'messages',
|
||||
method:'get_active_users',
|
||||
callback: function(r,rt) {
|
||||
var $body = $(wn.pages.messages).find('.section-body');
|
||||
for(var i in r.message) {
|
||||
var p = r.message[i];
|
||||
p.fullname = wn.user_info(p.name).fullname;
|
||||
p.name = p.name.replace('@', '__at__');
|
||||
$body.append(repl('<div class="section-item">\
|
||||
<a href="#!messages/%(name)s">%(fullname)s</a></div>', p))
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
108
utilities/page/messages/messages.py
Normal file
108
utilities/page/messages/messages.py
Normal file
@@ -0,0 +1,108 @@
|
||||
# ERPNext - web based ERP (http://erpnext.com)
|
||||
# Copyright (C) 2012 Web Notes Technologies Pvt Ltd
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import webnotes
|
||||
|
||||
@webnotes.whitelist()
|
||||
def get_list(arg=None):
|
||||
"""get list of messages"""
|
||||
webnotes.form_dict['limit_start'] = int(webnotes.form_dict['limit_start'])
|
||||
webnotes.form_dict['limit_page_length'] = int(webnotes.form_dict['limit_page_length'])
|
||||
webnotes.form_dict['user'] = webnotes.session['user']
|
||||
|
||||
if webnotes.form_dict['contact'] == webnotes.session['user']:
|
||||
# set all messages as read
|
||||
webnotes.conn.sql("""UPDATE `tabComment`
|
||||
set docstatus = 1 where comment_doctype in ('My Company', 'Message')
|
||||
and comment_docname = %s
|
||||
""", webnotes.user.name)
|
||||
|
||||
# return messages
|
||||
return webnotes.conn.sql("""select * from `tabComment`
|
||||
where (owner=%(contact)s or comment_docname=%(user)s)
|
||||
and comment_doctype in ('My Company', 'Message')
|
||||
order by creation desc
|
||||
limit %(limit_start)s, %(limit_page_length)s""", webnotes.form_dict, as_dict=1)
|
||||
else:
|
||||
return webnotes.conn.sql("""select * from `tabComment`
|
||||
where (owner=%(contact)s and comment_docname=%(user)s)
|
||||
or (owner=%(user)s and comment_docname=%(contact)s)
|
||||
and comment_doctype in ('My Company', 'Message')
|
||||
order by creation desc
|
||||
limit %(limit_start)s, %(limit_page_length)s""", webnotes.form_dict, as_dict=1)
|
||||
|
||||
|
||||
@webnotes.whitelist()
|
||||
def get_active_users(arg=None):
|
||||
return webnotes.conn.sql("""select name from tabProfile
|
||||
where ifnull(enabled,0)=1 and
|
||||
docstatus < 2 and
|
||||
name not in ('Administrator', 'Guest')
|
||||
order by first_name""", as_dict=1)
|
||||
|
||||
@webnotes.whitelist()
|
||||
def post(arg=None):
|
||||
import webnotes
|
||||
"""post message"""
|
||||
if arg:
|
||||
import json
|
||||
arg = json.loads(arg)
|
||||
else:
|
||||
arg = {}
|
||||
arg.update(webnotes.form_dict)
|
||||
from webnotes.model.doc import Document
|
||||
d = Document('Comment')
|
||||
d.comment = arg['txt']
|
||||
d.comment_docname = arg['contact']
|
||||
d.comment_doctype = 'Message'
|
||||
d.save()
|
||||
|
||||
import webnotes.utils
|
||||
if webnotes.utils.cint(arg.get('notify')):
|
||||
notify(arg)
|
||||
|
||||
@webnotes.whitelist()
|
||||
def delete(arg=None):
|
||||
webnotes.conn.sql("""delete from `tabComment` where name=%s""",
|
||||
webnotes.form_dict['name']);
|
||||
|
||||
def notify(arg=None):
|
||||
from webnotes.utils import cstr
|
||||
fn = webnotes.conn.sql('select first_name, last_name from tabProfile where name=%s', webnotes.user.name)[0]
|
||||
if fn[0] or f[1]:
|
||||
fn = cstr(fn[0]) + (fn[0] and ' ' or '') + cstr(fn[1])
|
||||
else:
|
||||
fn = webnotes.user.name
|
||||
|
||||
message = '''A new comment has been posted on your page by %s:
|
||||
|
||||
<b>Comment:</b> %s
|
||||
|
||||
To answer, please login to your erpnext account!
|
||||
''' % (fn, arg['txt'])
|
||||
|
||||
from webnotes.model.code import get_obj
|
||||
note = get_obj('Notification Control')
|
||||
email_msg = note.prepare_message({
|
||||
'type': 'New Comment',
|
||||
'message': message
|
||||
})
|
||||
|
||||
sender = webnotes.user.name!='Administrator' and webnotes.user.name or 'support+admin_post@erpnext.com'
|
||||
|
||||
from webnotes.utils.email_lib import sendmail
|
||||
sendmail([arg['contact']], sender, email_msg, fn + ' has posted a new comment')
|
||||
28
utilities/page/messages/messages.txt
Normal file
28
utilities/page/messages/messages.txt
Normal file
@@ -0,0 +1,28 @@
|
||||
# Page, messages
|
||||
[
|
||||
|
||||
# These values are common in all dictionaries
|
||||
{
|
||||
'creation': '2012-02-24 11:21:57',
|
||||
'docstatus': 0,
|
||||
'modified': '2012-02-24 11:21:57',
|
||||
'modified_by': u'Administrator',
|
||||
'owner': u'Administrator'
|
||||
},
|
||||
|
||||
# These values are common for all Page
|
||||
{
|
||||
'doctype': 'Page',
|
||||
'module': u'Utilities',
|
||||
'name': '__common__',
|
||||
'page_name': u'messages',
|
||||
'standard': u'Yes',
|
||||
'title': u'Messages'
|
||||
},
|
||||
|
||||
# Page, messages
|
||||
{
|
||||
'doctype': 'Page',
|
||||
'name': u'messages'
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user