Fixed issue 114, email sent in language of commenter.

This commit is contained in:
Loic d'Anterroches 2009-10-08 11:23:33 +02:00
parent ec8ff4f76b
commit b6c5e803cb
16 changed files with 312 additions and 192 deletions

View File

@ -156,25 +156,7 @@ class IDF_Commit extends Pluf_Model
$commit->origauthor = $change->author; $commit->origauthor = $change->author;
$commit->creation_dtime = $change->date; $commit->creation_dtime = $change->date;
$commit->create(); $commit->create();
// We notify the creation of the commit $commit->notify($project->getConf());
if ('' != $project->getConf()->getVal('source_notification_email', '')) {
$context = new Pluf_Template_Context(
array(
'c' => $commit,
'project' => $project,
'url_base' => Pluf::f('url_base'),
)
);
$tmpl = new Pluf_Template('idf/source/commit-created-email.txt');
$text_email = $tmpl->render($context);
$email = new Pluf_Mail(Pluf::f('from_email'),
$project->getConf()->getVal('source_notification_email'),
sprintf(__('New Commit %s - %s (%s)'),
$commit->scm_id, $commit->summary, $project->shortname));
$email->addTextMessage($text_email);
$email->sendMail();
}
return $commit; return $commit;
} }
@ -272,4 +254,38 @@ class IDF_Commit extends Pluf_Model
'; ';
return $out; return $out;
} }
/**
* Notification of change of the object.
*
* @param IDF_Conf Current configuration
* @param bool Creation (true)
*/
public function notify($conf, $create=true)
{
if ('' == $conf->getVal('source_notification_email', '')) {
return;
}
$current_locale = Pluf_Translation::getLocale();
$langs = Pluf::f('languages', array('en'));
Pluf_Translation::loadSetLocale($langs[0]);
$context = new Pluf_Template_Context(
array(
'c' => $this,
'project' => $this->get_project(),
'url_base' => Pluf::f('url_base'),
)
);
$tmpl = new Pluf_Template('idf/source/commit-created-email.txt');
$text_email = $tmpl->render($context);
$email = new Pluf_Mail(Pluf::f('from_email'),
$conf->getVal('source_notification_email'),
sprintf(__('New Commit %s - %s (%s)'),
$this->scm_id, $this->summary,
$this->get_project()->shortname));
$email->addTextMessage($text_email);
$email->sendMail();
Pluf_Translation::loadSetLocale($current_locale);
}
} }

View File

@ -204,26 +204,7 @@ class IDF_Form_ReviewCreate extends Pluf_Form
$patch->commit = self::findCommit($this->cleaned_data['commit']); $patch->commit = self::findCommit($this->cleaned_data['commit']);
$patch->patch = $this->cleaned_data['patch']; $patch->patch = $this->cleaned_data['patch'];
$patch->create(); $patch->create();
// Send create notification $patch->notify($this->project->getConf());
if ('' != $this->project->getConf()->getVal('review_notification_email', '')) {
$context = new Pluf_Template_Context(
array(
'review' => $review,
'patch' => $patch,
'comments' => array(),
'project' => $this->project,
'url_base' => Pluf::f('url_base'),
)
);
$tmpl = new Pluf_Template('idf/review/review-created-email.txt');
$text_email = $tmpl->render($context);
$email = new Pluf_Mail(Pluf::f('from_email'),
$this->project->getConf()->getVal('review_notification_email'),
sprintf(__('New Code Review %s - %s (%s)'),
$review->id, $review->summary, $this->project->shortname));
$email->addTextMessage($text_email);
$email->sendMail();
}
return $review; return $review;
} }

View File

@ -93,6 +93,6 @@ class IDF_Form_ReviewFileComment extends Pluf_Form
} }
$this->patch->get_review()->update(); // reindex and put up in $this->patch->get_review()->update(); // reindex and put up in
// the list. // the list.
return $this->patch; return $bc;
} }
} }

View File

@ -175,21 +175,7 @@ class IDF_Form_Upload extends Pluf_Form
$upload->setAssoc($tag); $upload->setAssoc($tag);
} }
// Send the notification // Send the notification
if ('' != $this->project->getConf()->getVal('downloads_notification_email', '')) { $upload->notify($this->project->getConf());
$context = new Pluf_Template_Context(
array('file' => $upload,
'urlfile' => $upload->getAbsoluteUrl($this->project),
'project' => $this->project,
'tags' => $upload->get_tags_list(),
));
$tmpl = new Pluf_Template('idf/downloads/download-created-email.txt');
$text_email = $tmpl->render($context);
$email = new Pluf_Mail(Pluf::f('from_email'), $this->project->getConf()->getVal('downloads_notification_email'),
sprintf(__('New download - %s (%s)'),
$upload->summary, $this->project->shortname));
$email->addTextMessage($text_email);
$email->sendMail();
}
return $upload; return $upload;
} }
} }

View File

@ -199,25 +199,7 @@ Add your content here. Format your content with:
$rev->submitter = $this->user; $rev->submitter = $this->user;
$rev->summary = __('Initial page creation'); $rev->summary = __('Initial page creation');
$rev->create(); $rev->create();
// send the notification $rev->notify($this->project->getConf());
if ('' != $this->project->getConf()->getVal('wiki_notification_email', '')) {
$context = new Pluf_Template_Context(
array(
'page' => $page,
'rev' => $rev,
'project' => $this->project,
'url_base' => Pluf::f('url_base'),
)
);
$tmpl = new Pluf_Template('idf/wiki/wiki-created-email.txt');
$text_email = $tmpl->render($context);
$email = new Pluf_Mail(Pluf::f('from_email'),
$this->project->getConf()->getVal('wiki_notification_email'),
sprintf(__('New Documentation Page %s - %s (%s)'),
$page->title, $page->summary, $this->project->shortname));
$email->addTextMessage($text_email);
$email->sendMail();
}
return $page; return $page;
} }
} }

View File

@ -236,25 +236,7 @@ class IDF_Form_WikiUpdate extends Pluf_Form
$rev->summary = $this->cleaned_data['comment']; $rev->summary = $this->cleaned_data['comment'];
$rev->changes = $changes; $rev->changes = $changes;
$rev->create(); $rev->create();
// send the notification $rev->notify($this->project->getConf(), false);
if ('' != $this->project->getConf()->getVal('wiki_notification_email', '')) {
$context = new Pluf_Template_Context(
array(
'page' => $this->page,
'rev' => $rev,
'project' => $this->project,
'url_base' => Pluf::f('url_base'),
)
);
$tmpl = new Pluf_Template('idf/wiki/wiki-updated-email.txt');
$text_email = $tmpl->render($context);
$email = new Pluf_Mail(Pluf::f('from_email'),
$this->project->getConf()->getVal('wiki_notification_email'),
sprintf(__('Documentation Page Changed %s - %s (%s)'),
$this->page->title, $this->page->summary, $this->project->shortname));
$email->addTextMessage($text_email);
$email->sendMail();
}
return $this->page; return $this->page;
} }
} }

View File

@ -227,4 +227,93 @@ class IDF_Issue extends Pluf_Model
'content' => $content, 'content' => $content,
'date' => $date)); 'date' => $date));
} }
/**
* Notification of change of the object.
*
* For the moment, only email, but one can add webhooks later.
*
* Usage:
* <pre>
* $this->notify($conf); // Notify the creation
* $this->notify($conf, false); // Notify the update of the object
* </pre>
*
* @param IDF_Conf Current configuration
* @param bool Creation (true)
*/
public function notify($conf, $create=true)
{
$prj = $this->get_project();
$to_email = array();
if ('' != $conf->getVal('issues_notification_email', '')) {
$langs = Pluf::f('languages', array('en'));
$to_email[] = array($conf->getVal('issues_notification_email'),
$langs[0]);
}
$current_locale = Pluf_Translation::getLocale();
if ($create) {
if (null != $this->get_owner() and $this->owner != $this->submitter) {
$to_email[] = array($this->get_owner()->email,
$this->get_owner()->language);
}
$comments = $this->get_comments_list(array('order' => 'id ASC'));
$context = new Pluf_Template_Context(
array(
'issue' => $this,
'comment' => $comments[0],
'project' => $prj,
'url_base' => Pluf::f('url_base'),
)
);
foreach ($to_email as $email_lang) {
Pluf_Translation::loadSetLocale($email_lang[1]);
$email = new Pluf_Mail(Pluf::f('from_email'), $email_lang[0],
sprintf(__('Issue %s - %s (%s)'),
$this->id, $this->summary, $prj->shortname));
$tmpl = new Pluf_Template('idf/issues/issue-created-email.txt');
$email->addTextMessage($tmpl->render($context));
$email->sendMail();
}
} else {
$comments = $this->get_comments_list(array('order' => 'id DESC'));
foreach ($this->get_interested_list() as $interested) {
$email_lang = array($interested->email,
$interested->language);
if (!in_array($email_lang, $to_email)) {
$to_email[] = $email_lang;
}
}
$email_lang = array($this->get_submitter()->email,
$this->get_submitter()->language);
if (!in_array($email_lang, $to_email)) {
$to_email[] = $email_lang;
}
if (null != $this->get_owner()) {
$email_lang = array($this->get_owner()->email,
$this->get_owner()->language);
if (!in_array($email_lang, $to_email)) {
$to_email[] = $email_lang;
}
}
$context = new Pluf_Template_Context(
array(
'issue' => $this,
'comments' => $comments,
'project' => $prj,
'url_base' => Pluf::f('url_base'),
));
foreach ($to_email as $email_lang) {
Pluf_Translation::loadSetLocale($email_lang[1]);
$email = new Pluf_Mail(Pluf::f('from_email'), $email_lang[0],
sprintf(__('Updated Issue %s - %s (%s)'),
$this->id, $this->summary, $prj->shortname));
$tmpl = new Pluf_Template('idf/issues/issue-updated-email.txt');
$email->addTextMessage($tmpl->render($context));
$email->sendMail();
}
}
Pluf_Translation::loadSetLocale($current_locale);
}
} }

View File

@ -140,4 +140,58 @@ class IDF_Review_Comment extends Pluf_Model
{ {
return ''; return '';
} }
/**
* Notify of the update of the review.
*
*
* @param IDF_Conf Current configuration
* @param bool Creation (true)
*/
public function notify($conf, $create=true)
{
$patch = $this->get_patch();
$review = $patch->get_review();
$prj = $review->get_project();
$to_email = array();
if ('' != $conf->getVal('review_notification_email', '')) {
$langs = Pluf::f('languages', array('en'));
$to_email[] = array($conf->getVal('issues_notification_email'),
$langs[0]);
}
$current_locale = Pluf_Translation::getLocale();
$reviewers = $review->getReviewers();
if (!Pluf_Model_InArray($review->get_submitter(), $reviewers)) {
$reviewers[] = $review->get_submitter();
}
$comments = $patch->getFileComments(array('order' => 'id DESC'));
$context = new Pluf_Template_Context(
array(
'review' => $review,
'patch' => $patch,
'comments' => $comments,
'project' => $prj,
'url_base' => Pluf::f('url_base'),
)
);
// build the list of emails and lang
foreach ($reviewers as $user) {
$email_lang = array($user->email,
$user->language);
if (!in_array($email_lang, $to_email)) {
$to_email[] = $email_lang;
}
}
$tmpl = new Pluf_Template('idf/review/review-updated-email.txt');
foreach ($to_email as $email_lang) {
Pluf_Translation::loadSetLocale($email_lang[1]);
$email = new Pluf_Mail(Pluf::f('from_email'), $email_lang[0],
sprintf(__('Updated Code Review %s - %s (%s)'),
$review->id, $review->summary, $prj->shortname));
$email->addTextMessage($tmpl->render($context));
$email->sendMail();
}
Pluf_Translation::loadSetLocale($current_locale);
}
} }

View File

@ -138,4 +138,35 @@ class IDF_Review_Patch extends Pluf_Model
{ {
return ''; return '';
} }
public function notify($conf, $create=true)
{
if ('' == $conf->getVal('review_notification_email', '')) {
return;
}
$current_locale = Pluf_Translation::getLocale();
$langs = Pluf::f('languages', array('en'));
Pluf_Translation::loadSetLocale($langs[0]);
$context = new Pluf_Template_Context(
array(
'review' => $this->get_review(),
'patch' => $this,
'comments' => array(),
'project' => $this->get_review()->get_project(),
'url_base' => Pluf::f('url_base'),
)
);
$tmpl = new Pluf_Template('idf/review/review-created-email.txt');
$text_email = $tmpl->render($context);
$email = new Pluf_Mail(Pluf::f('from_email'),
$conf->getVal('review_notification_email'),
sprintf(__('New Code Review %s - %s (%s)'),
$this->get_review()->id,
$this->get_review()->summary,
$this->get_review()->get_project()->shortname));
$email->addTextMessage($text_email);
$email->sendMail();
Pluf_Translation::loadSetLocale($current_locale);
}
} }

View File

@ -218,4 +218,38 @@ class IDF_Upload extends Pluf_Model
'content' => $content, 'content' => $content,
'date' => $date)); 'date' => $date));
} }
/**
* Notification of change of the object.
*
* @param IDF_Conf Current configuration
* @param bool Creation (true)
*/
public function notify($conf, $create=true)
{
if ('' == $conf->getVal('downloads_notification_email', '')) {
return;
}
$current_locale = Pluf_Translation::getLocale();
$langs = Pluf::f('languages', array('en'));
Pluf_Translation::loadSetLocale($langs[0]);
$context = new Pluf_Template_Context(
array('file' => $this,
'urlfile' => $this->getAbsoluteUrl($this->get_project()),
'project' => $this->get_project(),
'tags' => $this->get_tags_list(),
));
$tmpl = new Pluf_Template('idf/downloads/download-created-email.txt');
$text_email = $tmpl->render($context);
$email = new Pluf_Mail(Pluf::f('from_email'),
$conf->getVal('downloads_notification_email'),
sprintf(__('New download - %s (%s)'),
$this->summary,
$this->get_project()->shortname));
$email->addTextMessage($text_email);
$email->sendMail();
Pluf_Translation::loadSetLocale($current_locale);
}
} }

View File

@ -175,30 +175,7 @@ class IDF_Views_Issue
$issue = $form->save(); $issue = $form->save();
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Issue::view', $url = Pluf_HTTP_URL_urlForView('IDF_Views_Issue::view',
array($prj->shortname, $issue->id)); array($prj->shortname, $issue->id));
$to_emails = array(); $issue->notify($request->conf);
if (null != $issue->get_owner() and $issue->owner != $issue->submitter) {
$to_emails[] = $issue->get_owner()->email;
}
if ('' != $request->conf->getVal('issues_notification_email', '')) {
$to_emails[] = $request->conf->getVal('issues_notification_email', '');
}
foreach ($to_emails as $oemail) {
$comments = $issue->get_comments_list(array('order' => 'id ASC'));
$context = new Pluf_Template_Context(
array(
'issue' => $issue,
'comment' => $comments[0],
'project' => $prj,
'url_base' => Pluf::f('url_base'),
)
);
$email = new Pluf_Mail(Pluf::f('from_email'), $oemail,
sprintf(__('Issue %s - %s (%s)'),
$issue->id, $issue->summary, $prj->shortname));
$tmpl = new Pluf_Template('idf/issues/issue-created-email.txt');
$email->addTextMessage($tmpl->render($context));
$email->sendMail();
}
if ($api) return $issue; if ($api) return $issue;
$request->user->setMessage(sprintf(__('<a href="%s">Issue %d</a> has been created.'), $url, $issue->id)); $request->user->setMessage(sprintf(__('<a href="%s">Issue %d</a> has been created.'), $url, $issue->id));
return new Pluf_HTTP_Response_Redirect($url); return new Pluf_HTTP_Response_Redirect($url);
@ -290,45 +267,11 @@ class IDF_Views_Issue
$request->FILES), $request->FILES),
$params); $params);
if (!isset($request->POST['preview']) && $form->isValid()) { if (!isset($request->POST['preview']) && $form->isValid()) {
$issue = $form->save(); $issue = $form->save(); // Note, should return the
// last comment
$issue->notify($request->conf, false);
$comments = $issue->get_comments_list(array('order' => 'id DESC')); $comments = $issue->get_comments_list(array('order' => 'id DESC'));
$url .= '#ic' . $comments[0]->id; $url .= '#ic' . $comments[0]->id;
// Get the list of interested person + owner + submitter
if (!Pluf_Model_InArray($issue->get_submitter(), $interested)) {
$interested[] = $issue->get_submitter();
}
if (null != $issue->get_owner() and
!Pluf_Model_InArray($issue->get_owner(), $interested)) {
$interested[] = $issue->get_owner();
}
$context = new Pluf_Template_Context(
array(
'issue' => $issue,
'comments' => $comments,
'project' => $prj,
'url_base' => Pluf::f('url_base'),
));
$tmpl = new Pluf_Template('idf/issues/issue-updated-email.txt');
$text_email = $tmpl->render($context);
$email = new Pluf_Mail_Batch(Pluf::f('from_email'));
$to_emails = array();
foreach ($interested as $user) {
if ($user->id != $request->user->id) {
$to_emails[] = $user->email;
}
}
if ('' != $request->conf->getVal('issues_notification_email', '')) {
$to_emails[] = $request->conf->getVal('issues_notification_email');
}
foreach ($to_emails as $oemail) {
$email->setSubject(sprintf(__('Updated Issue %s - %s (%s)'),
$issue->id, $issue->summary, $prj->shortname));
$email->setTo($oemail);
$email->setReturnPath(Pluf::f('from_email'));
$email->addTextMessage($text_email);
$email->sendMail();
}
$email->close();
$request->user->setMessage(sprintf(__('<a href="%s">Issue %d</a> has been updated.'), $url, $issue->id)); $request->user->setMessage(sprintf(__('<a href="%s">Issue %d</a> has been updated.'), $url, $issue->id));
return new Pluf_HTTP_Response_Redirect($url); return new Pluf_HTTP_Response_Redirect($url);
} }

View File

@ -152,49 +152,14 @@ class IDF_Views_Review
'patch' => $patch, 'patch' => $patch,
)); ));
if ($form->isValid()) { if ($form->isValid()) {
$patch = $form->save(); $review_comment = $form->save();
$review = $patch->get_review(); $review = $patch->get_review();
$urlr = Pluf_HTTP_URL_urlForView('IDF_Views_Review::view', $urlr = Pluf_HTTP_URL_urlForView('IDF_Views_Review::view',
array($prj->shortname, $review->id)); array($prj->shortname, $review->id));
$request->user->setMessage(sprintf(__('Your <a href="%s">code review %d</a> has been published.'), $urlr, $review->id)); $request->user->setMessage(sprintf(__('Your <a href="%s">code review %d</a> has been published.'), $urlr, $review->id));
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Review::index', $url = Pluf_HTTP_URL_urlForView('IDF_Views_Review::index',
array($prj->shortname)); array($prj->shortname));
// Get the list of reviewers + submitter $review_comment->notify($request->conf);
$reviewers = $review->getReviewers();
if (!Pluf_Model_InArray($review->get_submitter(), $reviewers)) {
$reviewers[] = $review->get_submitter();
}
$comments = $patch->getFileComments(array('order' => 'id DESC'));
$context = new Pluf_Template_Context(
array(
'review' => $review,
'patch' => $patch,
'comments' => $comments,
'project' => $prj,
'url_base' => Pluf::f('url_base'),
)
);
$tmpl = new Pluf_Template('idf/review/review-updated-email.txt');
$text_email = $tmpl->render($context);
$email = new Pluf_Mail_Batch(Pluf::f('from_email'));
$to_emails = array();
foreach ($reviewers as $user) {
if ($user->id != $request->user->id) {
$to_emails[] = $user->email;
}
}
if ('' != $request->conf->getVal('review_notification_email', '')) {
$to_emails[] = $request->conf->getVal('review_notification_email');
}
foreach ($to_emails as $oemail) {
$email->setSubject(sprintf(__('Updated Code Review %s - %s (%s)'),
$review->id, $review->summary, $prj->shortname));
$email->setTo($oemail);
$email->setReturnPath(Pluf::f('from_email'));
$email->addTextMessage($text_email);
$email->sendMail();
}
$email->close();
return new Pluf_HTTP_Response_Redirect($url); return new Pluf_HTTP_Response_Redirect($url);
} }
} else { } else {

View File

@ -218,4 +218,60 @@ class IDF_WikiRevision extends Pluf_Model
'date' => $date)); 'date' => $date));
} }
/**
* Notification of change of a WikiPage.
*
* The content of a WikiPage is in the IDF_WikiRevision object,
* this is why we send the notificatin from there. This means that
* when the create flag is set, this is for the creation of a
* wikipage and not, for the addition of a new revision.
*
* Usage:
* <pre>
* $this->notify($conf); // Notify the creation of a wiki page
* $this->notify($conf, false); // Notify the update of the page
* </pre>
*
* @param IDF_Conf Current configuration
* @param bool Creation (true)
*/
public function notify($conf, $create=true)
{
if ('' == $conf->getVal('wiki_notification_email', '')) {
return;
}
$current_locale = Pluf_Translation::getLocale();
$langs = Pluf::f('languages', array('en'));
Pluf_Translation::loadSetLocale($langs[0]);
$context = new Pluf_Template_Context(
array(
'page' => $this->get_wikipage(),
'rev' => $this,
'project' => $this->get_wikipage()->get_project(),
'url_base' => Pluf::f('url_base'),
)
);
if ($create) {
$template = 'idf/wiki/wiki-created-email.txt';
$title = sprintf(__('New Documentation Page %s - %s (%s)'),
$this->get_wikipage()->title,
$this->get_wikipage()->summary,
$this->get_wikipage()->get_project()->shortname);
} else {
$template = 'idf/wiki/wiki-updated-email.txt';
$title = sprintf(__('Documentation Page Changed %s - %s (%s)'),
$this->get_wikipage()->title,
$this->get_wikipage()->summary,
$this->get_wikipage()->get_project()->shortname);
}
$tmpl = new Pluf_Template($template);
$text_email = $tmpl->render($context);
$email = new Pluf_Mail(Pluf::f('from_email'),
$conf->getVal('wiki_notification_email'),
$title);
$email->addTextMessage($text_email);
$email->sendMail();
Pluf_Translation::loadSetLocale($current_locale);
}
} }

View File

@ -3,6 +3,7 @@
{blocktrans}The following review has been created:{/blocktrans} {blocktrans}The following review has been created:{/blocktrans}
{$review.id} - {$review.summary|safe} {$review.id} - {$review.summary|safe}
{trans 'Project:'} {$project.name|safe} {trans 'Project:'} {$project.name|safe}
{trans 'Status:'} {$review.get_status.name} {trans 'Status:'} {$review.get_status.name}
{trans 'Reported by:'} {$review.get_submitter|safe} {trans 'Reported by:'} {$review.get_submitter|safe}

View File

@ -15,7 +15,6 @@
{foreach $comments as $c}{assign $who = $c.get_comment().get_submitter()}# {blocktrans}By {$who|safe}, {$c.creation_dtime|date}, on file: {foreach $comments as $c}{assign $who = $c.get_comment().get_submitter()}# {blocktrans}By {$who|safe}, {$c.creation_dtime|date}, on file:
{$c.cfile|safe} {$c.cfile|safe}
{/blocktrans} {/blocktrans}
{$c.content|safe} {$c.content|safe}
{/foreach} {/foreach}

View File

@ -3,6 +3,7 @@
{blocktrans}A new commit has been created:{/blocktrans} {blocktrans}A new commit has been created:{/blocktrans}
{$c.summary|safe} {$c.summary|safe}
{trans 'Commit:'} {$c.scm_id|safe} {trans 'Commit:'} {$c.scm_id|safe}
{trans 'Project:'} {$project.name|safe} {trans 'Project:'} {$project.name|safe}
{trans 'Created by:'} {$c.get_author|safe} {trans 'Created by:'} {$c.get_author|safe}