*
*/
namespace ComboStrap;
use Doku_Form;
use dokuwiki\Form\Form;
use TestRequest;
class Identity
{
const CANONICAL = "identity";
const CONF_ENABLE_LOGO_ON_IDENTITY_FORMS = "enableLogoOnIdentityForms";
const JS_NAVIGATION_ANONYMOUS_VALUE = "anonymous";
const JS_NAVIGATION_SIGNED_VALUE = "signed";
/**
* A javascript indicator
* to know if the user is logged in or not
* (ie public or not)
*/
const JS_NAVIGATION_INDICATOR = "navigation";
const FORM_IDENTITY_CLASS = "form-identity";
/**
* Is logged in
* @return boolean
*/
public static function isLoggedIn()
{
$loggedIn = false;
global $INPUT;
if ($INPUT->server->has('REMOTE_USER')) {
$loggedIn = true;
}
return $loggedIn;
}
/**
* @param TestRequest $request
* @param string $user
*/
public static function becomeSuperUser(&$request = null, $user = 'admin')
{
global $conf;
$conf['useacl'] = 1;
$conf['superuser'] = $user;
$conf['remoteuser'] = $user;
if ($request != null) {
$request->setServer('REMOTE_USER', $user);
}
/**
* used by {@link getSecurityToken()}
*/
global $INPUT;
$INPUT->server->set('REMOTE_USER', $user);
// same as $_SERVER['REMOTE_USER'] = $user;
// $_SERVER[] = $user;
// global $USERINFO;
// $USERINFO['grps'] = array('admin', 'user');
// global $INFO;
// $INFO['ismanager'] = true;
}
/**
* @param $request
* @param string $user - the user to login
*/
public static function logIn(&$request, $user = 'defaultUser')
{
$request->setServer('REMOTE_USER', $user);
/**
* The {@link getSecurityToken()} needs it
*/
global $INPUT;
$INPUT->server->set('REMOTE_USER', $user);
}
/**
* @return bool if edit auth
*/
public static function isWriter($pageId = null): bool
{
if ($pageId == null) {
$pageId = Page::createPageFromGlobalDokuwikiId();
}
if ($_SERVER['REMOTE_USER']) {
$perm = auth_quickaclcheck($pageId);
} else {
$perm = auth_aclcheck($pageId, '', null);
}
if ($perm >= AUTH_EDIT) {
return true;
} else {
return false;
}
}
public static function isAdmin()
{
global $INFO;
if (!empty($INFO)) {
return $INFO['isadmin'];
} else {
return auth_isadmin(self::getUser(), self::getUserGroups());
}
}
public static function isMember($group)
{
return auth_isMember($group, self::getUser(), self::getUserGroups());
}
public static function isManager()
{
global $INFO;
if ($INFO !== null) {
return $INFO['ismanager'];
} else {
/**
* In test
*/
return auth_ismanager();
}
}
public static function getUser(): string
{
global $INPUT;
$user = $INPUT->server->str('REMOTE_USER');
if (empty($user)) {
return "Anonymous";
}
return $user;
}
private static function getUserGroups()
{
global $USERINFO;
return is_array($USERINFO) ? $USERINFO['grps'] : array();
}
/**
* @param Doku_Form|Form $form
* @param string $classPrefix
* @param bool $includeLogo
* @return string
*/
public static function getHeaderHTML($form, $classPrefix, $includeLogo = true)
{
$class = get_class($form);
switch ($class) {
case Doku_Form::class:
/**
* Old one
* @var Doku_Form $form
*/
$legend = $form->_content[0]["_legend"];
if (!isset($legend)) {
return "";
}
$title = $legend;
break;
case Form::class;
/**
* New One
* @var Form $form
*/
$pos = $form->findPositionByType("fieldsetopen");
if ($pos == false) {
return "";
}
$title = $form->getElementAt($pos)->val();
break;
default:
LogUtility::msg("Internal Error: Unknown form class " . $class);
return "";
}
/**
* Logo
*/
$logoHtmlImgTag = "";
if (
PluginUtility::getConfValue(Identity::CONF_ENABLE_LOGO_ON_IDENTITY_FORMS, 1)
&&
$includeLogo === true
) {
$logoHtmlImgTag = Site::getLogoHtml();
}
/**
* Don't use `header` in place of
* div because this is a HTML5 tag
*
* On php 5.6, the php test library method {@link \phpQueryObject::htmlOuter()}
* add the below meta tag
*
*
*/
return <<