| Server IP : 54.36.91.62 / Your IP : 216.73.217.111 Web Server : Apache System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : coopiak ( 151928) PHP Version : 8.3.23 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/coopiak/amisdesseniors-fr/components/com_community/libraries/ |
Upload File : |
<?php
/**
* @copyright (C) 2013 iJoomla, Inc. - All rights reserved.
* @license GNU General Public License, version 2 (http://www.gnu.org/licenses/gpl-2.0.html)
* @author iJoomla.com <webmaster@ijoomla.com>
* @url https://www.jomsocial.com/license-agreement
* The PHP code portions are distributed under the GPL license. If not otherwise stated, all images, manuals, cascading style sheets, and included JavaScript *are NOT GPL, and are released under the IJOOMLA Proprietary Use License v1.0
* More info at https://www.jomsocial.com/license-agreement
*/
use Joomla\CMS\Uri\Uri;
defined('_JEXEC') or die('Restricted access');
//CFactory::load( 'libraries' , 'template' );
class CNotification {
/**
* Adds notification data into the mailq table
* @param $command
* @param $actorId
* @param $recipients
* @param $subject
* @param $body
* @param string $templateFile
* @param string $mailParams
* @param bool $sendEmail
* @param string $favicon
* @param string $altSubject
* @param bool $skipCreator , Skip the email to creator
*/
static public function add($command, $actorId, $recipients, $subject, $body, $templateFile = '', $mailParams = '', $sendEmail = true, $favicon = '', $altSubject = '', $skipCreator = true) {
// Need to make sure actor is NULL, so default user will be returned
// from getUser
if (empty($actorId)) {
$actorId = null;
}
$mailq = CFactory::getModel('Mailq');
$actor = CFactory::getUser($actorId);
$config = CFactory::getConfig();
if(is_object($mailParams) && strstr($mailParams->get('url'), Uri::root()) === false){
$mailParams->set('url', CRoute::_(Uri::root().$mailParams->get('url')));
}
if (!is_array($recipients)) {
$recipientsArray = array();
$recipientsArray[] = $recipients;
} else {
$recipientsArray = $recipients;
}
$contents = '';
// If template file is given, we shall extract the email from the template file.
if (!empty($templateFile)) {
$tmpl = new CTemplate();
preg_match('/email/i', $templateFile, $matches);
if (empty($matches)) {
$templateFile = 'email.' . $templateFile;
$templateFile .= $config->get('htmlemail') ? '.html' : '.text';
}
if (is_object($mailParams)) {
$dataArray = $mailParams->toArray();
foreach ($dataArray as $key => $value) {
$tmpl->set($key, $value);
}
} elseif (is_array($mailParams)) {
foreach ($mailParams as $key => $val)
$tmpl->set($key, $val);
}
$contents = $tmpl->fetch($templateFile);
} else {
$contents = $body;
}
/* In case contents be empty ( template file missed ) than we use body content */
if (trim($contents == ''))
$contents = $body;
$cmdData = explode('_', $command);
//check and add some default tags to params
if (is_object($mailParams)) {
if (is_null($mailParams->get('actor', null))) {
$mailParams->set('actor', $actor->getDisplayName());
}
if (is_null($mailParams->get('actor_url', null))) {
$mailParams->set('actor_url', 'index.php?option=com_community&view=profile&userid=' . $actor->id);
}
}
$notificationTypes = new CNotificationTypes();
if (empty($recipientsArray)) {
return;
}
$savedIds = array();
//prevent sending duplicate notification to the same users
$recipientsArray = array_unique($recipientsArray);
// check for privacy setting for each user
foreach ($recipientsArray as $recipient) {
//we process the receipient emails address differently from the receipient id.
$recipientEmail = '';
$recipientName = '';
$sendIt = false;
if (CValidateHelper::email($recipient)) {
// Check if the recipient email same with actor email
$self = self::filterActor($actorId, $recipient);
// If same, skip to next email
if ($self && $skipCreator) {
continue;
}
$recipientName = '';
$sendIt = true;
$recipientEmail = $recipient;
} else {
$userTo = CFactory::getUser($recipient);
// Check if the recipient email same with actor email
$self = self::filterActor($actorId, $userTo->email);
// If same, skip to next email
if ($self && $skipCreator) {
continue;
}
$params = $userTo->getParams();
$recipientName = $userTo->getDisplayName();
$recipientEmail = $userTo->email;
$sendIt = false;
if (isset($cmdData[1])) {
switch ($cmdData[0]) {
case 'pages':
switch ($cmdData[1]) {
case 'invite':
$sendIt = $params->get('etype_pages_invite', true);
break;
case 'create':
$sendIt = $params->get('etype_pages_create_event', true);
break;
case 'like':
$sendIt = $params->get('etype_pages_like', true);
break;
}
break;
case 'comments':
switch ($cmdData[1]) {
case 'like':
$sendIt = $params->get('etype_comments_like', true);
break;
}
break;
case 'inbox':
switch ($cmdData[1]) {
case 'create':
$sendIt = $params->get('etype_inbox_create_message', true);
break;
}
break;
case 'photos':
switch($cmdData[1]){
case 'like' :
$sendIt = $params->get('etype_photos_like', true);
break;
case 'submit' :
$sendIt = $params->get('etype_photos_submit_wall', true);
break;
case 'tagging' :
$sendIt = true;
break;
}
break;
case 'videos':
switch($cmdData[1]){
case 'like' :
$sendIt = $params->get('etype_videos_like', true);
break;
case 'convert' :
$sendIt = $params->get('etype_videos_convert_success', true);
break;
case 'tagging' :
$sendIt = $params->get('etype_videos_tagging', true);
break;
}
break;
case 'groups':
switch($cmdData[1]){
case 'wall':
$sendIt = $params->get('etype_groups_wall_create', true);
break;
case 'invite':
$sendIt = $params->get('etype_groups_invite', true);
break;
case 'create':
$sendIt = $params->get('etype_groups_create_event', true);
break;
case 'discussion':
$sendIt = $params->get('etype_groups_discussion_reply', true);
break;
case 'join':
$sendIt = true;
break;
case 'sendmail' :
$sendIt = $params->get('etype_groups_sendmail', true);
break;
default :
$sendIt = $params->get('etype_'.$command, true);
break;
}
break;
case 'events':
case 'friends':
case 'profile':
// $sendIt = $params->get('notifyEmailSystem');
// break;
case 'system':
$sendIt = $params->get('etype_system_messaging', true);
break;
case 'kunena':
if($cmdData[1] == 'reply') $sendIt = $params->get('etype_kunena_reply', true);
if($cmdData[1] == 'thankyou') $sendIt = $params->get('etype_kunena_thankyou', true);
break;
case 'users':
if ($cmdData[1] == 'tagged') {
if (strlen($params->get('etype_users_tagged')) > 0) {
$sendIt = $params->get('etype_users_tagged', true);
break;
}
}
case 'new':
if ($cmdData[1] == 'follower') $sendIt = $params->get('etype_new_follower', true);
break;
default:
$sendIt = true;
break;
}
}
//add global notification
$notifType = $notificationTypes->getType('', $command);
if (!is_object($notifType)) {
$type = 0;
} else {
$type = $notifType->requiredAction ? '1' : '0';
}
$model = CFactory::getModel('Notification');
$subject = strip_tags($subject,'<a>');
$getNotiId = null;
if($altSubject != ''){
$getNotiId = $model->add($actorId, $recipient, $altSubject, CNotificationTypesHelper::convertNotifId($command), $type, $mailParams);
}else{
$getNotiId = $model->add($actorId, $recipient, $subject, CNotificationTypesHelper::convertNotifId($command), $type, $mailParams);
}
if ($getNotiId) $savedIds[] = $getNotiId;
}
if ($sendIt) {
// Porcess the message and title
$search = array('{actor}', '{target}');
$replace = array($actor->getDisplayName(), $recipientName);
$emailSubject = CString::str_ireplace($search, $replace, $subject);
$body = CString::str_ireplace($search, $replace, $contents);
//inject params value to subject
$params = ( is_object($mailParams) && method_exists($mailParams, 'toString') ) ? $mailParams->toString() : '';
//inject params if this is not user tagging
if($command != 'users_tagged'){
$emailSubject = CContentHelper::injectTags($emailSubject, $params, false);
}
$emailSubject = strip_tags($emailSubject);
$mailq->add($recipientEmail, $emailSubject, $body, $templateFile, $mailParams, 0, CNotificationTypesHelper::convertEmailId($command));
}
}
return $savedIds;
}
/**
* Adds notification data into the mailq table
* */
static public function addMultiple($command, $actorId, $recipients, $subject, $body, $templateFile = '', $mailParams = '', $sendEmail = true, $favicon = '') {
//CFactory::load( 'helpers' , 'validate' );
// Need to make sure actor is NULL, so default user will be returned
// from getUser
if (empty($actorId)) {
$actorId = null;
}
$mailq = CFactory::getModel('Mailq');
$actor = CFactory::getUser($actorId);
$config = CFactory::getConfig();
if (!is_array($recipients)) {
$recipientsArray = array();
$recipientsArray[] = $recipients;
} else {
$recipientsArray = $recipients;
}
$contents = '';
// If template file is given, we shall extract the email from the template file.
if (!empty($templateFile)) {
$tmpl = new CTemplate();
preg_match('/email/i', $templateFile, $matches);
if (empty($matches)) {
$templateFile = 'email.' . $templateFile;
$templateFile .= $config->get('htmlemail') ? '.html' : '.text';
}
if (is_object($mailParams)) {
$dataArray = $mailParams->toArray();
foreach ($dataArray as $key => $value) {
$tmpl->set($key, $value);
}
} elseif (is_array($mailParams)) {
foreach ($mailParams as $key => $val)
$tmpl->set($key, $val);
}
$contents = $tmpl->fetch($templateFile);
} else {
$contents = $body;
}
$cmdData = explode('_', $command);
//check and add some default tags to params
if (is_object($mailParams)) {
if (is_null($mailParams->get('actor', null))) {
$mailParams->set('actor', $actor->getDisplayName());
}
if (is_null($mailParams->get('actor_url', null))) {
$mailParams->set('actor_url', 'index.php?option=com_community&view=profile&userid=' . $actor->id);
}
}
$notificationTypes = new CNotificationTypes();
if (empty($recipientsArray)) {
return;
}
//prevent sending duplicate notification to the same users
$recipientsArray = array_unique($recipientsArray);
// check for privacy setting for each user
foreach ($recipientsArray as $recipient) {
//we process the receipient emails address differently from the receipient id.
$recipientEmail = '';
$recipientName = '';
$sendIt = false;
if (CValidateHelper::email($recipient)) {
// Check if the recipient email same with actor email
$self = self::filterActor($actorId, $recipient);
// If same, skip to next email
if ($self) {
continue;
}
$recipientName = '';
$sendIt = true;
$recipientEmail = $recipient;
} else {
$userTo = CFactory::getUser($recipient);
// Check if the recipient email same with actor email
$self = self::filterActor($actorId, $userTo->email);
// If same, skip to next email
if ($self) {
continue;
}
$params = $userTo->getParams();
$recipientName = $userTo->getDisplayName();
$recipientEmail = $userTo->email;
$sendIt = false;
if (isset($cmdData[1])) {
switch ($cmdData[0]) {
case 'inbox':
case 'photos':
case 'groups':
case 'events':
case 'friends':
case 'profile':
// $sendIt = $params->get('notifyEmailSystem');
// break;
case 'system':
default:
$sendIt = true;
break;
}
}
//add global notification
$notifType = $notificationTypes->getType('', $command);
$type = $notifType->requiredAction ? '1' : '0';
$model = CFactory::getModel('Notification');
$model->add($actorId, $recipient, $subject, CNotificationTypesHelper::convertNotifId($command), $type, $mailParams);
}
if ($sendIt) {
// Porcess the message and title
$search = array('{actor}', '{target}');
$replace = array($actor->getDisplayName(), $recipientName);
$emailSubject = CString::str_ireplace($search, $replace, $subject);
$body = CString::str_ireplace($search, $replace, $contents);
//inject params value to subject
$params = ( is_object($mailParams) && method_exists($mailParams, 'toString') ) ? $mailParams->toString() : '';
$emailSubject = CContentHelper::injectTags($emailSubject, $params, false);
$mailq->addMultiple($recipientEmail, $emailSubject, $body, $templateFile, $mailParams, 0, CNotificationTypesHelper::convertEmailId($command));
}
}
/* have done adding multiple than now do send */
$mailq->send();
}
/**
* Return notification send to the given user
*/
public function get($id) {
$mailqModel = CFactory::getModel('mailq');
$mailers = $mailqModel->get();
}
/**
* Filter actor from send notification email to self
* If the actor email and the recipient email is same return TRUE
*/
static public function filterActor($actorId, $recipientEmail) {
$actor = CFactory::getUser($actorId);
return ( $actor->email == $recipientEmail ) ? true : false;
}
}
/**
* Maintain classname compatibility with JomSocial 1.6 below
*/
class CNotificationLibrary extends CNotification {
}