| 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/c/o/o/coopiak/amisdesseniors-fr/nice/components/com_rsfeedback/helpers/ |
Upload File : |
<?php
/**
* @package RSFeedback!
* @copyright (C) 2010-2018 www.rsjoomla.com
* @license GPL, http://www.gnu.org/copyleft/gpl.html
*/
defined( '_JEXEC' ) or die( 'Restricted access' );
use Joomla\CMS\MVC\Model\BaseDatabaseModel;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\User\UserHelper;
use Joomla\CMS\Captcha\Captcha;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Access\Access;
use Joomla\Registry\Registry;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Factory;
class RSFeedbackHelper
{
// Check for Joomla! 4.x
public static function isJ4() {
return version_compare(JVERSION, '4.0', '>=');
}
public static function init($admin = false) {
HTMLHelper::_('jquery.framework', true);
HTMLHelper::_('behavior.core');
HTMLHelper::_('bootstrap.tooltip', '.hasTooltip');
if ($admin) {
self::addToolbar();
HTMLHelper::stylesheet('com_rsfeedback/admin.css', array('relative' => true, 'version' => 'auto'));
HTMLHelper::script('com_rsfeedback/validation.js', array('relative' => true, 'version' => 'auto'));
} else {
$doc = Factory::getDocument();
$config = RSFeedbackHelper::getConfig();
// Load bootstrap
$load_bootstrap = isset($config->load_bootstrap) ? $config->load_bootstrap : 1;
if ($load_bootstrap) {
HTMLHelper::_('bootstrap.framework');
HTMLHelper::_('bootstrap.loadcss', true);
}
// Load Font Awesome
$load_fontawesome = isset($config->load_fontawesome) ? $config->load_fontawesome : 1;
if ($load_fontawesome) {
HTMLHelper::stylesheet('com_rsfeedback/font-awesome.min.css', array('relative' => true, 'version' => 'auto'));
}
if ($config->captcha == 2) {
$doc->addScript('https://www.google.com/recaptcha/api.js?render=explicit');
}
// Load CSS & JavaScript
HTMLHelper::stylesheet('com_rsfeedback/style.css', array('relative' => true, 'version' => 'auto'));
HTMLHelper::script('com_rsfeedback/script.js', array('relative' => true, 'version' => 'auto'));
}
}
// Gets our configuration settings
public static function getConfig($name = null) {
static $config;
if (!is_object($config)) {
$db = Factory::getDbo();
$query = $db->getQuery(true)->select($db->qn('params'))
->from($db->qn('#__extensions'))
->where($db->qn('type') . ' = ' . $db->q('component'))
->where($db->qn('element') . ' = ' . $db->q('com_rsfeedback'));
$db->setQuery($query);
$params = $db->loadResult();
$registry = new Registry;
$registry->loadString($params);
$config = $registry->toObject();
}
if ($name != null) {
if (isset($config->$name))
return $config->$name;
else
return false;
}
else return $config;
}
public static function addToolbar() {
if (RSFeedbackHelper::isJ4()) {
return;
}
$view = Factory::getApplication()->input->get('view');
JHtmlSidebar::addEntry(Text::_('COM_RSFEEDBACK_OVERVIEW'), Route::_('index.php?option=com_rsfeedback'), empty($view));
JHtmlSidebar::addEntry(Text::_('COM_RSFEEDBACK_MENU_FEEDBACKS'), Route::_('index.php?option=com_rsfeedback&view=feedbacks'), $view == 'feedbacks');
JHtmlSidebar::addEntry(Text::_('COM_RSFEEDBACK_MENU_CATEGORIES'), Route::_('index.php?option=com_rsfeedback&view=categories'), $view == 'categories');
JHtmlSidebar::addEntry(Text::_('COM_RSFEEDBACK_MENU_GROUPS'), Route::_('index.php?option=com_rsfeedback&view=groups'), $view == 'groups');
JHtmlSidebar::addEntry(Text::_('COM_RSFEEDBACK_MENU_STATUSES'), Route::_('index.php?option=com_rsfeedback&view=statuses'), $view == 'statuses');
JHtmlSidebar::addEntry(Text::_('COM_RSFEEDBACK_MENU_FLAGS'), Route::_('index.php?option=com_rsfeedback&view=flags'), $view == 'flags');
JHtmlSidebar::addEntry(Text::_('COM_RSFEEDBACK_MENU_MODERATION'), Route::_('index.php?option=com_rsfeedback&view=moderations'), $view == 'moderations');
JHtmlSidebar::addEntry(Text::_('COM_RSFEEDBACK_MENU_COMMENTS'), Route::_('index.php?option=com_rsfeedback&view=comments'), $view == 'comments');
JHtmlSidebar::addEntry(Text::_('COM_RSFEEDBACK_MENU_SUBSCRIPTIONS'), Route::_('index.php?option=com_rsfeedback&view=subscriptions'), $view == 'subscriptions');
}
public static function showDate($date, $dateformat=null) {
$config = RSFeedbackHelper::getConfig();
$date_format = !empty($dateformat) ? $dateformat : $config->global_dateformat;
return HTMLHelper::_('date', $date, $date_format);
}
//get permissions for user groups
public static function getPermissions($permission = null) {
$db = Factory::getDbo();
$query = $db->getQuery(true);
$user = Factory::getUser();
$app = Factory::getApplication();
$params = $app->isClient('site') ? $app->getParams() : new Registry;
$param_cat = $params->get('ShowFromCategories');
$view = Factory::getApplication()->input->get('view', '','cmd');
$permissions = array();
// Get the columns of groups as default permissions
static $group_columns;
if (!isset($group_columns)) {
$group_columns = $db->getTableColumns('#__rsfeedback_groups');
}
foreach (array_keys($group_columns) as $col) {
$permissions[$col] = 0;
}
// Get the user`s groups
$joomla_groups = Access::getGroupsByUser($user->id);
// Remove the public permission
if (!$user->guest) {
foreach ($joomla_groups as $i => $group)
if ($group == 1) unset($joomla_groups[$i]);
}
// Get all RSFeedback Groups
static $rsfeedback_group_acl;
if (!isset($rsfeedback_group_acl)) {
$query->clear();
$query->select('*')->from($db->qn('#__rsfeedback_groups'))->order($db->qn('id').' ASC');
$db->setQuery($query);
$rsfeedback_group_acl = $db->loadObjectList();
}
foreach($rsfeedback_group_acl as $group) {
if (!is_array($group->group_acl)) {
$registry = new Registry;
$registry->loadString($group->group_acl);
$group->group_acl = $registry->toArray();
}
$groups_intersect = array_intersect($group->group_acl, $joomla_groups);
if (!empty($groups_intersect)) {
$permissions['name'] .= ' '.$group->name;
foreach ($group as $property => $value)
if ($value == '1')
$permissions[$property] = $value;
}
}
// get category id
if (isset($param_cat) && !empty($param_cat)) $cat_id = $params->get('ShowFromCategories');
elseif ($view == 'category') $cat_id = Factory::getApplication()->input->get('id', 0,'int');
else $cat_id = Factory::getApplication()->input->get('cat_id', 0,'int');
if (is_array($cat_id)) {
$cat_id = array_map('intval', $cat_id);
} else {
$cat_id = $cat_id ? array($cat_id) : array();
}
$allowed_categories = RSFeedbackHelper::getAllowedCategories();
// overwrite feedback_add permission whith the category setting
if ($cat_id && $user->guest) {
$query->clear()
->select('MAX('.$db->qn('anonymous_feedbacks').')')
->from($db->qn('#__rsfeedback_categories'))
->where($db->qn('id').' IN ('.implode(',', $cat_id).')');
$db->setQuery($query);
$permissions['feedback_add'] = (int) $db->loadResult();
}
// overwrite feedback_add permission if guest viewing all feedbacks
if (!$cat_id && $user->guest && !empty($allowed_categories))
$permissions['feedback_add'] = 1;
return is_null($permission) ? $permissions : (isset($permissions[$permission]) ? $permissions[$permission] : false);
}
public static function DisplayComments($id) {
$comments = new stdClass();
$config = RSFeedbackHelper::getConfig();
$id = (int) $id;
$feedback_model = BaseDatabaseModel::getInstance('Feedback','RSFeedbackModel');
$feedback = $feedback_model->getItem($id);
$statuses = RSFeedbackHelper::getStatuses();
switch ($config->feedback_commenting) {
case '0':
$comments->listing = '';
$comments->form = '';
break;
case '1':
require_once JPATH_BASE .'/components/com_rsfeedback/helpers/comments.php';
$comments->listing = RSFeedbackComments::showComments($id);
$comments->form = '';
if ((bool) RSFeedbackHelper::getPermissions('feedback_comment') && $statuses[$feedback->status_id]->permissions->allow_commenting == 1) {
$comments->form = RSFeedbackComments::showForm($id);
}
break;
case '2' :
$allow_commenting = $statuses[$feedback->status_id]->permissions->allow_commenting == 1;
require_once JPATH_BASE .'/components/com_rscomments/helpers/rscomments.php';
$hash = md5('com_rsfeedback'.$id);
RSCommentsHelper::loadScripts();
RSCommentsHelper::loadRecaptcha($hash);
RSCommentsHelper::loadhCaptcha($hash);
$comments->listing = RSCommentsHelper::initScripts('com_rsfeedback', $id);
$comments->listing .= '<div class="rscomments">';
$comments->listing .= '<div class="rscomments-comments-list">';
$comments->listing .= RSCommentsHelper::showComments('com_rsfeedback', $id, null, null, false);
$comments->listing .= '</div><!-- end .rscomments-comments-list -->';
$comments->form = '<div id="rscomments-comment-form">';
$comments->form .= RSCommentsHelper::displayForm('com_rsfeedback', $id, false);
$comments->form .= '</div> <!-- end #rscomments-comment-form -->';
if ($allow_commenting)
$comments->form .= '</div><!-- end .rscomments -->';
else
$comments->listing .= '</div><!-- end .rscomments -->';
break;
case '3' :
require_once JPATH_BASE .'/components/com_jcomments/jcomments.php';
$comments->listing = JComments::show($id, 'com_rsfeedback', $feedback->title);
$comments->form = '';
break;
case '4' :
// JomComment not supported anymore
$comments->listing = '';
$comments->form = '';
break;
case '5' :
$comments->listing = Komento::commentify('com_rsfeedback', $feedback);
$comments->form = '';
break;
}
return $comments;
}
public static function getFeedbackCommentsCount($id) {
$id = (int) $id;
$config = RSFeedbackHelper::getConfig();
switch ($config->feedback_commenting)
{
case '0':
$comments = 0;
break;
case '1':
$comm_model = BaseDatabaseModel::getInstance('Comments','RSFeedbackModel');
$comments = $comm_model->getTotalComments($id);
break;
case '2' :
require_once (JPATH_BASE .'/components/com_rscomments/helpers/rscomments.php');
$comments = RSCommentsHelper::getCommentsNumber($id,false,'com_rsfeedback');
break;
case '3' :
require_once ( JPATH_BASE .'/components/com_jcomments/jcomments.php' );
$comments = JComments::getCommentsCount($id, 'com_rsfeedback');
break;
case '4' :
// JomComment not supported anymore
$comments = 0;
break;
case '5' :
$commentsModel = Komento::getModel( 'comments' );
$comments = $commentsModel->getCount('com_rsfeedback', $id);
break;
}
return (int) $comments;
}
public static function getFlagNames() {
$db = Factory::getDbo();
$query = $db->getQuery(true);
$query->select('*')
->from($db->qn('#__rsfeedback_flags'))
->where($db->qn('published') .' = '.$db->q('1'))
->order($db->qn('ordering'), 'ASC');
$db->setQuery($query);
return $db->loadObjectList();
}
public static function getStatuses() {
static $statuses;
if (!isset($statuses)) {
$db = Factory::getDbo();
$query = $db->getQuery(true);
$statuses = array();
$query->select('*')
->from($db->qn('#__rsfeedback_statuses'))
->where($db->qn('published') .' = '.$db->q('1'))
->order($db->qn('ordering') .' ASC');
$db->setQuery($query);
if ($tmp_statuses = $db->loadObjectList()) {
foreach ($tmp_statuses as $stat) {
$registry = new Registry;
$registry = $registry->loadString($stat->permissions);
$stat->permissions = $registry->toObject();
$statuses[$stat->id] = $stat;
}
}
}
return $statuses;
}
public static function getCategoryNames() {
static $names;
if (!isset($names)) {
$db = Factory::getDbo();
$query = $db->getQuery(true);
$query->select($db->qn('id').', '.$db->qn('name').', '.$db->qn('anonymous_feedbacks'))
->from($db->qn('#__rsfeedback_categories'))
->where($db->qn('published') .' = '.$db->q('1'))
->order($db->qn('ordering') .' ASC');
$db->setQuery($query);
$names = $db->loadObjectList();
}
return $names;
}
public static function getAllowedCategories() {
$all_categories = self::getCategoryNames();
$allowed_categories = array();
if (Factory::getUser()->guest) {
foreach ($all_categories as $category)
if ($category->anonymous_feedbacks == '1')
$allowed_categories[] = $category;
} else {
$allowed_categories = $all_categories;
}
return $allowed_categories;
}
public static function getCategoryDetails($cat_id) {
$category = array();
if (!empty($cat_id)) {
$model = BaseDatabaseModel::getInstance('Category', 'RSFeedbackModel', array(
'option' => 'com_rsfeedback',
'table_path' => JPATH_ADMINISTRATOR.'/components/com_rsfeedback/tables'
));
$category = $model->getItem((int) $cat_id);
}
return $category;
}
public static function getTranslation($string, $prefix) {
return static::getTranslationObject($string, $prefix)->translation;
}
public static function getTranslationObject($string, $prefix) {
$lang = Factory::getLanguage();
$return = new stdClass();
$return->key = strtoupper('COM_RSFEEDBACK_'.$prefix.'_'.str_replace(array(' ','-'), '_', $string));
$return->translation = $string;
if ($lang->hasKey($return->key))
$return->translation = Text::_($return->key);
return $return;
}
public static function qi($array) {
$db = Factory::getDbo();
if (is_array($array)) {
$quoted = array();
foreach ($array as $value) {
$quoted[] = $db->q($value);
}
return implode(',', $quoted);
}
return $array;
}
public static function verifyAuthorship($feedback_id) {
$feedback_id = (int) $feedback_id;
$user = Factory::getUser();
$db = Factory::getDbo();
$query = $db->getQuery(true);
$result = false;
if (!$user->guest) {
// count id where id and user_id
$query->select('COUNT(`id`) as count')->from($db->qn('#__rsfeedback_feedbacks'))->where($db->qn('id').' = '.$db->q($feedback_id))->where($db->qn('user_id').' = '.$db->q($user->id));
$db->setQuery($query);
$result = (bool) $db->loadResult();
}
return $result;
}
public static function renderCaptcha($input) {
static $instances = array();
$hash = md5(serialize($input['name']));
if (!isset($instances[$hash])) {
$html = array();
$doc = Factory::getDocument();
$config = RSFeedbackHelper::getConfig();
$size = isset($input['element']['size']) ? ' size="' . (int) $input['element']['size'] . '"' : '';
$class = isset($input['element']['class']) ? ' class="' . (string) $input['element']['class'] . '"' : '';
switch ($config->captcha) {
case 1:
// reCAPTCHA
if (!class_exists('JReCAPTCHA'))
require_once JPATH_SITE.'/components/com_rsfeedback/helpers/recaptcha/recaptchalib.php';
$html[] = JReCAPTCHA::getHTML();
$html[] = '<span id="rsfe_recaptcha"> </span>';
break;
case 2:
// reCAPTCHA V2
$doc->addScriptDeclaration("
RSFeedback.loaders.push(function() {
grecaptcha.render('g-recaptcha-" . $input['id'] . "', {
'sitekey' : '" . $config->rec_public . "',
'type' : '" . $config->recv2_type . "',
'theme' : '" . $config->recv2_theme . "'
});
});
");
$html[] = '<div id="g-recaptcha-'.$input['id'].'"></div>';
break;
case 3:
case 4:
// Joomla! CAPTCHA Plugin
$recaptcha_plugin = $config->captcha == 3 ? 'recaptcha' : 'recaptcha_invisible';
if (PluginHelper::isEnabled('captcha', $recaptcha_plugin)) {
$captcha = Captcha::getInstance($recaptcha_plugin, array('namespace' => $input['id']));
$html[] = $captcha->display($input['name'], $input['id']);
} else
$html[] = '<div class="alert alert-danger"><h4>'.Text::_('COM_RSFEEDBACK_JOOMLA_RECAPTCHA_ERROR_NOT_ENABLED_TITLE').'</h4>'. Text::sprintf('COM_RSFEEDBACK_JOOMLA_RECAPTCHA_ERROR_NOT_ENABLED_MESSAGE', Text::_('COM_RSFEEDBACK_JOOMLA_'.strtoupper($recaptcha_plugin))).'</div>';
break;
default:
$html[] = '<div class="'.RSFeedbackAdapterGrid::column(5).'">
<img id="'.$input['id'].'image" src="'.Route::_('index.php?option=com_rsfeedback&task=captcha&rand='.rand()).'" onclick="RSFeedback.ResetCaptcha(\''.$input['id'].'\');" title="'.Text::_('COM_RSFEEDBACK_REFRESH_CAPTCHA').'" class="hasTooltip" /> <br />
<input type="text" name="jform[captcha]" id="'.$input['id'].'"' . ' value="" ' . $class . $size . '/>
</div>
';
$html[] = $config->captcha_cases ? Text::_('COM_RSFEEDBACK_CASE_SENSITIVE') : '';
break;
}
$instances[$hash] = $html;
}
return implode("\n",$instances[$hash]);
}
// Clean the cache
public static function cleanCache() {
Factory::getCache('com_rsfeedback')->clean();
return true;
}
public static function getFeedbackTitle($id) {
$id = (int) $id;
$db = Factory::getDbo();
$query = $db->getQuery(true);
$query->select($db->qn('title'))
->from($db->qn('#__rsfeedback_feedbacks'))
->where($db->qn('id').' = '.$db->q($id));
$db->setQuery($query);
return $db->loadResult();
}
protected static function getFakeData() {
// Let's create a fake email & fake username
$fake_email = UserHelper::genRandomPassword(mt_rand(10, 16)) . '@' . UserHelper::genRandomPassword(mt_rand(10, 16));
$fake_username = UserHelper::genRandomPassword(mt_rand(10, 16));
$fake_text = Text::_('COM_RSFEEDBACK_DATA_HAS_BEEN_ANONYMISED');
$fake_ip = '0.0.0.0';
return array($fake_email, $fake_username, $fake_text, $fake_ip);
}
public static function anonymiseComments($email) {
list($fake_email, $fake_username, $fake_text, $fake_ip) = self::getFakeData();
$db = Factory::getDbo();
// Anonymize user's comments
$query = $db->getQuery(true)
->update($db->qn('#__rsfeedback_comments'))
->set($db->qn('name') . ' = ' . $db->q($fake_username))
->set($db->qn('email') . ' = ' . $db->q($fake_email))
->set($db->qn('text') . ' = ' . $db->q($fake_text))
->set($db->qn('published') . ' = ' . $db->q(0))
->where($db->qn('email') . ' = ' . $db->q($email) );
$db->setQuery($query)->execute();
}
public static function anonymiseSubscriptions($email) {
$db = Factory::getDbo();
// Anonymize user's subscriptions
$query = $db->getQuery(true)
->delete($db->qn('#__rsfeedback_subscriptions'))
->where($db->qn('email') . ' = ' . $db->q($email));
$db->setQuery($query)->execute();
}
public static function anonymise($id, $anonymiseJoomlaData = null) {
$db = Factory::getDbo();
$query = $db->getQuery(true);
$user = Factory::getUser($id);
list($fake_email, $fake_username, $fake_text, $fake_ip) = self::getFakeData();
if ($anonymiseJoomlaData === null) {
$anonymiseJoomlaData = RSFeedbackHelper::getConfig('anonymise_joomla_data');
}
// Anonymize Joomla! user data
if ($anonymiseJoomlaData) {
// Make sure this email is free
$query->clear()
->select($db->qn('id'))
->from($db->qn('#__users'))
->where($db->qn('email') . ' = ' . $db->q($fake_email));
while ($db->setQuery($query)->loadResult()) {
$fake_email .= UserHelper::genRandomPassword(mt_rand(1, 2));
$query->clear()
->select($db->qn('id'))
->from($db->qn('#__users'))
->where($db->qn('email') . ' = ' . $db->q($fake_email));
}
// Make sure this username is free
$query->clear()
->select($db->qn('id'))
->from($db->qn('#__users'))
->where($db->qn('username') . ' = ' . $db->q($fake_username));
while ($db->setQuery($query)->loadResult()) {
$fake_username .= UserHelper::genRandomPassword(mt_rand(1, 2));
$query->clear()
->select($db->qn('id'))
->from($db->qn('#__users'))
->where($db->qn('username') . ' = ' . $db->q($fake_username));
}
// #__users data
$query->clear()
->update($db->qn('#__users'))
->set($db->qn('name') . ' = ' . $db->q($fake_username))
->set($db->qn('username') . ' = ' . $db->q($fake_username))
->set($db->qn('email') . ' = ' . $db->q($fake_email))
->set($db->qn('password') . ' = ' . $db->q(UserHelper::hashPassword(UserHelper::genRandomPassword(20))))
->where($db->qn('id') . ' = ' . $db->q($id));
$db->setQuery($query)->execute();
}
// Anonymize user's feedbacks
$query->clear()
->update($db->qn('#__rsfeedback_feedbacks'))
->set($db->qn('title') . ' = ' . $db->q($fake_text))
->set($db->qn('text') . ' = ' . $db->q($fake_text))
->set($db->qn('published') . ' = ' . $db->q(0))
->where($db->qn('user_id') . ' = ' . $db->q($id) );
$db->setQuery($query)->execute();
// Anonymize user's comments
self::anonymiseComments($user->email);
// Anonymize user's subscriptions
self::anonymiseSubscriptions($user->email);
// Anonymize user's flags
$query->clear()
->update($db->qn('#__rsfeedback_user_flags'))
->set($db->qn('comment') . ' = ' . $db->q($fake_text))
->where($db->qn('user_id') . ' = ' . $db->q($id) );
$db->setQuery($query)->execute();
// Anonymize user's votes
$query->clear()
->update($db->qn('#__rsfeedback_user_votes'))
->set($db->qn('ip') . ' = ' . $db->q($fake_ip))
->where($db->qn('user_id') . ' = ' . $db->q($id) );
$db->setQuery($query)->execute();
}
}