aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntonio Gallo <tonicucoz@gmail.com>2011-01-26 03:05:35 +0000
committerAntonio Gallo <tonicucoz@gmail.com>2011-01-26 03:05:35 +0000
commitf51c3d89d5118e45914a1de7f6bdb03dd559e32e (patch)
treec76ee67ddb62723503711175e406442b72c55103
parent1ddc3583a205edd248a53fcf65e3fbad3664f85f (diff)
added mail notifications for talk messages
-rw-r--r--h-source/Application/Controllers/MyController.php2
-rw-r--r--h-source/Application/Include/myFunctions.php20
-rw-r--r--h-source/Application/Include/params.php27
-rw-r--r--h-source/Application/Models/HardwareModel.php5
-rw-r--r--h-source/Application/Models/NorepeatModel.php35
-rw-r--r--h-source/Application/Models/ProfileModel.php8
-rw-r--r--h-source/Application/Models/TalkModel.php57
-rw-r--r--h-source/tables.sql3
8 files changed, 115 insertions, 42 deletions
diff --git a/h-source/Application/Controllers/MyController.php b/h-source/Application/Controllers/MyController.php
index c2b715f..d1e346c 100644
--- a/h-source/Application/Controllers/MyController.php
+++ b/h-source/Application/Controllers/MyController.php
@@ -158,7 +158,7 @@ class MyController extends BaseController
if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect($this->controller.'/home/'.$this->lang,2,'wrong token..');
- $this->m['ProfileModel']->setFields('real_name,website,where_you_are,birth_date,fav_distro,projects,publish_mail,description','sanitizeAll');
+ $this->m['ProfileModel']->setFields('real_name,website,where_you_are,birth_date,fav_distro,projects,publish_mail,send_notification,description','sanitizeAll');
$clean['id_user'] = (int)$this->s['registered']->status['id_user'];
diff --git a/h-source/Application/Include/myFunctions.php b/h-source/Application/Include/myFunctions.php
index 7e509cd..5c64317 100644
--- a/h-source/Application/Include/myFunctions.php
+++ b/h-source/Application/Include/myFunctions.php
@@ -392,3 +392,23 @@ function goToModeratedItem( $row = array() )
}
return 'http://'.DOMAIN_NAME.'/'.$url;
}
+
+function getUrlsFromIdHard($id_hard)
+{
+ $clean['id_hard'] = (int)$id_hard;
+
+ $urlView = "http://".DOMAIN_NAME;
+ $urlTalk = "http://".DOMAIN_NAME;
+
+ $hard = new HardwareModel();
+ $res = $hard->select('type,model')->where(array('id_hard'=>$clean['id_hard']))->send();
+ if (count($res) > 0)
+ {
+ $urlView = "http://".DOMAIN_NAME."/".MyStrings::$reverse[$res[0]['hardware']['type']]."/view/".Lang::$current."/".$clean['id_hard']."/".encodeUrl($res[0]['hardware']['model']);
+
+ $urlTalk = "http://".DOMAIN_NAME."/".MyStrings::$reverse[$res[0]['hardware']['type']]."/talk/".Lang::$current."/".$clean['id_hard'];
+ }
+
+ return array('urlView'=>$urlView,'urlTalk'=>$urlTalk);
+
+} \ No newline at end of file
diff --git a/h-source/Application/Include/params.php b/h-source/Application/Include/params.php
index 7547643..1d3533b 100644
--- a/h-source/Application/Include/params.php
+++ b/h-source/Application/Include/params.php
@@ -141,5 +141,32 @@ class Account
}
}
+
+ static public function sendTalkNotice($who,$e_mails,$id_hard)
+ {
+ require_once (ROOT.'/External/swiftmailer/lib/swift_required.php');
+
+ $who = sanitizeAll($who);
+ $id_hard = (int)$id_hard;
+
+ $siteName = Website::$generalName;
+ $siteMail = Website::$generalMail;
+
+ $urls = getUrlsFromIdHard($id_hard);
+
+ $mess = "$who has added a message to the talk page of a device you have contributed to maintain at $siteName\n\nThe whole conversation is here:\n\n".$urls['urlTalk']."\n\nThe device page is here:\n\n".$urls['urlView']."\n\nBest regards\nthe ".Website::$projectName." team\n\nP.S: you can disable the mail notifications in the profile page of your control panel";
+
+ $message = Swift_Message::newInstance()->setSubject("$who sent a notice to your attention")->setFrom(array($siteMail => $siteName))->setTo($e_mails)->setBody($mess);
+
+ //Create the Transport
+ $transport = Swift_SmtpTransport::newInstance(Website::$mailServer, 25)->setUsername(Website::$generalMail)->setPassword(Website::$mailPassword);
+
+ //Create the Mailer using your created Transport
+ $mailer = Swift_Mailer::newInstance($transport);
+
+ //Send the message
+ $result = $mailer->batchSend($message);
+
+ }
} \ No newline at end of file
diff --git a/h-source/Application/Models/HardwareModel.php b/h-source/Application/Models/HardwareModel.php
index fb41fa3..d4c9a47 100644
--- a/h-source/Application/Models/HardwareModel.php
+++ b/h-source/Application/Models/HardwareModel.php
@@ -39,8 +39,9 @@ class HardwareModel extends Model_Map {
$this->_tables='hardware,regusers,hardware_users';
$this->_idFields='id_hard,id_user';
$this->_where=array(
- 'type' => 'hardware',
- 'username' => 'regusers',
+ 'type' => 'hardware',
+ 'username' => 'regusers',
+ 'id_user' => 'regusers',
'has_confirmed' => 'regusers',
'deleted' => 'regusers',
'-deleted' => 'hardware'
diff --git a/h-source/Application/Models/NorepeatModel.php b/h-source/Application/Models/NorepeatModel.php
deleted file mode 100644
index 39938b6..0000000
--- a/h-source/Application/Models/NorepeatModel.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-// h-source, a web software to build a community of people that want to share their hardware information.
-// Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt)
-//
-// This file is part of h-source
-//
-// h-source 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.
-//
-// h-source 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 h-source. If not, see <http://www.gnu.org/licenses/>.
-
-if (!defined('EG')) die('Direct access not allowed!');
-
-class NorepeatModel extends Model_Tree {
-
- public function insert()
- {
- parent::insert();
- if ($this->queryResult)
- {
- header('Refresh: 0;url=http://'.DOMAIN_NAME.$_SERVER['REQUEST_URI']);
- exit;
- }
- }
-
-} \ No newline at end of file
diff --git a/h-source/Application/Models/ProfileModel.php b/h-source/Application/Models/ProfileModel.php
index 6c0071f..c8818b4 100644
--- a/h-source/Application/Models/ProfileModel.php
+++ b/h-source/Application/Models/ProfileModel.php
@@ -35,7 +35,8 @@ class ProfileModel extends Model_Tree {
$this->softConditions['update'] = array(
"checkLength|90" => "real_name,where_you_are,fav_distro,birth_date,website|the fields 'real name', 'where_you_are', 'favorite distro', 'website' and 'birthdate' don't have to have more than 90 characters",
"checkLength|1000" => "projects,description|the fields 'projects' and 'description' don't have to have more than 1000 characters",
- "checkIsStrings|no,yes" => "publish_mail"
+ "checkIsStrings|no,yes" => "publish_mail",
+ "+checkIsStrings|no,yes" => "send_notification"
);
parent::__construct();
@@ -58,6 +59,11 @@ class ProfileModel extends Model_Tree {
'options' => 'no,yes',
'labelString'=> 'Would you like to publish your e-mail address?'
),
+ 'send_notification' => array(
+ 'type' => 'Select',
+ 'options' => 'yes,no',
+ 'labelString'=> 'Would you like to receive mail notifications?'
+ ),
'description' => array(
'type' => 'Textarea',
'labelString'=> 'Your description'
diff --git a/h-source/Application/Models/TalkModel.php b/h-source/Application/Models/TalkModel.php
index d6d935b..e29e073 100644
--- a/h-source/Application/Models/TalkModel.php
+++ b/h-source/Application/Models/TalkModel.php
@@ -20,14 +20,16 @@
if (!defined('EG')) die('Direct access not allowed!');
-class TalkModel extends NorepeatModel {
+class TalkModel extends Model_Tree {
public function __construct() {
$this->_tables = 'talk';
$this->_idFields = 'id_talk';
$this->_where=array(
- 'id_hard' => 'talk'
+ 'id_hard' => 'talk',
+ 'has_confirmed' => 'regusers',
+ '-deleted' => 'regusers',
);
$this->orderBy = 'talk.id_talk desc';
@@ -41,6 +43,57 @@ class TalkModel extends NorepeatModel {
parent::__construct();
}
+ public function insert()
+ {
+ if (parent::insert())
+ {
+ if (strcmp($this->values['id_hard'],0) !== 0)
+ {
+ $clean['id_hard'] = (int)$this->values['id_hard'];
+ $clean['created_by'] = (int)$this->values['created_by'];
+
+ $hard = new HardwareModel();
+ $users = $hard->select('username,e_mail')
+ ->where(array('id_hard'=>$clean['id_hard'],'has_confirmed'=>0,'deleted'=>'no'))
+ ->toList('regusers.username','regusers.e_mail')
+ ->send('Boxes');
+
+ $talkUsers = $this->select('username,e_mail')
+ ->from('talk inner join regusers')
+ ->on('talk.created_by = regusers.id_user')
+ ->where(array('id_hard'=>$clean['id_hard'],'has_confirmed'=>0,'-deleted'=>'no'))
+ ->toList('regusers.username','regusers.e_mail')
+ ->send();
+
+ $allUsers = array_merge($users,$talkUsers);
+
+ $userObj = new UsersModel();
+ $myName = $userObj->getUser($clean['created_by']);
+
+ $arrayE = new ArrayExt();
+ $fusers = $arrayE->subsetComplementary($allUsers,$myName);
+
+ //remove users that do not want the email notification
+ $inString = "'".implode("','",array_keys($fusers))."'";
+ $profile = new ProfileModel();
+ $ffusers = $profile->select('username,e_mail')
+ ->from('regusers inner join profile')
+ ->on('regusers.id_user = profile.created_by')
+ ->where(array('send_notification'=>'yes','username'=>"in($inString)"))
+ ->toList('regusers.username','regusers.e_mail')
+ ->send();
+
+ $ffusers = array_flip($ffusers);
+
+ //send the notice
+ Account::sendTalkNotice($myName,$ffusers,$clean['id_hard']);
+
+ header('Refresh: 0;url=http://'.DOMAIN_NAME.$_SERVER['REQUEST_URI']);
+ exit;
+ }
+ }
+ }
+
public $formStruct = array(
'entries' => array(
'title' => array(),
diff --git a/h-source/tables.sql b/h-source/tables.sql
index 8d38e81..a447d71 100644
--- a/h-source/tables.sql
+++ b/h-source/tables.sql
@@ -159,7 +159,8 @@ create table profile (
projects text CHARACTER SET utf8 not null ,
publish_mail char(4) not null default 'no',
description text CHARACTER SET utf8 not null,
- website varchar(100) CHARACTER SET utf8 not null
+ website varchar(100) CHARACTER SET utf8 not null,
+ send_notification char(4) not null default 'yes'
)engine=innodb;
create table issues (