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