<?php
/**
 * Administration panel - Rights by item editor
 *
 * @package Cotonti
 * @copyright (c) Cotonti Team
 * @license https://github.com/Cotonti/Cotonti/blob/master/License.txt
 */

(defined('COT_CODE') && defined('COT_ADMIN')) or die('Wrong URL.');

list($usr['auth_read'], $usr['auth_write'], $usr['isadmin']) = cot_auth('users', 'a');
$usr['isadmin'] &= cot_auth('admin', 'a', 'A');
if ($usr['maingrp'] == COT_GROUP_SUPERADMINS)
{
	$usr['auth_read'] = true;
	$usr['auth_write'] = true;
	$usr['isadmin'] = true;
}
cot_block($usr['isadmin']);

$t = new XTemplate(cot_tplfile('admin.rightsbyitem', 'core'));

$ic = cot_import('ic', 'G', 'ALP');
$io = cot_import('io', 'G', 'ALP');
$advanced = cot_import('advanced', 'G', 'BOL');

$L['adm_code']['admin'] = $L['Administration'];
$L['adm_code']['message'] = $L['Messages'];

/* === Hook === */
foreach (cot_getextplugins('admin.rightsbyitem.first') as $pl)
{
	include $pl;
}
/* ===== */

if ($a == 'update')
{
	$mask = array();
	$auth = cot_import('auth', 'P', 'ARR');

	/* === Hook === */
	foreach (cot_getextplugins('admin.rightsbyitem.update') as $pl)
	{
		include $pl;
	}
	/* ===== */

	$db->update($db_auth, array('auth_rights' => 0), "auth_code='$ic' AND auth_option='$io'");

	foreach ($auth as $i => $j)
	{
		if (is_array($j))
		{
			$mask = 0;
			foreach ($j as $l => $m)
			{
				$mask += cot_auth_getvalue($l);
			}
			$i = (int) $i;
			$db->update($db_auth, array('auth_rights' => $mask),
				"auth_groupid=$i AND auth_code='$ic' AND auth_option='$io'");
		}
	}

	cot_auth_reorder();
	cot_auth_clear('all');

	cot_message('Updated');
}

$sql = $db->query("SELECT a.*, u.user_name, g.grp_name, g.grp_level FROM $db_auth as a
	LEFT JOIN $db_users AS u ON u.user_id=a.auth_setbyuserid
	LEFT JOIN $db_groups AS g ON g.grp_id=a.auth_groupid
	WHERE auth_code='$ic' AND auth_option='$io' AND grp_skiprights = 0 ORDER BY grp_level DESC, grp_id DESC");

cot_die($sql->rowCount() == 0);

if($ic == 'plug')
{
	$title = ' : '.$io;
}
elseif($io != 'a' && !empty($ic))
{
	$title = ' : '.$ic.' '.$structure[$ic][$io]['title']." (".$io.")";
}

/* === Hook for the plugins === */
foreach (cot_getextplugins('admin.rightsbyitem.case') as $pl)
{
	include $pl;
}
/* ===== */
if($ic == 'message' || $ic == 'admin')
{
	$adminpath[] = array(cot_url('admin'), $L['adm_code'][$ic]);
}
else
{
	$adminpath[] = array(cot_url('admin', 'm=extensions'), $L['Extensions']);
	if($ic == 'plug')
	{
		$adminpath[] = array(cot_url('admin', 'm=extensions&a=details&pl='.$io), $cot_plugins_enabled[$io]['title']);
	}
	elseif($ic == 'structure')
	{
		$adminpath[] = array(cot_url('admin', 'm=structure'), $L['Structure']);
	}	
	else
	{
		$adminpath[] = array(cot_url('admin', 'm=extensions&a=details&mod='.$ic), $cot_modules[$ic]['title']);
		if($io != 'a')
		{
			$adminpath[] = array(cot_url('admin', 'm=structure&n='.$ic), $L['Structure']);
			$adminpath[] = array(cot_url('admin', 'm=structure&n='.$ic.'&al='.$io), $structure[$ic][$io]['title']);
		}
	}
}

//m=extensions&a=details&mod=page
$adminpath[] = array(cot_url('admin', 'm=rightsbyitem&ic='.$ic.'&io='.$io), $L['Rights']);
($advanced) && $adminpath[] = array(cot_url('admin', 'm=rightsbyitem&ic='.$ic.'&io='.$io.'&advanced=1'), $L['More']);
$adminsubtitle = $L['Rights'];

$adv_columns = ($advanced) ? 8 : 3;
$adv_columns = (!$advanced && $ic == 'page') ? 4 : $adv_columns;

$l_custom1 = ($ic == 'page') ? $L['Download'] : $L['Custom'].' #1';

while ($row = $sql->fetch())
{
	$link = cot_url('admin', 'm=rights&g='.$row['auth_groupid']);
	$title = htmlspecialchars($row['grp_name']);
	cot_rights_parseline($row, $title, $link);
}
$sql->closeCursor();

$is_adminwarnings = isset($adminwarnings);
$adv_for_url = ($advanced) ? '&advanced=1' : '';

$t->assign(array(
	'ADMIN_RIGHTSBYITEM_FORM_URL' => cot_url('admin', 'm=rightsbyitem&a=update&ic='.$ic.'&io='.$io.$adv_for_url),
	'ADMIN_RIGHTSBYITEM_ADVANCED_URL' => cot_url('admin', 'm=rightsbyitem&ic='.$ic.'&io='.$io.'&advanced=1'),
	'ADMIN_RIGHTSBYITEM_ADV_COLUMNS' => $adv_columns,
	'ADMIN_RIGHTSBYITEM_4ADV_COLUMNS' => 4 + $adv_columns
));

cot_display_messages($t);

/* === Hook === */
foreach (cot_getextplugins('admin.rightsbyitem.tags') as $pl)
{
	include $pl;
}
/* ===== */

$t->parse('MAIN');
$adminmain = $t->text('MAIN');

$t->parse('RIGHTSBYITEM_HELP');
$adminhelp = $t->text('RIGHTSBYITEM_HELP');

function cot_rights_parseline($row, $title, $link)
{
	global $L, $advanced, $t, $out, $ic;

	$mn['R'] = 1;
	$mn['W'] = 2;

	if ($advanced || $ic == 'page')
	{
		$mn['1'] = 4;
	}
	else
	{
		$rv['1'] = 4;
	}

	if ($advanced)
	{
		$mn['2'] = 8;
		$mn['3'] = 16;
		$mn['4'] = 32;
		$mn['5'] = 64;
	}
	else
	{
		$rv['2'] = 8;
		$rv['3'] = 16;
		$rv['4'] = 32;
		$rv['5'] = 64;
	}
	$mn['A'] = 128;

	foreach ($mn as $code => $value)
	{
		$state[$code] = (($row['auth_rights'] & $value) == $value) ? TRUE : FALSE;
		$locked[$code] = (($row['auth_rights_lock'] & $value) == $value) ? TRUE : FALSE;
		$out['tpl_rights_parseline_locked'] = $locked[$code];
		$out['tpl_rights_parseline_state'] = $state[$code];

		$t->assign(array(
			'ADMIN_RIGHTSBYITEM_ROW_ITEMS_NAME' => 'auth['.$row['auth_groupid'].']['.$code.']',
			'ADMIN_RIGHTSBYITEM_ROW_ITEMS_CHECKED' => ($state[$code]) ? " checked=\"checked\"" : '',
			'ADMIN_RIGHTSBYITEM_ROW_ITEMS_DISABLED' => ($locked[$code]) ? " disabled=\"disabled\"" : ''
		));
		$t->parse('MAIN.RIGHTSBYITEM_ROW.ROW_ITEMS');
	}

	if (!$advanced)
	{
		$preserve = '';
		foreach ($rv as $code => $value)
		{
			if (($row['auth_rights'] & $value) == $value)
			{
				$preserve .= '<input type="hidden" name="auth['.$row['auth_groupid'].']['.$code.']" value="1" />';
			}
		}
		$t->assign('ADMIN_RIGHTSBYITEM_ROW_PRESERVE', $preserve);
	}

	$t->assign(array(
		'ADMIN_RIGHTSBYITEM_ROW_TITLE' => $title,
		'ADMIN_RIGHTSBYITEM_ROW_LINK' => $link,
		'ADMIN_RIGHTSBYITEM_ROW_USER' => cot_build_user($row['auth_setbyuserid'], htmlspecialchars($row['user_name'])),
		'ADMIN_RIGHTSBYITEM_ROW_JUMPTO' => cot_url('users', 'g='.$row['auth_groupid']),
	));
	$t->parse('MAIN.RIGHTSBYITEM_ROW');
}
