From f51c3d89d5118e45914a1de7f6bdb03dd559e32e Mon Sep 17 00:00:00 2001 From: Antonio Gallo Date: Wed, 26 Jan 2011 03:05:35 +0000 Subject: added mail notifications for talk messages --- h-source/Application/Models/HardwareModel.php | 5 ++- h-source/Application/Models/NorepeatModel.php | 35 ---------------- h-source/Application/Models/ProfileModel.php | 8 +++- h-source/Application/Models/TalkModel.php | 57 ++++++++++++++++++++++++++- 4 files changed, 65 insertions(+), 40 deletions(-) delete mode 100644 h-source/Application/Models/NorepeatModel.php (limited to 'h-source/Application/Models') 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 @@ -. - -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(), -- cgit v1.2.3