| Server IP : 54.36.91.62 / Your IP : 216.73.217.112 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/nice2/administrator/components/com_djcatalog2/helpers/ |
Upload File : |
<?php
use Joomla\Utilities\ArrayHelper;
/**
* @package DJ-Catalog2
* @copyright Copyright (C) DJ-Extensions.com, All rights reserved.
* @license http://www.gnu.org/licenses GNU/GPL
* @author url: http://dj-extensions.com
* @author email contact@dj-extensions.com
*/
defined('_JEXEC') or die('Restricted access');
use Joomla\CMS\Table\Table;
use Joomla\CMS\Filesystem\Path;
use Joomla\CMS\Factory;
use Joomla\Registry\Registry;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Uri\Uri;
use Joomla\CMS\User\User;
Table::addIncludePath(Path::clean(JPATH_ADMINISTRATOR . '/components/com_djcatalog2/tables'));
require_once JPATH_ROOT . '/administrator/components/com_djcatalog2/helpers/route.php';
require_once JPATH_ROOT . '/administrator/components/com_djcatalog2/helpers/attachment.php';
jimport('joomla.mail.helper');
class DJCatalog2HelperMessenger extends Registry
{
protected static $users = array();
protected static $templates = array();
/**
*
* @param mixed $sender : user's ID (int) or user's email (string) or array
* @param mixed $recipient : user's ID (int) or user's email (string)
* @param array $options : associative array containing additional options such as type of notification (template)
* 'type' => type of message / template
* 'notify_recipient' => true|false, default: true
* 'anonymize' => true|false, default: false
* 'CC' => array,
* 'BCC' => array,
* 'reply_to_email => string
*
* @param array $mergeData : additional data to be used in mail template
*
*/
//public function notify($message, $subject, $recipient, $options = array(), $attachments = array(), $mergeData = array(), $additionalData = null)
public function notify($recipient, $options = array(), $attachments = array(), $mergeData = array(), $additionalData = null)
{
require_once Path::clean(JPATH_ADMINISTRATOR . '/components/com_djcatalog2/helpers/mailer.php');
$params = ComponentHelper::getParams('com_djcatalog2');
$recipient_user = static::getUser($recipient);
if (!$recipient_user) {
$this->setError(Text::_('COM_DJCATALOG2_MESSENGER_ERROR_MISSING_RECIPIENT'));
return false;
}
$template_type = isset($options['type']) ? $options['type'] : false;
if (!$template_type) {
$this->setError(Text::_('COM_DJCATALOG2_MESSENGER_ERROR_MISSING_TEMPLATE'));
return false;
}
$template = static::getTemplate($template_type);
if (empty($template)) {
$this->setError(Text::_('COM_DJCATALOG2_MESSENGER_ERROR_MISSING_TEMPLATE'));
return false;
}
$table = Table::getInstance('Message', 'DJCatalog2Table', array());
$data = array(
'id' => null,
'subject' => '',
'message' => '',
'subject' => null,
'message' => null,
'user_to' => $recipient_user->id,
'recipient_name' => $recipient_user->name,
'recipient_email' => $recipient_user->email,
'additional_data' => $additionalData,
'template_type' => $template_type
);
if (is_array($attachments) && count($attachments) > 0) {
$this->processAttachments($attachments, $data);
}
$mail_data = array(
'recipient_email' => $recipient_user->email,
'recipient_name' => $recipient_user->name,
);
$this->prepareConfigData($mergeData);
Joomla\CMS\Factory::getApplication()->triggerEvent('onDJCatalog2EmailPrepare', array(&$mail_data, &$mergeData, $template, $options));
if (!empty($mergeData) && is_array($mergeData)) {
foreach ($mergeData as $k => $v) {
$val = $v;
if (is_array($v)) {
$val = implode(', ', $v);
} else if (is_object($v)) {
$tmpVal = ArrayHelper::fromObject($v);
if (count($tmpVal)) {
$val = implode(', ', $tmpVal);
} else {
$val = '';
}
}
$mail_data[$k] = $val;
}
}
DJCatalog2HelperMailer::prepare($mail_data, $template);
$data['message'] = $mail_data['message'];
$data['subject'] = $mail_data['subject'];
if (!isset($options['skip_db'])) {
try {
if (isset($options['anonymize']) && $options['anonymize'] == true) {
$data['recipient_email'] = $this->anonymizeEmail($data['recipient_email']);
}
$this->saveMessage($table, $data);
$mail_data['notification_id'] = $table->id;
$mail_data['sent_time'] = $table->sent_time;
$mail_data['attachments'] = $table->attachments;
} catch (Exception $e) {
$this->setError(Text::_('COM_DJCATALOG2_MESSENGER_ERROR_COULDNT_SAVE_MESSAGE') . ' ' . $e->getMessage());
return false;
}
}
/*$notify_recipient = true;
if (isset($options['notify_recipient'])) {
$notify_recipient = (bool)$options['notify_recipient'];
}*/
$CC = array();
if (isset($options['CC'])) {
if (is_string($options['CC'])) {
$CC = array($options['CC']);
} else if (is_array($options['CC'])) {
$CC = $options['CC'];
}
}
$BCC = array();
if (isset($options['BCC'])) {
if (is_string($options['BCC'])) {
$BCC = array($options['BCC']);
} else if (is_array($options['BCC'])) {
$BCC = $options['BCC'];
}
}
$replyTo = null;
if (isset($options['reply_to_email']) && !empty($options['reply_to_email'])) {
$replyTo = $options['reply_to_email'];
}
$notified = DJCatalog2HelperMailer::send($mail_data, $template, $CC, $BCC, $replyTo, true);
//$notified = ($notify_recipient) ? DJCatalog2HelperMailer::send($mail_data, $template, $CC, $BCC, $replyTo, true) : true;
/*
$notify_administrator = false;
if (isset($options['notify_administrator'])) {
$notify_administrator = (bool)$options['notify_administrator'];
}*/
/*
if ($params->get('admin_notifications', 0) && $params->get('admin_notifications_user') && $notify_administrator) {
$adminUser = static::getUserById((int)$params->get('admin_notifications_user'));
if ($adminUser) {
//$template = static::getTemplate('admin_notification');
$admin_data = $mail_data;
$admin_data['recipient_email'] = $adminUser->email;
$admin_data['subject'] = $template->subject . ' - ' . Text::sprintf('COM_DJCATALOG2_SUBJECT_COPY_OF', $mail_data['subject']);
DJCatalog2HelperMailer::send($admin_data, $template);
}
}*/
if (!$notified) {
$this->setError(Text::_('COM_DJCATALOG2_MESSENGER_ERROR_COULDNT_SEND_MAIL'));
return false;
}
return true;
}
/**
*
* @param DJCatalog2TableMessage $table
* @param array $data
*/
protected function saveMessage(&$table, &$data)
{
// Bind the data.
if (!$table->bind($data)) {
throw new Exception($table->getError());
}
if ((int)$table->sent_time == 0) {
$table->sent_time = Factory::getDate()->toSql();
}
// Check the data.
if (!$table->check()) {
throw new Exception($table->getError());
}
// Store the data.
if (!$table->store()) {
throw new Exception($table->getError());
}
return true;
}
/**
*
* @param int|string $data user ID or user email
* @return JUser
*/
public static function getUser($data)
{
$user = false;
if (is_numeric($data)) {
if ((int)$data > 0) {
$user = static::getUserById($data);
} else {
return false;
}
} else if (is_string($data)) {
$user = static::getUserByEmail(trim((string)$data));
}
return $user;
}
/**
*
* @param int $user_id
* @return JUser
*/
public static function getUserById($user_id, $skipChecks = false)
{
if (!$user_id) {
return false;
}
if (!isset(static::$users[$user_id])) {
$user = false;
if ($skipChecks) {
$user = new User($user_id);
} else {
$db = Factory::getDbo();
$query = $db->getQuery(true)->select('count(*)')->from('#__users')->where('id=' . (int)$user_id);
$db->setQuery($query);
$result = $db->loadResult();
if ($result) {
$user = new User($user_id);
}
}
static::$users[$user_id] = $user;
}
return static::$users[$user_id];
}
/**
*
* @param string $email
* @return JUser
*/
public static function getUserByEmail($email)
{
$db = Factory::getDbo();
$query = $db->getQuery(true);
$query->select('id')->from('#__users')->where('email LIKE ' . $db->quote($db->escape(trim((string)$email))));
$db->setQuery($query);
$user_id = $db->loadResult();
$user = new User();
if ($user_id > 0) {
$user = static::getUserById($user_id);
} else {
$user->email = $email;
$parts = explode('@', $email, 2);
$user->name = $parts[0];
}
return $user;
}
/**
*
* @param string $type
* @return object
*/
public static function getTemplate($type)
{
$type = trim((string)$type);
$template = static::findTemplate($type);
if (!$template) {
$template = new stdClass();
$template->body = '[[message]]';
$template->subject = '[[subject]]';
$template->type = 'plain';
} else {
if (is_object($template)) {
$template = clone $template;
} else {
$template = clone $plain_template;
}
}
return $template;
}
/**
*
* @param string $type
* @return object|false $template or false
*/
protected static function findTemplate($type)
{
if (!isset(static::$templates[$type])) {
$db = Factory::getDbo();
$query = $db->getQuery(true);
$query->select('*')->from('#__djc2_message_templates')->where('type=' . $db->quote($type));
$db->setQuery($query);
$template = $db->loadObject();
if (empty($template) || !$template->state) {
return false;
}
static::$templates[$type] = $template;
}
return static::$templates[$type];
}
public static function validateDate($date, $format = 'Y-m-d')
{
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) === $date;
}
public static function getUserAvatar($user_id)
{
if (!isset(static::$classifieds_avatars[$user_id])) {
$has_avatar = false;
$params = ComponentHelper::getParams('com_djclassifieds');
if ((int)$user_id) {
$db = Factory::getDbo();
$query = $db->getQuery(true);
$query->select('*')->from('#__djcf_images')->where('item_id=' . (int)$user_id . ' AND type=' . $db->quote('profile'));
$db->setQuery($query);
$profile = $db->loadObject();
if ($profile) {
static::$classifieds_avatars[$user_id] = Uri::root() . $profile->path . $profile->name . '_ths.' . $profile->ext;
$has_avatar = true;
}
}
if (!$has_avatar) {
static::$classifieds_avatars[$user_id] = Uri::root() . 'components/com_djclassifieds/assets/images/default_profile_s.png';
}
}
return static::$classifieds_avatars[$user_id];
}
protected function processAttachments($attachments, &$data)
{
$fileInfos = array();
$userTo = (!empty($data['user_to'])) ? $data['user_to'] : 0;
foreach ($attachments as $file) {
$fileInfo = DJCatalog2HelperAttachment::processFile($file, $userTo);
if (is_array($fileInfo)) {
$fileInfos[] = $fileInfo;
}
}
$data['attachments'] = json_encode($fileInfos);
}
protected function anonymizeEmail($email)
{
$parts = explode('@', $email);
$anonymous = '*';
$domain = $parts[1];
$strlen = strlen($parts[0]);
if ($strlen - 2 > 0) {
$anonymous = substr($parts[0], 0, 1);
for ($i = 0; $i < $strlen; $i++) {
$anonymous .= '*';
}
$anonymous .= substr($parts[0], -1, 1);
}
return $anonymous . '@' . $domain;
}
protected function prepareConfigData(&$data)
{
$app = Factory::getApplication();
/*if (!isset($data['logo'])) {
$data['logo'] = Uri::root(false) . 'images/logo.png';
}*/
if (!isset($data['site_name'])) {
$data['site_name'] = $app->getCfg('sitename');
}
if (!isset($data['site_url'])) {
$data['site_url'] = Uri::root(false);
}
}
}