sintonia/htmlUI/ui_subjects.class.php

359 lines
9.9 KiB
PHP

<?php
/**
* @package Campcaster
* @subpackage htmlUI
*/
class uiSubjects
{
public $Base;
private $reloadUrl;
private $suRedirUrl;
private $redirUrl;
public function __construct(&$uiBase)
{
$this->Base =& $uiBase;
$this->reloadUrl = UI_BROWSER.'?popup[]=_reload_parent&popup[]=_close';
$this->suRedirUrl = UI_BROWSER.'?act=SUBJECTS';
$this->redirUrl = UI_BROWSER.'?act=SUBJECTS';
}
public function setReload()
{
$this->Base->redirUrl = $this->reloadUrl;
}
public function setSuRedir()
{
$this->Base->redirUrl = $this->suRedirUrl;
}
public function setRedir()
{
$this->Base->redirUrl = $this->redirUrl;
}
public function getSubjectName($p_name)
{
return Subjects::GetSubjName($p_name);
}
/**
* Create a form to add GreenBox subjects (users/groups).
*
* @param unknown $type
* @return string (html)
*/
public function getAddSubjForm($type)
{
include(dirname(__FILE__). '/formmask/subjects.inc.php');
$form = new HTML_QuickForm('addSubject', UI_STANDARD_FORM_METHOD, UI_HANDLER);
uiBase::parseArrayToForm($form, $mask[$type]);
$renderer = new HTML_QuickForm_Renderer_Array(true, true);
$form->accept($renderer);
return $renderer->toArray();
}
/**
* Create a new user or group (empty password => create group).
*
* @param array $request
* Must have keys -> value:
* login - string
* passwd - string
* @return string
*/
public function addSubj($request)
{
include(dirname(__FILE__). '/formmask/subjects.inc.php');
$this->setRedir();
if ($this->Base->_validateForm($request, $mask[$request['passwd'] ? 'addUser' : 'addGroup']) !== TRUE) {
return FALSE;
}
if (Alib::CheckPerm($this->Base->userid, 'subjects') !== TRUE) {
$this->Base->_retMsg('Access denied.');
return FALSE;
}
if (Subjects::GetSubjId($request['login'])) {
$this->Base->_retMsg('User or group "$1" already exists.', $request['login']);
$this->Base->redirUrl = $_SERVER['HTTP_REFERER'];
return FALSE;
}
$tmpPassword = $request['passwd']==='' ? NULL : $request['passwd'];
$res = BasicStor::addSubj($request['login'], $tmpPassword);
if (PEAR::isError($res)) {
$this->Base->_retMsg($res->getMessage());
return FALSE;
}
if (UI_VERBOSE) {
if ($request['passwd']) {
$this->Base->_retMsg('User "$1" added.', $request['login']);
} else {
$this->Base->_retMsg('Group "$1" added.', $request['login']);
}
}
return TRUE;
}
/**
* Remove an existing user or group.
*
* @todo Renamed this function to "removeSubject".
* @param array $request
* must contain the "login" key,
* a string, the login name of removed user
* @return boolean
*/
public function removeSubj($request)
{
$this->setReload();
if (Alib::CheckPerm($this->Base->userid, 'subjects') !== TRUE) {
$this->Base->_retMsg('Access denied.');
return FALSE;
}
if (PEAR::isError($res = $this->Base->gb->removeSubj($request['login']))) {
$this->Base->_retMsg($res->getMessage());
return FALSE;
}
return TRUE;
}
/**
* Create a form to change user-passwords in GreenBox.
*
* @param string $login
* @param boolean $su
* this parameter isnt used
* @return string
* HTML string
*/
public function getChgPasswdForm($login, $su = FALSE)
{
include(dirname(__FILE__). '/formmask/subjects.inc.php');
$form = new HTML_QuickForm('chgPasswd', UI_STANDARD_FORM_METHOD, UI_HANDLER);
if (Alib::CheckPerm($this->Base->userid, 'subjects') === TRUE) {
$mask['chgPasswd']['cancel']['attributes'] = array('onClick' => 'location.href="'.UI_BROWSER.'?act=SUBJECTS"');
unset ($mask['chgPasswd']['oldpasswd']);
} else {
$mask['chgPasswd']['cancel']['attributes'] = array('onClick' => 'location.href="'.UI_BROWSER.'"');
}
uiBase::parseArrayToForm($form, $mask['chgPasswd']);
$form->setConstants(array('login' => $login));
$renderer = new HTML_QuickForm_Renderer_Array(true, true);
$form->accept($renderer);
return $renderer->toArray();
}
/**
* Change password for specified user.
*
* @todo Rename this function to "changePassword".
* @param array $request
* Required array keys: passwd, passwd2, login, oldpasswd
* @return boolean
*/
public function chgPasswd($request)
{
if ($request['passwd'] !== $request['passwd2']) {
$this->Base->_retMsg("Passwords did not match.");
$this->Base->redirUrl = $_SERVER['HTTP_REFERER'];
return FALSE;
}
if (Alib::CheckPerm($this->Base->userid, 'subjects')) {
$this->setSuRedir();
} else {
$this->setRedir();
if ($this->Base->login !== $request['login']) {
$this->Base->_retMsg('Access denied.');
return FALSE;
}
if (Subjects::Authenticate($request['login'], $request['oldpasswd']) === FALSE) {
$this->Base->_retMsg('Old password was incorrect.');
$this->Base->redirUrl = $_SERVER['HTTP_REFERER'];
return FASLE;
}
}
if (PEAR::isError($ret = $this->Base->gb->passwd($request['login'], $request['oldpasswd'], $request['passwd'], $this->Base->sessid))) {
$this->Base->_retMsg($ret->getMessage());
return FALSE;
}
if (UI_VERBOSE) {
$this->Base->_retMsg('Password changed.');
}
return TRUE;
}
/**
* Get all GreenBox subjects (users/groups)
*
* @todo Rename this function.
* @return array
* subj=>unique id of subject
* loggedAs=>corresponding login name
*/
public function getSubjectsWCnt()
{
return Subjects::GetSubjectsWCnt();
}
/**
* Get a list of groups that the user belongs to.
*
* @todo Rename this function to "getGroupMembers"
* @param int $id
* local user ID
* @return array
*/
public function getGroupMember($id)
{
return Subjects::ListGroup($id);
} // fn getGroupMember
/**
* Get a list of groups that the user does not belong to.
*
* @param int $id
* Local user ID
* @return array
*/
public function getNonGroupMember($id)
{
foreach (Subjects::ListGroup($id) as $val1) {
$members[$val1['id']] = TRUE;
}
$all = Subjects::GetSubjectsWCnt();
foreach ($all as $key2=>$val2) {
if ($members[$val2['id']]) {
unset($all[$key2]);
}
}
return $all;
} // fn getNonGroupMember
/**
* Add a subject to a group.
*
* @todo Rename this function to "addSubjectToGroup"
* @param array $request
* Required array keys: login, id, gname
* @return boolean
*/
public function addSubj2Gr(&$request)
{
$this->setReload();
if (!$request['login'] && !$request['id']) {
$this->Base->_retMsg('Nothing selected.');
return FALSE;
}
// loop for multiple action
if (is_array($request['id'])) {
foreach ($request['id'] as $val) {
$req = array('login' => Subjects::GetSubjName($val), 'gname' => $request['gname']);
$this->addSubj2Gr($req);
}
return TRUE;
}
if (Alib::CheckPerm($this->Base->userid, 'subjects') !== TRUE){
$this->Base->_retMsg('Access denied.');
return FALSE;
}
if (PEAR::isError($res = Subjects::AddSubjectToGroup($request['login'], $request['gname']))) {
$this->Base->_retMsg($res->getMessage());
return FALSE;
}
return TRUE;
}
/**
* Remove a subject from a group.
*
* @param array $request
* Required keys: login, id, gname
* @return boolean
*/
public function removeSubjFromGr(&$request)
{
$this->setReload();
if (!$request['login'] && !$request['id']) {
$this->Base->_retMsg('Nothing selected.');
return FALSE;
}
// loop for multiple action
if (is_array($request['id'])) {
foreach ($request['id'] as $val) {
$req = array('login' => Subjects::GetSubjName($val), 'gname' => $request['gname']);
$this->removeSubjFromGr($req);
}
return TRUE;
}
if (Alib::CheckPerm($this->Base->userid, 'subjects') !== TRUE){
$this->Base->_retMsg('Access denied.');
return FALSE;
}
if (PEAR::isError($res = Subjects::RemoveSubjectFromGroup($request['login'], $request['gname']))) {
$this->Base->_retMsg($res->getMessage());
return FALSE;
}
return TRUE;
}
/**
* Return true if the subject is a member of the given group.
*
* @param string $groupname
* @return boolean
*/
public function isMemberOf($groupname)
{
if ($gid = Subjects::GetSubjId($groupname)) {
$members = $this->getGroupMember($gid);
if (is_array($members)) {
foreach($members as $member) {
if ($member['id'] === $this->Base->userid) {
return true;
}
}
}
}
return false;
} // fn isMemberOf
} // class uiSubjects
?>