| 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/dansnotreville-fr/nice/plugins/privacy/rsfeedback/ |
Upload File : |
<?php
/**
* @package RSFeedback!
* @copyright (c) 2013 - 2018 RSJoomla!
* @link https://www.rsjoomla.com
* @license GNU General Public License http://www.gnu.org/licenses/gpl-3.0.en.html
*/
// No direct access.
defined('_JEXEC') or die('Restricted access');
use Joomla\Utilities\ArrayHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\User\User;
use Joomla\CMS\Factory;
JLoader::registerAlias('PrivacyPlugin', '\\Joomla\\Component\\Privacy\\Administrator\\Plugin\\PrivacyPlugin');
JLoader::registerAlias('PrivacyRemovalStatus', '\\Joomla\\Component\\Privacy\\Administrator\\Removal\\Status');
JLoader::register('PrivacyPlugin', JPATH_ADMINISTRATOR . '/components/com_privacy/helpers/plugin.php');
JLoader::register('PrivacyRemovalStatus', JPATH_ADMINISTRATOR . '/components/com_privacy/helpers/removal/status.php');
/**
* RSFeedback! Privacy Plugin.
*/
class PlgPrivacyRsfeedback extends PrivacyPlugin
{
const EXTENSION = 'plg_privacy_rsfeedback';
/**
* Can the plugin run?
*
* @access public
*
* @return bool
*/
public function canRun() {
if (file_exists(JPATH_SITE . '/components/com_rsfeedback/helpers/rsfeedback.php')) {
require_once JPATH_SITE . '/components/com_rsfeedback/helpers/rsfeedback.php';
return true;
}
return false;
}
/**
* Performs validation to determine if the data associated with a remove information request can be processed
*
* This event will not allow a super user account to be removed
*
* @param PrivacyTableRequest $request The request record being processed
* @param JUser $user The user account associated with this request if available
*
* @return PrivacyRemovalStatus
*
* @since 3.9.0
*/
public function onPrivacyCanRemoveData($request, $user = null) {
$status = new PrivacyRemovalStatus;
if (!$user) {
return $status;
}
if ($user->authorise('core.admin')) {
$status->canRemove = false;
$status->reason = Text::_('PLG_PRIVACY_RSFEEDBACK_ERROR_CANNOT_REMOVE_SUPER_USER');
}
return $status;
}
/**
* Function that retrieves the information for the RSFeedback! Component Capabilities
* @return array
*
*/
public function onPrivacyCollectAdminCapabilities() {
if (!$this->canRun()) {
return array();
}
$capabilities = array(
Text::_('PLG_PRIVACY_RSFEEDBACK_CAPABILITIES_GENERAL') => array(
Text::_('PLG_PRIVACY_RSFEEDBACK_CAPABILITIES_SUBSCRIBE_FEEDBACKS'),
Text::_('PLG_PRIVACY_RSFEEDBACK_CAPABILITIES_VOTE_FEEDBACKS'),
Text::_('PLG_PRIVACY_RSFEEDBACK_CAPABILITIES_COMMENT_FEEDBACKS'),
Text::_('PLG_PRIVACY_RSFEEDBACK_CAPABILITIES_RECAPTCHA'),
)
);
return $capabilities;
}
/**
*
* @param PrivacyTableRequest $request The request record being processed
* @param JUser $user The user account associated with this request if available
*
* @return PrivacyExportDomain[]
*
* @since 3.9.0
*/
public function onPrivacyExportRequest($request, $user = null) {
$domains = array();
if (!$this->canRun()) {
return $domains;
}
if (!$user) {
$domains[] = $this->createComments($request->email);
$domains[] = $this->createSubscriptions($request->email);
} else {
$userTable = User::getTable();
$userTable->load($user->id);
$domains[] = $this->createFeedbacks($userTable);
$domains[] = $this->createComments($userTable->email);
$domains[] = $this->createSubscriptions($userTable->email);
$domains[] = $this->createUserFlags($userTable);
$domains[] = $this->createUserVotes($userTable);
}
return $domains;
}
/**
* Removes the data associated with a remove information request
*
* This event will pseudoanonymise the user account
*
* @param PrivacyTableRequest $request The request record being processed
* @param JUser $user The user account associated with this request if available
*
* @return void
*
* @since 3.9.0
*/
public function onPrivacyRemoveData($request, $user = null) {
if (!$this->canRun()) {
return;
}
Factory::getLanguage()->load('com_rsfeedback', JPATH_ADMINISTRATOR);
// If no user exists, look for the email
if (!$user) {
// Anonymize user's comments
RSFeedbackHelper::anonymiseComments($request->email);
// Anonymize user's subscriptions
RSFeedbackHelper::anonymiseSubscriptions($request->email);
} else {
RSFeedbackHelper::anonymise($user->id, 0);
}
}
/**
* Create the domain for the comments
*
* @param string $email The email address to process
*
* @return PrivacyExportDomain
*
* @since 3.9.0
*/
private function createComments($email) {
$domain = $this->createDomain('user_rsfeedback_comments', 'rsfeedback_comments');
$query = $this->db->getQuery(true)
->select('*')
->from($this->db->qn('#__rsfeedback_comments'))
->where($this->db->qn('email') . ' = '. $this->db->quote($email));
if ($items = $this->db->setQuery($query)->loadAssocList()) {
$items = ArrayHelper::dropColumn($items, 'id');
foreach ($items as $item) {
$domain->addItem($this->createItemFromArray($item));
}
}
return $domain;
}
/**
* Create the domain for the subscriptions
*
* @param string $email The email address to process
*
* @return PrivacyExportDomain
*
* @since 3.9.0
*/
private function createSubscriptions($email) {
$domain = $this->createDomain('user_rsfeedback_subscriptions', 'rsfeedback_subscriptions');
$query = $this->db->getQuery(true)
->select('*')
->from($this->db->qn('#__rsfeedback_subscriptions'))
->where($this->db->qn('email') . ' = '. $this->db->quote($email));
if ($items = $this->db->setQuery($query)->loadAssocList()) {
$items = ArrayHelper::dropColumn($items, 'id');
foreach ($items as $item) {
$domain->addItem($this->createItemFromArray($item));
}
}
return $domain;
}
/**
* Create the domain for the user votes
*
* @param JTableUser $user The JTableUser object to process
*
* @return PrivacyExportDomain
*
* @since 3.9.0
*/
private function createUserVotes($user) {
$domain = $this->createDomain('user_rsfeedback_votes', 'rsfeedback_votes');
$query = $this->db->getQuery(true)
->select('*')
->from($this->db->qn('#__rsfeedback_user_votes'))
->where($this->db->qn('user_id') . ' = '. $this->db->quote($user->id));
if ($items = $this->db->setQuery($query)->loadAssocList()) {
foreach (array('user_id', 'id') as $column) {
$items = ArrayHelper::dropColumn($items, $column);
}
foreach ($items as $item) {
$domain->addItem($this->createItemFromArray($item));
}
}
return $domain;
}
/**
* Create the domain for the user flags
*
* @param JTableUser $user The JTableUser object to process
*
* @return PrivacyExportDomain
*
* @since 3.9.0
*/
private function createUserFlags($user) {
$domain = $this->createDomain('user_rsfeedback_flags', 'rsfeedback_flags');
$query = $this->db->getQuery(true)
->select($this->db->qn('f.name', 'flag_name'))
->select('uf.*')
->from($this->db->qn('#__rsfeedback_user_flags', 'uf'))
->join('left', $this->db->qn('#__rsfeedback_flags', 'f') . ' ON (' . $this->db->qn('uf.flag_id') . ' = ' . $this->db->qn('f.id') . ')')
->where($this->db->qn('uf.user_id') . ' = '. $this->db->quote($user->id));
if ($items = $this->db->setQuery($query)->loadAssocList()) {
foreach (array('user_id', 'id', 'flag_id') as $column) {
$items = ArrayHelper::dropColumn($items, $column);
}
foreach ($items as $item) {
$domain->addItem($this->createItemFromArray($item));
}
}
return $domain;
}
/**
* Create the domain for the user feedbacks
*
* @param JTableUser $user The JTableUser object to process
*
* @return PrivacyExportDomain
*
* @since 3.9.0
*/
private function createFeedbacks($user) {
$domain = $this->createDomain('user_rsfeedback_feedbacks', 'rsfeedback_feedbacks');
$query = $this->db->getQuery(true)
->select($this->db->qn('c.name', 'category_name'))
->select($this->db->qn('s.name', 'status_name'))
->select('f.*')
->from($this->db->qn('#__rsfeedback_feedbacks', 'f'))
->join('left', $this->db->qn('#__rsfeedback_categories', 'c') . ' ON (' . $this->db->qn('f.cat_id') . ' = ' . $this->db->qn('c.id') . ')')
->join('left', $this->db->qn('#__rsfeedback_statuses', 's') . ' ON (' . $this->db->qn('f.status_id') . ' = ' . $this->db->qn('s.id') . ')')
->where($this->db->qn('f.user_id') . ' = '. $this->db->quote($user->id));
if ($items = $this->db->setQuery($query)->loadAssocList()) {
foreach (array('user_id', 'status_id', 'cat_id') as $column) {
$items = ArrayHelper::dropColumn($items, $column);
}
foreach ($items as $item) {
$domain->addItem($this->createItemFromArray($item, $item['id']));
}
}
return $domain;
}
}