diff options
author | Marcin Kuzminski <marcin@python-works.com> | 2011-11-23 00:55:05 +0200 |
---|---|---|
committer | Marcin Kuzminski <marcin@python-works.com> | 2011-11-23 00:55:05 +0200 |
commit | 316164a9dde9a32b4d66fc537e98a9d2339cd95f (patch) | |
tree | fdb0df88d80244236b8105fd2fed21e583c5865a /rhodecode/model/comment.py | |
parent | fc5c80f0d429d09d266e123507cc0afbaa3ff7a3 (diff) |
Notification system improvements
- deleting
- tests
- ui
- moved to separate controller
--HG--
branch : beta
rename : rhodecode/templates/admin/users/notifications.html => rhodecode/templates/admin/notifications/notifications.html
Diffstat (limited to 'rhodecode/model/comment.py')
-rw-r--r-- | rhodecode/model/comment.py | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/rhodecode/model/comment.py b/rhodecode/model/comment.py index 4fe5fde1..efba4693 100644 --- a/rhodecode/model/comment.py +++ b/rhodecode/model/comment.py @@ -23,13 +23,16 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. - +import re import logging import traceback -from rhodecode.model import BaseModel -from rhodecode.model.db import ChangesetComment, User, Notification +from pylons.i18n.translation import _ from sqlalchemy.util.compat import defaultdict + +from rhodecode.lib import helpers as h +from rhodecode.model import BaseModel +from rhodecode.model.db import ChangesetComment, User, Repository, Notification from rhodecode.model.notification import NotificationModel log = logging.getLogger(__name__) @@ -38,6 +41,15 @@ log = logging.getLogger(__name__) class ChangesetCommentsModel(BaseModel): + def _extract_mentions(self, s): + usrs = [] + for username in re.findall(r'(?:^@|\s@)(\w+)', s): + user_obj = User.get_by_username(username, case_insensitive=True) + if user_obj: + usrs.append(user_obj) + + return usrs + def create(self, text, repo_id, user_id, revision, f_path=None, line_no=None): """ @@ -51,8 +63,10 @@ class ChangesetCommentsModel(BaseModel): :param line_no: """ if text: + repo = Repository.get(repo_id) + desc = repo.scm_instance.get_changeset(revision).message comment = ChangesetComment() - comment.repo_id = repo_id + comment.repo = repo comment.user_id = user_id comment.revision = revision comment.text = text @@ -60,18 +74,26 @@ class ChangesetCommentsModel(BaseModel): comment.line_no = line_no self.sa.add(comment) - self.sa.commit() + self.sa.flush() # make notification - usr = User.get(user_id) - subj = 'User %s commented on %s' % (usr.username, revision) + line = '' + if line_no: + line = _('on line %s') % line_no + subj = h.link_to('Re commit: %(commit_desc)s %(line)s' % \ + {'commit_desc':desc,'line':line}, + h.url('changeset_home', repo_name=repo.repo_name, + revision = revision, + anchor = 'comment-%s' % comment.comment_id + ) + ) body = text recipients = ChangesetComment.get_users(revision=revision) + recipients += self._extract_mentions(body) NotificationModel().create(created_by=user_id, subject=subj, body = body, recipients = recipients, type_ = Notification.TYPE_CHANGESET_COMMENT) - return comment def delete(self, comment_id): |