primo commit

This commit is contained in:
2024-12-17 17:34:10 +01:00
commit e650f8df99
16435 changed files with 2451012 additions and 0 deletions

View File

@ -0,0 +1,407 @@
<?php
/**
* @package Phoca Gallery
* @author Jan Pavelka - https://www.phoca.cz
* @copyright Copyright (C) Jan Pavelka https://www.phoca.cz
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 and later
* @cms Joomla
* @copyright Copyright (C) Open Source Matters. All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
*/
defined( '_JEXEC' ) or die( 'Restricted access' );
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Component\ComponentHelper;
class PhocaGalleryAccess
{
/*
* Get info about access in only one category
*/
public static function getCategoryAccess($id) {
$output = array();
$db = Factory::getDBO();
$query = 'SELECT c.access, c.accessuserid, c.uploaduserid, c.deleteuserid, c.userfolder' .
' FROM #__phocagallery_categories AS c' .
' WHERE c.id = '. (int) $id .
' ORDER BY c.id';
$db->setQuery($query, 0, 1);
$output = $db->loadObject();
return $output;
}
/**
* Method to check if the user have access to category
* Display or hide the not accessible categories - subcat folder will be not displayed
* Check whether category access level allows access
*
* E.g.: Should the link to Subcategory or to Parentcategory be displayed
* E.g.: Should the delete button displayed, should be the upload button displayed
*
* @param string $params rightType: accessuserid, uploaduserid, deleteuserid - access, upload, delete right
* @param int $params rightUsers - All selected users which should have the "rightType" right
* @param int $params rightGroup - All selected Groups of users(public, registered or special ) which should have the "rT" right
* @param int $params userAID - Specific group of user who display the category in front (public, special, registerd)
* @param int $params userId - Specific id of user who display the category in front (1,2,3,...)
* @param int $params Additional param - e.g. $display_access_category (Should be unaccessed category displayed)
* @return boolean 1 or 0
*/
public static function getUserRight($rightType = 'accessuserid', $rightUsers = array(), $rightGroup = 0, $userAID = array(), $userId = 0 , $additionalParam = 0 ) {
$user = Factory::getUser();
// we can get the variables here, not before function call
$userAID = $user->getAuthorisedViewLevels();
$userId = $user->get('id', 0);
$guest = 0;
if (isset($user->guest) && $user->guest == 1) {
$guest = 1;
}
/* // User ACL
$rightGroupAccess = 0;
// User can be assigned to different groups
foreach ($userAID as $keyUserAID => $valueUserAID) {
if ((int)$rightGroup == (int)$valueUserAID) {
$rightGroupAccess = 1;
break;
}
}*/
// Normally we use "registered" group
// But if user defines own "registered" groups in registered_access_level, these need to be taken in effect too
$nAL = self::getNeededAccessLevels();
$rightGroupA = array();
$rightGroupA[] = (int)$rightGroup;
if(!empty($nAL)){
//$rightGroupA = array_merge($nAL, $rightGroupA);
}
// User ACL
$rightGroupAccess = 0;
// User can be assigned to different groups
foreach ($userAID as $keyUserAID => $valueUserAID) {
/*if ((int)$rightGroup == (int)$valueUserAID) {
$rightGroupAccess = 1;
break;
}*/
foreach($rightGroupA as $keyRightGroupA => $valueRightGroupA) {
if ((int)$valueRightGroupA == (int)$valueUserAID) {
$rightGroupAccess = 1;
break 2;
}
}
}
$rightUsersIdArray = array();
if (!empty($rightUsers) && isset($rightUsers) && $rightUsers != '') {
$rightUsersIdArray = explode( ',', trim( $rightUsers ) );
} else {
$rightUsersIdArray = array();
}
// Access rights (Default open for all)
// Upload and Delete rights (Default closed for all)
switch ($rightType) {
case 'accessuserid':
$rightDisplay = 1;
break;
default:
$rightDisplay = 0;
break;
}
if ($additionalParam == 0) { // We want not to display unaccessable categories ($display_access_category)
if ($rightGroup != 0) {
if ($rightGroupAccess == 0) {
$rightDisplay = 0;
} else { // Access level only for one registered user
if (!empty($rightUsersIdArray)) {
// Check if the user is contained in selected array
$userIsContained = 0;
foreach ($rightUsersIdArray as $key => $value) {
if ($userId == $value) {
$userIsContained = 1;// check if the user id is selected in multiple box
break;// don't search again
}
// for access (-1 not selected - all registered, 0 all users)
// Access is checked by group, but upload and delete not
if ($value == -1) {
if ($guest == 0) {
$userIsContained = 1;// in multiple select box is selected - All registered users
}
break;// don't search again
}
}
if ($userIsContained == 0) {
$rightDisplay = 0;
} else {
if ($rightType == 'uploaduserid' || $rightType == 'deleteuserid') {
$rightDisplay = 1;
}
}
// else {
// // E.g. upload right begins with 0, so we need to set it to 1
// $rightDisplay = 1;
// }
} else {
// Access rights (Default open for all)
// Upload and Delete rights (Default closed for all)
switch ($rightType) {
case 'accessuserid':
$rightDisplay = 1;
break;
default:
$rightDisplay = 0;
break;
}
}
}
}
}
return $rightDisplay;
}
/**
* Method to display multiple select box
* @param string $name Name (id, name parameters)
* @param array $active Array of items which will be selected
* @param int $nouser Select no user
* @param string $javascript Add javascript to the select box
* @param string $order Ordering of items
* @param int $reg Only registered users
* @return array of id
*/
public static function usersList( $name, $id, $active, $nouser = 0, $javascript = NULL, $order = 'name', $reg = 1,$returnArray = 0) {
$activeArray = $active;
if ($active != '') {
$activeArray = explode(',',$active);
}
$db = Factory::getDBO();
$and = '';
if ($reg) {
// does not include registered users in the list
$and = ' AND m.group_id != 2';
}
$query = 'SELECT u.id AS value, u.name AS text'
. ' FROM #__users AS u'
. ' JOIN #__user_usergroup_map AS m ON m.user_id = u.id'
. ' WHERE u.block = 0'
. $and
. ' GROUP BY u.id, u.name'
. ' ORDER BY '. $order;
$db->setQuery( $query );
if ( $nouser ) {
// Access rights (Default open for all)
// Upload and Delete rights (Default closed for all)
$idInput1 = $idInput2 = $idInput3 = $idInput4 = false;
$idText1 = $idText2 = $idText3 = $idText4 = false;
switch ($name) {
case 'jform[accessuserid][]':
$idInput1 = -1;
$idText1 = Text::_( 'COM_PHOCAGALLERY_ALL_REGISTERED_USERS' );
$idInput2 = -2;
$idText2 = Text::_( 'COM_PHOCAGALLERY_NOBODY' );
break;
case 'batch[accessuserid][]':
$idInput4 = -3;
$idText4 = Text::_( 'COM_PHOCAGALLERY_KEEP_ORIGINAL_ACCESS_RIGHTS_LEVELS' );
$idInput3 = 0;
$idText3 = Text::_( 'COM_PHOCAGALLERY_NOT_SET' );
$idInput1 = -1;
$idText1 = Text::_( 'COM_PHOCAGALLERY_ALL_REGISTERED_USERS' );
$idInput2 = -2;
$idText2 = Text::_( 'COM_PHOCAGALLERY_NOBODY' );
break;
case 'jform[default_accessuserid][]':
$idInput3 = 0;
$idText3 = Text::_( 'COM_PHOCAGALLERY_NOT_SET' );
$idInput1 = -1;
$idText1 = Text::_( 'COM_PHOCAGALLERY_ALL_REGISTERED_USERS' );
$idInput2 = -2;
$idText2 = Text::_( 'COM_PHOCAGALLERY_NOBODY' );
break;
default:
$idInput1 = -2;
$idText1 = Text::_( 'COM_PHOCAGALLERY_NOBODY' );
$idInput2 = -1;
$idText2 = Text::_( 'COM_PHOCAGALLERY_ALL_REGISTERED_USERS' );
break;
}
$users = array();
if ($idText4) {
$users[] = HTMLHelper::_('select.option', $idInput4, '- '. $idText4 .' -' );
}
if ($idText3) {
$users[] = HTMLHelper::_('select.option', $idInput3, '- '. $idText3 .' -' );
}
$users[] = HTMLHelper::_('select.option', $idInput1, '- '. $idText1 .' -' );
$users[] = HTMLHelper::_('select.option', $idInput2, '- '. $idText2 .' -' );
$users = array_merge( $users, $db->loadObjectList() );
} else {
$users = $db->loadObjectList();
}
if ($returnArray == 1) {
return $users;
}
$users = HTMLHelper::_('select.genericlist', $users, $name, 'class="form-control" size="4" multiple="multiple"'. $javascript, 'value', 'text', $activeArray, $id );
return $users;
}
/*
* Get list of users to select Owner of the category
*/
public static function usersListOwner( $name, $id, $active, $nouser = 0, $javascript = NULL, $order = 'name', $reg = 1, $returnArray = 0) {
$db = Factory::getDBO();
$and = '';
if ($reg) {
// does not include registered users in the list
$and = ' AND m.group_id != 2';
}
$query = 'SELECT u.id AS value, u.name AS text'
. ' FROM #__users AS u'
. ' JOIN #__user_usergroup_map AS m ON m.user_id = u.id'
. ' WHERE u.block = 0'
. $and
. ' GROUP BY u.id, u.name'
. ' ORDER BY '. $order;
$db->setQuery( $query );
if ( $nouser ) {
$idInput1 = -1;
$idText1 = Text::_( 'COM_PHOCAGALLERY_NOBODY' );
$users[] = HTMLHelper::_('select.option', -1, '- '. $idText1 .' -' );
$users = array_merge( $users, $db->loadObjectList() );
} else {
$users = $db->loadObjectList();
}
if ($returnArray == 1) {
return $users;
}
$users = HTMLHelper::_('select.genericlist', $users, $name, 'class="form-control" size="4" '. $javascript, 'value', 'text', $active, $id );
return $users;
}
/*
* Used for commenting and rating
*/
public static function getNeededAccessLevels() {
$paramsC = ComponentHelper::getParams('com_phocagallery');
$registeredAccessLevel = $paramsC->get( 'registered_access_level', array(2,3,4) );
return $registeredAccessLevel;
}
/*
* Check if user's groups access rights (e.g. user is public, registered, special) can meet needed Levels
*/
public static function isAccess($userLevels, $neededLevels) {
$rightGroupAccess = 0;
// User can be assigned to different groups
foreach($userLevels as $keyuserLevels => $valueuserLevels) {
foreach($neededLevels as $keyneededLevels => $valueneededLevels) {
if ((int)$valueneededLevels == (int)$valueuserLevels) {
$rightGroupAccess = 1;
break;
}
}
if ($rightGroupAccess == 1) {
break;
}
}
return (boolean)$rightGroupAccess;
}
/**
* Method to get the array of values for one parameters saved in param array
* @param string $params
* @param string $param param: e.g. accessuserid, uploaduserid, deleteuserid, userfolder
* @return array of values from one param in params array which is saved in db table in 'params' column
*/
/*///
function getParamsArray($params='', $param='accessuserid') {
// All params from category / params for userid only
if ($params != '') {
$paramsArray = trim ($params);
$paramsArray = explode( ',', $params );
if (is_array($paramsArray))
{
foreach ($paramsArray as $value)
{
$find = '/'.$param.'=/i';
$replace = $param.'=';
$idParam = preg_match( "".$find."" , $value );
if ($idParam) {
$paramsId = str_replace($replace, '', $value);
if ($paramsId != '') {
$paramsIdArray = trim ($paramsId);
$paramsIdArray = explode( ',', $paramsId );
// Unset empty keys
foreach ($paramsIdArray as $key2 => $value2)
{
if ($value2 == '') {
unset($paramsIdArray[$key2]);
}
}
return $paramsIdArray;
}
}
}
}
}
return array();
}*/
}
?>

View File

@ -0,0 +1 @@
<html><body bgcolor="#FFFFFF"></body></html>