<?php

namespace Uhura\Grossmarkt\Backend\Services;

use TYPO3\CMS\Backend\Utility\BackendUtility;
use TYPO3\CMS\Core\Utility\GeneralUtility;

/**
 * Class BackendUserAccess
 */
class BackendUserAccess
{
	/**
	 * @param $pageUid
	 * @param $table
	 * @return bool
	 */
	public static function isUserHaveCreateContentPermissions($pageUid, $table = 'tx_news_domain_model_news')
	{
		if($GLOBALS['BE_USER']->isAdmin()){
			return true;
		}
		return self::checkPermissionsFromTs($pageUid, $table, 'disableCreateNonAdminForPages', 'disableCreateNonAdminForRecords');
	}

	/**
	 * @param $pageUid
	 * @param $table
	 * @return bool
	 */
	public static function isUserHaveDeleteContentPermissions($pageUid, $table = 'tx_news_domain_model_news')
	{
		if($GLOBALS['BE_USER']->isAdmin()){
			return true;
		}
		return self::checkPermissionsFromTs($pageUid, $table, 'disableDeleteNonAdminForPages', 'disableDeleteNonAdminForRecords');
	}

	/**
	 * @param $pageUid
	 * @return array
	 */
	public static function getTsConfig($pageUid)
	{
		return BackendUtility::getPagesTSconfig($pageUid);
	}

	/**
	 * Check permissions for non admin from tsConfig
	 * Example:
	 * mod.web_list.disableCreateNonAdminForPages := addToList(2, 5)
	 * mod.web_list.disableCreateNonAdminForRecords := addToList(tx_news_domain_model_news, sys_category)
	 * mod.web_list.disableDeleteNonAdminForPages := addToList(2, 16, 26, 35)
	 * mod.web_list.disableDeleteNonAdminForRecords := addToList(tx_news_domain_model_news, sys_category)
	 *
	 * @param $pageUid
	 * @param $table
	 * @param $pagesKey
	 * @param $recordsKey
	 * @return bool
	 */
	public static function checkPermissionsFromTs($pageUid, $table, $pagesKey, $recordsKey)
	{
		$tsConfig = self::getTsConfig($pageUid);
		if (isset($tsConfig['mod.']['web_list.'][$pagesKey])
			&& $tsConfig['mod.']['web_list.'][$pagesKey]
			&& isset($tsConfig['mod.']['web_list.'][$recordsKey])
			&& $tsConfig['mod.']['web_list.'][$recordsKey]
		) {
			$pagesUids = GeneralUtility::trimExplode(',',$tsConfig['mod.']['web_list.'][$pagesKey]);
			$restrictedTables = GeneralUtility::trimExplode(',',$tsConfig['mod.']['web_list.'][$recordsKey]);

			if(in_array($pageUid, $pagesUids) && in_array($table, $restrictedTables) ){
				return false;
			}
		}

		return true;
	}
}