Skip to content

Commit

Permalink
fix: cleaning up code
Browse files Browse the repository at this point in the history
  • Loading branch information
Adam Buckley committed Mar 5, 2024
1 parent 6d6056a commit 838012e
Show file tree
Hide file tree
Showing 8 changed files with 122 additions and 200 deletions.
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,3 @@
/system/tests/composer.lock
/system/tests/support/_generated
system/system
system/templates/base/package-lock.json
37 changes: 2 additions & 35 deletions system/classes/html/form/Banner.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,10 @@ class Banner extends \Html\Form\FormElement

use \Html\GlobalAttributes, \Html\Events;

public $form;
public $name;
public $required;
public $value;

static $_excludeFromOutput = ["value", "label"];
static $_excludeFromOutput = ["value"];

/**
* Returns built string of Banner field
Expand All @@ -40,50 +38,19 @@ public function __toString()
return $buffer . '>' . $this->value . '</div>';
}

/**
* The form element that the Banner is associated with (its
* "form owner"). The value of the attribute must be the ID of a form
* element in the same document. If this attribute is not specified, the
* <textarea> element must be a descendant of a form element. This attribute
* enables you to place <textarea> elements anywhere within a document, not
* just as descendants of their form elements.
*
* @param string $form
* @return \Html\Form\Banner
*/
public function setForm($form)
{
$this->form = $form;

return $this;
}

/**
* The name of the control.
*
* @param string $name
* @return \Html\Form\Banner
*/
public function setname($name)
public function setName($name)
{
$this->name = $name;

return $this;
}

/**
* This attribute is required by HtmlBootstrap5::multiColForm(...)
*
* @param string $required
* @return \Html\Form\Banner
*/
public function setRequired($required)
{
$this->required = $required;

return $this;
}

/**
* The raw value contained in the control.
*
Expand Down
85 changes: 35 additions & 50 deletions system/modules/admin/actions/groups.php
Original file line number Diff line number Diff line change
@@ -1,66 +1,51 @@
<?php

/**
* Display a list of all groups which are not deleted
*
* @param <type> $w
*/
* Display a list of all groups which are not deleted
*
* @param <type> $w
*/
function groups_GET(Web &$w)
{
AdminService::getInstance($w)->navigation($w,"Groups");
AdminService::getInstance($w)->navigation($w, "Groups");

$table = array(array("Title", "Parent Groups", "Operations", "sort_key" => null));
$table = [["Title", "Parent Groups", "Operations", "sort_key" => null]];

$groups = AuthService::getInstance($w)->getGroups();
$groups = AuthService::getInstance($w)->getGroups();

if ($groups)
{
foreach ($groups as $group)
{
$ancestors = array();

$line = array();
if ($groups) {
usort($groups, function ($a, $b) {
return strcasecmp($a->login, $b->login);
});

$line[] = AuthService::getInstance($w)->user()->is_admin ? Html::box($w->localUrl("/admin/groupedit/".$group->id),"<u>".$group->login."</u>") : $group->login;
//if it is a sub group from other group;
$groupUsers = $group->isInGroups();
foreach ($groups as $group) {
$ancestors = [];

if ($groupUsers)
{
foreach ($groupUsers as $groupUser)
{
$ancestors[] = $groupUser->getGroup()->login;
}
}
$line[] = count($ancestors) > 0 ? "<div style=\"color:green;\">".implode(", ", $ancestors)."</div>" : "";
$line = [AuthService::getInstance($w)->user()->is_admin ? Html::box($w->localUrl("/admin/groupedit/" . $group->id), "<u>" . $group->login . "</u>") : $group->login];
//if it is a sub group from other group;
$groupUsers = $group->isInGroups();

$operations = Html::b("/admin/moreInfo/".$group->id,"Edit");

if (AuthService::getInstance($w)->user()->is_admin)
$operations .= Html::b("/admin/groupdelete/".$group->id,"Delete","Are you sure you want to delete this group?");
if ($groupUsers) {
foreach ($groupUsers as $groupUser) {
$ancestors[] = $groupUser->getGroup()->login;
}
}
$line[] = count($ancestors) > 0 ? "<div class='text-success'>" . implode(", ", $ancestors) . "</div>" : "";

$line[] = $operations;
$operations = Html::b("/admin/moreInfo/" . $group->id, "Edit");

$line["sort_key"] = strtoupper($group->login);

$table[] = $line;
}
}
if (AuthService::getInstance($w)->user()->is_admin) {
$operations .= Html::b("/admin/groupdelete/" . $group->id, "Delete", "Are you sure you want to delete this group?");
}

if (AuthService::getInstance($w)->user()->is_admin)
{
$w->out(Html::box("/admin/groupadd", "New Group", true));
}
$line[] = $operations;
$table[] = $line;
}
}

// Order by sort key (group name in uppercase)
array_multisort(
array_column($table, "sort_key"),
SORT_ASC,
$table
);
// Remove sort column
for ($i = 0, $length = count($table); $i < $length; ++$i) {
unset($table[$i]["sort_key"]);
}
if (AuthService::getInstance($w)->user()->is_admin) {
$w->out(Html::box("/admin/groupadd", "New Group", true));
}

$w->out(Html::table($table,null,"tablesorter",true));
$w->out(Html::table($table, null, "tablesorter", true));
}
102 changes: 46 additions & 56 deletions system/modules/admin/actions/moreInfo.php
Original file line number Diff line number Diff line change
@@ -1,61 +1,51 @@
<?php

/**
* Display member and permission infomation
*
* @param <type> $w
*/
* Display member and permission infomation
*
* @param <type> $w
*/
function moreInfo_GET(Web &$w)
{
$option = $w->pathMatch("group_id");

AdminService::getInstance($w)->navigation($w, AuthService::getInstance($w)->getUser($option['group_id'])->login);

if (AuthService::getInstance($w)->user()->is_admin || AuthService::getInstance($w)->getRoleForLoginUser($option['group_id'], AuthService::getInstance($w)->user()->id) == "owner")
{
$w->ctx("addMember", Html::box("/admin/groupmember/".$option['group_id'],"New Member",true));
}
$w->ctx("editPermission", Html::b("/admin/permissionedit/".$option['group_id'],"Edit Permissions"));

//fill in member table;
$table = array(array("Name","Role","Operations", "sort_key" => null));

$groupMembers = AuthService::getInstance($w)->getGroupMembers($option['group_id']);

if ($groupMembers)
{
foreach ($groupMembers as $groupMember)
{
$line = array();

$style = $groupMember->role == "owner" ? "<div style=\"color:red;\">" : "<div style=\"color:blue;\">";

$name = $groupMember->getUser()->is_group == 1 ? $groupMember->getUser()->login : $groupMember->getUser()->getContact()->getFullName();

$line[] = $style.$name."</div>";
$line[] = $style.$groupMember->role."</div>";

if (AuthService::getInstance($w)->user()->is_admin || AuthService::getInstance($w)->getRoleForLoginUser($option['group_id'], AuthService::getInstance($w)->user()->id) == "owner")
{
$line[] = Html::a("/admin/memberdelete/".$option['group_id']."/".$groupMember->id,"Delete",null,null,"Are you sure you want to delete this member?");
}
else
{
$line[] = null;
}
$line["sort_key"] = strtoupper($name);
$table[] = $line;
}
}
// Order by sort key (name/group in uppercase)
array_multisort(
array_column($table, "sort_key"),
SORT_ASC,
$table
);
// Remove sort column
for ($i = 0, $length = count($table); $i < $length; ++$i) {
unset($table[$i]["sort_key"]);
}

$w->ctx("memberList", Html::table($table,null,"tablesorter",true));
$option = $w->pathMatch("group_id");

AdminService::getInstance($w)->navigation($w, AuthService::getInstance($w)->getUser($option['group_id'])->login);

if (AuthService::getInstance($w)->user()->is_admin || AuthService::getInstance($w)->getRoleForLoginUser($option['group_id'], AuthService::getInstance($w)->user()->id) == "owner") {
$w->ctx("addMember", Html::box("/admin/groupmember/" . $option['group_id'], "New Member", true));
}
$w->ctx("editPermission", Html::b("/admin/permissionedit/" . $option['group_id'], "Edit Permissions"));

//fill in member table;
$table = array(array("Name", "Role", "Operations", "sort_key" => null));

$groupMembers = AuthService::getInstance($w)->getGroupMembers($option['group_id']);

if ($groupMembers) {
usort($groupMembers, function ($a, $b) {
$user_a = $a->getUser();
$user_b = $b->getUser();
$compare_a = $user_a->is_group == 1 ? $user_a->login : $user_a->getContact()->getFullName();
$compare_b = $user_b->is_group == 1 ? $user_b->login : $user_b->getContact()->getFullName();
return strcasecmp($compare_a, $compare_b);
});

foreach ($groupMembers as $groupMember) {
$line = [];

$style = $groupMember->role == "owner" ? "<div class='text-primary'>" : "<div>";

$line[] = $style . $groupMember->getUser()->is_group == 1 ? $groupMember->getUser()->login : $groupMember->getUser()->getContact()->getFullName() . "</div>";
$line[] = $style . $groupMember->role . "</div>";

if (AuthService::getInstance($w)->user()->is_admin || AuthService::getInstance($w)->getRoleForLoginUser($option['group_id'], AuthService::getInstance($w)->user()->id) == "owner") {
$line[] = Html::a("/admin/memberdelete/" . $option['group_id'] . "/" . $groupMember->id, "Delete", null, null, "Are you sure you want to delete this member?");
} else {
$line[] = null;
}
$table[] = $line;
}
}

$w->ctx("memberList", Html::table($table, null, "tablesorter", true));
}
46 changes: 26 additions & 20 deletions system/modules/auth/models/AuthService.php
Original file line number Diff line number Diff line change
Expand Up @@ -504,14 +504,7 @@ public function getUsersForRole($role)

public function getGroups()
{
$rows = $this->_db->get("user")->where(['is_active' => 1, 'is_deleted' => 0, 'is_group' => 1])->fetchAll();

if ($rows) {
$objects = $this->fillObjects("User", $rows);

return $objects;
}
return null;
return $this->getObjects("User", ['is_active' => 1, 'is_deleted' => 0, 'is_group' => 1]);
}

public function getGroupMembers($group_id = null, $user_id = null)
Expand All @@ -524,22 +517,12 @@ public function getGroupMembers($group_id = null, $user_id = null)
$option['user_id'] = $user_id;
}

$groupMembers = $this->getObjects("GroupUser", $option, true);

if ($groupMembers) {
return $groupMembers;
}
return null;
return $this->getObjects("GroupUser", $option, true);
}

public function getGroupMemberById($id)
{
$groupMember = $this->getObject("GroupUser", $id);

if ($groupMember) {
return $groupMember;
}
return null;
return $this->getObject("GroupUser", $id);
}

public function getRoleForLoginUser($group_id, $user_id)
Expand All @@ -558,4 +541,27 @@ public function getSettingByKey(string $key)
return $this->getObject('UserSetting', ['user_id' => $this->user()->id, 'setting_key' => $key]);
}
}

/**
* Function to recursively check if a user is a member of a group (or parent group)
*
* @param int|string $group_id
* @param int|string $user_id
* @return bool
*/
public function isUserGroupMemberRecursive(int|string $group_id, int|string $user_id) : bool {
$groupMembers = $this->getGroupMembers($group_id);
if (!empty($groupMembers)) {
foreach ($groupMembers as $groupMember) {
if ($groupMember->user_id === $user_id) {
return true;
} elseif ($this->getUser($groupMember->user_id)->is_group) {
if ($this->isUserGroupMemberRecursive($groupMember->user_id, $user_id)) {
return true;
}
}
}
}
return false;
}
}
Loading

0 comments on commit 838012e

Please sign in to comment.