Files
thetempusproject/app/controllers/admin/users.php
2024-08-04 21:15:59 -04:00

157 lines
6.0 KiB
PHP

<?php
/**
* app/controllers/admin/users.php
*
* This is the users admin controller.
*
* @version 3.0
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
*/
namespace TheTempusProject\Controllers\Admin;
use TheTempusProject\Bedrock\Functions\Check;
use TheTempusProject\Bedrock\Functions\Input;
use TheTempusProject\Bedrock\Functions\Code;
use TheTempusProject\Bedrock\Functions\Hash;
use TheTempusProject\Houdini\Classes\Navigation;
use TheTempusProject\Houdini\Classes\Components;
use TheTempusProject\Houdini\Classes\Forms;
use TheTempusProject\Houdini\Classes\Issues;
use TheTempusProject\Houdini\Classes\Views;
use TheTempusProject\Bedrock\Classes\Config;
use TheTempusProject\Classes\Forms as FormChecker;
use TheTempusProject\Classes\AdminController;
use TheTempusProject\Models\User;
use TheTempusProject\Models\Group;
use TheTempusProject\TheTempusProject as App;
class Users extends AdminController {
public static $user;
public static $group;
public function __construct() {
parent::__construct();
self::$title = 'Admin - Users';
self::$user = new User;
self::$group = new Group;
$view = Navigation::activePageSelect( 'nav.admin', '/admin/users' );
Components::set( 'ADMINNAV', $view );
}
public function create() {
if ( Input::exists( 'submit' ) ) {
if ( !FormChecker::check( 'createUser' ) ) {
Issues::add( 'error', [ 'There was an error with your request.' => Check::userErrors() ] );
} else {
$fields = [
'username' => Input::post( 'username' ),
'password' => Hash::make( Input::post( 'password' ) ),
'email' => Input::post( 'email' ),
'userGroup' => Input::post( 'groupSelect' ),
'terms' => 0,
];
if ( !Input::exists( 'confirmation' ) ) {
$fields['confirmed'] = 1;
}
if ( self::$user->create( $fields ) ) {
Issues::add( 'success', 'User Created' );
return $this->index();
} else {
Issues::add( 'error', 'There was an error creating the user' );
}
}
}
$select = Forms::getFormFieldHtml( 'groupSelect', 'User Group', 'select', Config::getValue( 'group/defaultGroup' ), self::$group->listGroupsSimple() );
Components::set( 'groupSelect', $select );
Views::view( 'admin.users.create' );
}
public function delete( $id = null ) {
if ( Input::exists( 'submit' ) ) {
$id = Input::post( 'U_' );
}
if ( self::$user->delete( $id ) ) {
Issues::add( 'success', 'User deleted' );
} else {
Issues::add( 'error', 'There was an error deleting user(s)' );
}
$this->index();
}
public function edit( $id = null ) {
if ( !Check::id( $id ) ) {
return Issues::add( 'error', 'Invalid user' );
}
$userData = self::$user->findById( $id );
if ( in_array( $userData->groupName, self::$group::$protectedGroups ) ) {
switch ( $userData->groupName ) {
case 'Super':
if ( 'Super' !== App::$activeGroup->name ) {
Issues::add( 'error', 'You do not have permission to do that.' );
return $this->index();
}
case 'Admin':
if ( 'Super' !== App::$activeGroup->name ) {
Issues::add( 'error', 'You do not have permission to do that.' );
return $this->index();
}
}
}
if ( Input::exists( 'submit' ) ) {
if ( !FormChecker::check( 'editUser' ) ) {
Issues::add( 'error', [ 'There was an error with your request.' => Check::userErrors() ] );
} else {
$fields = [
'username' => Input::post( 'username' ),
'email' => Input::post( 'email' ),
'userGroup' => Input::post( 'groupSelect' ),
];
if ( Input::exists( 'confirmed' ) ) {
$fields['confirmed'] = 1;
} else {
if ( Input::exists( 'confirmation' ) ) {
$fields['confirmationCode'] = Code::genConfirmation();
}
}
if ( self::$user->update( $userData->ID, $fields ) ) {
Issues::add( 'success', 'User Updated.' );
return $this->index();
} else {
Issues::add( 'notice', 'There was an error with your request, please try again.' );
}
}
}
if ( empty( $avatarLocation ) ) {
$avatarLocation = $userData->prefs['avatar'];
}
if ( empty( $userGroup ) ) {
$userGroup = $userData->userGroup;
}
Forms::selectRadio( 'confirmed', $userData->confirmed );
$avatar = Forms::getFormFieldHtml( 'avatar', 'User Avatar', 'file', $avatarLocation );
$select = Forms::getFormFieldHtml( 'groupSelect', 'User Group', 'select', $userGroup, self::$group->listGroupsSimple() );
Components::set( 'AvatarSettings', $avatar );
Components::set( 'groupSelect', $select );
Views::view( 'admin.users.edit', $userData );
}
public function index() {
Views::view( 'admin.users.list', self::$user->userList() );
}
public function view( $id = null ) {
if ( !empty( $id ) ) {
$userData = self::$user->findById( $id );
if ( $userData !== false ) {
return Views::view( 'admin.users.view', $userData );
}
Issues::add( 'error', 'User not found.' );
}
$this->index();
}
}