primo commit
This commit is contained in:
@ -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();
|
||||
}*/
|
||||
}
|
||||
?>
|
||||
@ -0,0 +1 @@
|
||||
<html><body bgcolor="#FFFFFF"></body></html>
|
||||
Reference in New Issue
Block a user