isLoggedIn()){ if(!$user->canViewACP()){ // No Redirect::to(URL::build('/')); die(); } if(!$user->isAdmLoggedIn()){ // Needs to authenticate Redirect::to(URL::build('/panel/auth')); die(); } else { if(!$user->hasPermission('admincp.users.edit')){ require_once(ROOT_PATH . '/404.php'); die(); } } } else { // Not logged in Redirect::to(URL::build('/login')); die(); } if(!isset($_GET['id']) || !is_numeric($_GET['id'])){ Redirect::to(URL::build('/panel/users')); die(); } $user_id = $_GET['id']; $user_query = $queries->getWhere('users', array('id', '=', $user_id)); if(!count($user_query)){ Redirect::to(URL::build('/panel/users')); die(); } $user_query = $user_query[0]; define('PAGE', 'panel'); define('PARENT_PAGE', 'users'); define('PANEL_PAGE', 'users'); define('EDITING_USER', true); $page_title = $language->get('admin', 'users'); require_once(ROOT_PATH . '/core/templates/backend_init.php'); require_once(ROOT_PATH . '/core/includes/markdown/tohtml/Markdown.inc.php'); // Load modules + template Module::loadPage($user, $pages, $cache, $smarty, array($navigation, $cc_nav, $mod_nav), $widgets); if(isset($_GET['action'])){ if($_GET['action'] == 'validate'){ // Validate the user if($user_query->active == 0){ $queries->update('users', $user_query->id, array( 'active' => 1, 'reset_code' => '' )); HookHandler::executeEvent('validateUser', array( 'event' => 'validateUser', 'user_id' => $user_query->id, 'username' => Output::getClean($user_query->username), 'uuid' => Output::getClean($user_query->uuid), 'language' => $language )); Session::flash('edit_user_success', $language->get('admin', 'user_validated_successfully')); } } else if($_GET['action'] == 'update_mcname'){ require_once(ROOT_PATH . '/core/integration/uuid.php'); $uuid = $user_query->uuid; $profile = ProfileUtils::getProfile($uuid); if($profile){ $result = $profile->getUsername(); if(!empty($result)){ if($user_query->username == $user_query->nickname){ $queries->update('users', $user_query->id, array( 'username' => Output::getClean($result), 'nickname' => Output::getClean($result) )); } else { $queries->update('users', $user_query->id, array( 'username' => Output::getClean($result) )); } Session::flash('edit_user_success', $language->get('admin', 'user_updated_successfully')); } } } else if($_GET['action'] == 'update_uuid'){ require_once(ROOT_PATH . '/core/integration/uuid.php'); $profile = ProfileUtils::getProfile($user_query->username); if(!empty($profile)){ $result = $profile->getProfileAsArray(); if(isset($result['uuid']) && !empty($result['uuid'])){ $queries->update('users', $user_query->id, array( 'uuid' => Output::getClean($result['uuid']) )); Session::flash('edit_user_success', $language->get('admin', 'user_updated_successfully')); } } } Redirect::to(URL::build('/panel/users/edit/', 'id=' . Output::getClean($user_query->id))); die(); } if(Input::exists()){ $errors = array(); if(Token::check(Input::get('token'))){ if(Input::get('action') === 'update'){ // Update a user's settings $signature = Input::get('signature'); $_POST['signature'] = strip_tags(Input::get('signature')); $validate = new Validate(); $to_validation = array( 'email' => array( 'required' => true, 'min' => 4, 'max' => 50 ), 'UUID' => array( 'max' => 32 ), 'signature' => array( 'max' => 900 ), 'ip' => array( 'max' => 256 ), 'title' => array( 'max' => 64 ), 'username' => array( 'required' => true, 'min' => 3, 'max' => 20 ), 'nickname' => array( 'required' => true, 'min' => 3, 'max' => 20 ) ); if($user_query->id != 1 && ($user_query->id != $user->data()->id || $user->hasPermission('admincp.groups.self'))){ $to_validation['group'] = array( 'required' => true ); $group = Input::get('group'); } else { $group = $user_query->group_id; } $validation = $validate->check($_POST, $to_validation); if($validation->passed()){ try { // Signature from Markdown -> HTML if needed $cache->setCache('post_formatting'); $formatting = $cache->retrieve('formatting'); if($formatting == 'markdown'){ $signature = Michelf\Markdown::defaultTransform($signature); $signature = Output::getClean($signature); } else { $signature = Output::getClean($signature); } $private_profile_active = $queries->getWhere('settings', array('name', '=', 'private_profile')); $private_profile_active = $private_profile_active[0]->value == 1; $private_profile = 0; if($private_profile_active){ $private_profile = Input::get('privateProfile'); } // Get secondary groups if(isset($_POST['secondary_groups']) && count($_POST['secondary_groups'])){ $secondary_groups = json_encode($_POST['secondary_groups']); } else { $secondary_groups = ''; } $queries->update('users', $user_query->id, array( 'nickname' => Output::getClean(Input::get('nickname')), 'email' => Output::getClean(Input::get('email')), 'group_id' => $group, 'username' => Output::getClean(Input::get('username')), 'user_title' => Output::getClean(Input::get('title')), 'uuid' => Output::getClean(Input::get('UUID')), 'signature' => $signature, 'secondary_groups' => $secondary_groups, 'private_profile' => $private_profile )); Session::flash('edit_user_success', $language->get('admin', 'user_updated_successfully')); Redirect::to(URL::build('/panel/users/edit/', 'id=' . Output::getClean($user_query->id))); die(); } catch(Exception $e){ $errors[] = $e->getMessage(); } } else { foreach($validation->errors() as $error){ if(strpos($error, 'is required') !== false){ // x is required switch($error){ case (strpos($error, 'nickname') !== false): $errors[] = $language->get('user', 'username_required'); break; case (strpos($error, 'email') !== false): $errors[] = $language->get('user', 'email_required'); break; case (strpos($error, 'username') !== false): $errors[] = $language->get('user', 'mcname_required'); break; case (strpos($error, 'group') !== false): $errors[] = $language->get('admin', 'select_user_group'); break; } } else if(strpos($error, 'minimum') !== false){ // x must be a minimum of y characters long switch($error){ case (strpos($error, 'nickname') !== false): $errors[] = $language->get('user', 'username_minimum_3'); break; case (strpos($error, 'username') !== false): $errors[] = $language->get('user', 'mcname_minimum_3'); break; } } else if(strpos($error, 'maximum') !== false){ // x must be a maximum of y characters long switch($error){ case (strpos($error, 'nickname') !== false): $errors[] = $language->get('user', 'username_maximum_20'); break; case (strpos($error, 'username') !== false): $errors[] = $language->get('user', 'mcname_maximum_20'); break; case (strpos($error, 'UUID') !== false): $errors[] = $language->get('admin', 'uuid_max_32'); break; case (strpos($error, 'title') !== false): $errors[] = $language->get('admin', 'title_max_64'); break; } } } } } else if(Input::get('action') == 'delete'){ if($user_query->id > 1){ HookHandler::executeEvent('deleteUser', array( 'user_id' => $user_query->id, 'username' => Output::getClean($user_query->username), 'uuid' => Output::getClean($user_query->uuid), 'email_address' => Output::getClean($user_query->email) )); Session::flash('users_session', $language->get('admin', 'user_deleted')); } Redirect::to(URL::build('/panel/users')); die(); } } else $errors[] = $language->get('general', 'invalid_token'); } if(Session::exists('edit_user_success')) $success = Session::flash('edit_user_success'); if(isset($success)) $smarty->assign(array( 'SUCCESS' => $success, 'SUCCESS_TITLE' => $language->get('general', 'success') )); if(isset($errors) && count($errors)) $smarty->assign(array( 'ERRORS' => $errors, 'ERRORS_TITLE' => $language->get('general', 'error') )); if($user_query->active == 0){ $smarty->assign(array( 'VALIDATE_USER' => $language->get('admin', 'validate_user'), 'VALIDATE_USER_LINK' => URL::build('/panel/users/edit/', 'id=' . Output::getClean($user_query->id) . '&action=validate') )); } if(defined('MINECRAFT') && MINECRAFT === true){ $smarty->assign(array( 'UPDATE_MINECRAFT_USERNAME' => $language->get('admin', 'update_mc_name'), 'UPDATE_MINECRAFT_USERNAME_LINK' => URL::build('/panel/users/edit/', 'id=' . Output::getClean($user_query->id) . '&action=update_mcname'), 'UPDATE_UUID' => $language->get('admin', 'update_uuid'), 'UPDATE_UUID_LINK' => URL::build('/panel/users/edit/', 'id=' . Output::getClean($user_query->id) . '&action=update_uuid') )); } if($user_query->id != 1 && !$user->canViewACP($user_query->id)){ $smarty->assign(array( 'DELETE_USER' => $language->get('admin', 'delete_user'), 'ARE_YOU_SURE' => $language->get('general', 'are_you_sure'), 'CONFIRM_DELETE_USER' => str_replace('{x}', Output::getClean($user_query->nickname), $language->get('admin', 'confirm_user_deletion')), 'YES' => $language->get('general', 'yes'), 'NO' => $language->get('general', 'no') )); } if($user_query->id == 1 || ($user_query->id == $user->data()->id && !$user->hasPermission('admincp.groups.self'))){ $smarty->assign(array( 'CANT_EDIT_GROUP' => $language->get('admin', 'cant_modify_root_user') )); } $displaynames = $queries->getWhere('settings', array('name', '=', 'displaynames')); $displaynames = $displaynames[0]->value; $uuid_linking = $queries->getWhere('settings', array('name', '=', 'uuid_linking')); $uuid_linking = $uuid_linking[0]->value; $private_profile = $queries->getWhere('settings', array('name', '=', 'private_profile')); $private_profile = $private_profile[0]->value; $groups = $queries->orderAll('groups', 'name', 'ASC'); // HTML -> Markdown if necessary $cache->setCache('post_formatting'); $formatting = $cache->retrieve('formatting'); if($formatting == 'markdown'){ require(ROOT_PATH . '/core/includes/markdown/tomarkdown/autoload.php'); $converter = new League\HTMLToMarkdown\HtmlConverter(array('strip_tags' => true)); $signature = $converter->convert(Output::getDecoded($user_query->signature)); $signature = Output::getPurified($signature); } else { $signature = Output::getPurified(Output::getDecoded($user_query->signature)); } $smarty->assign(array( 'PARENT_PAGE' => PARENT_PAGE, 'DASHBOARD' => $language->get('admin', 'dashboard'), 'USER_MANAGEMENT' => $language->get('admin', 'user_management'), 'USERS' => $language->get('admin', 'users'), 'PAGE' => PANEL_PAGE, 'TOKEN' => Token::get(), 'SUBMIT' => $language->get('general', 'submit'), 'EDITING_USER' => str_replace('{x}', Output::getClean($user_query->nickname), $language->get('admin', 'editing_user_x')), 'BACK_LINK' => URL::build('/panel/users'), 'BACK' => $language->get('general', 'back'), 'ACTIONS' => $language->get('general', 'actions'), 'USER_ID' => Output::getClean($user_query->id), 'DISPLAYNAMES' => ($displaynames == 'true'), 'USERNAME' => $language->get('user', 'username'), 'USERNAME_VALUE' => Output::getClean($user_query->username), 'NICKNAME' => $language->get('user', 'nickname'), 'NICKNAME_VALUE' => Output::getClean($user_query->nickname), 'EMAIL_ADDRESS' => $language->get('user', 'email_address'), 'EMAIL_ADDRESS_VALUE' => Output::getClean($user_query->email), 'UUID_LINKING' => ($uuid_linking == '1'), 'UUID' => $language->get('admin', 'minecraft_uuid'), 'UUID_VALUE' => Output::getClean($user_query->uuid), 'USER_TITLE' => $language->get('admin', 'title'), 'USER_TITLE_VALUE' => Output::getClean($user_query->user_title), 'PRIVATE_PROFILE' => $language->get('user', 'private_profile'), 'PRIVATE_PROFILE_VALUE' => $user_query->private_profile, 'PRIVATE_PROFILE_ENABLED' => ($private_profile == 1), 'ENABLED' => $language->get('admin', 'enabled'), 'DISABLED' => $language->get('admin', 'disabled'), 'SIGNATURE' => $language->get('user', 'signature'), 'SIGNATURE_VALUE' => $signature, 'ALL_GROUPS' => $groups, 'GROUP' => $language->get('admin', 'group'), 'GROUP_ID' => $user_query->group_id, 'SECONDARY_GROUPS' => $language->get('admin', 'secondary_groups'), 'SECONDARY_GROUPS_INFO' => $language->get('admin', 'secondary_groups_info'), 'SECONDARY_GROUPS_VALUE' => ((($user_secondary_groups = json_decode($user_query->secondary_groups, true)) == null) ? array() : $user_secondary_groups), 'INFO' => $language->get('general', 'info') )); $cache->setCache('post_formatting'); $formatting = $cache->retrieve('formatting'); if($formatting == 'markdown'){ $template->addJSFiles(array( (defined('CONFIG_PATH' ? CONFIG_PATH : '')) . '/core/assets/plugins/emoji/js/emojione.min.js' => array(), (defined('CONFIG_PATH' ? CONFIG_PATH : '')) . '/core/assets/plugins/emojionearea/js/emojionearea.min.js' => array() )); $template->addJSScript(' $(document).ready(function() { var el = $("#InputSignature").emojioneArea({ pickerPosition: "bottom" }); }); '); } else { $template->addJSFiles(array( (defined('CONFIG_PATH' ? CONFIG_PATH : '')) . '/core/assets/plugins/emoji/js/emojione.min.js' => array(), (defined('CONFIG_PATH' ? CONFIG_PATH : '')) . '/core/assets/plugins/ckeditor/plugins/spoiler/js/spoiler.js' => array(), (defined('CONFIG_PATH' ? CONFIG_PATH : '')) . '/core/assets/plugins/ckeditor/ckeditor.js' => array(), (defined('CONFIG_PATH' ? CONFIG_PATH : '')) . '/core/assets/plugins/ckeditor/plugins/emojione/dialogs/emojione.json' => array() )); $template->addJSScript(Input::createEditor('InputSignature')); } $template->addCSSFiles(array( (defined('CONFIG_PATH' ? CONFIG_PATH : '')) . '/core/assets/plugins/ckeditor/plugins/spoiler/css/spoiler.css' => array(), (defined('CONFIG_PATH' ? CONFIG_PATH : '')) . '/core/assets/plugins/emoji/css/emojione.min.css' => array(), (defined('CONFIG_PATH' ? CONFIG_PATH : '')) . '/core/assets/plugins/emoji/css/emojione.sprites.css' => array(), (defined('CONFIG_PATH' ? CONFIG_PATH : '')) . '/core/assets/plugins/emojionearea/css/emojionearea.min.css' => array(), )); $page_load = microtime(true) - $start; define('PAGE_LOAD_TIME', str_replace('{x}', round($page_load, 3), $language->get('general', 'page_loaded_in'))); $template->onPageLoad(); require(ROOT_PATH . '/core/templates/panel_navbar.php'); // Display template $template->displayTemplate('core/users_edit.tpl', $smarty);